More safety against duplicate PayPal payments

This commit is contained in:
Raphael Michel
2017-02-01 18:40:27 +01:00
parent 90bdb30449
commit cd61c0833d
2 changed files with 26 additions and 25 deletions

View File

@@ -103,7 +103,7 @@ def mark_order_paid(order: Order, provider: str=None, info: str=None, date: date
order.log_action('pretix.event.order.paid', { order.log_action('pretix.event.order.paid', {
'provider': provider, 'provider': provider,
'info': info, 'info': info,
'date': date, 'date': date or now_dt,
'manual': manual, 'manual': manual,
'force': force 'force': force
}, user=user) }, user=user)

View File

@@ -160,31 +160,32 @@ class Paypal(BasePaymentProvider):
return self._execute_payment(payment, request, order) return self._execute_payment(payment, request, order)
def _execute_payment(self, payment, request, order): def _execute_payment(self, payment, request, order):
payment.replace([ if payment.state == 'created':
{ payment.replace([
"op": "replace", {
"path": "/transactions/0/item_list", "op": "replace",
"value": { "path": "/transactions/0/item_list",
"items": [ "value": {
{ "items": [
"name": __('Order {slug}-{code}').format(slug=self.event.slug.upper(), code=order.code), {
"quantity": 1, "name": __('Order {slug}-{code}').format(slug=self.event.slug.upper(), code=order.code),
"price": str(order.total), "quantity": 1,
"currency": order.event.currency "price": str(order.total),
} "currency": order.event.currency
] }
]
}
},
{
"op": "replace",
"path": "/transactions/0/description",
"value": __('Order {order} for {event}').format(
event=request.event.name,
order=order.code
)
} }
}, ])
{ payment.execute({"payer_id": request.session.get('payment_paypal_payer')})
"op": "replace",
"path": "/transactions/0/description",
"value": __('Order {order} for {event}').format(
event=request.event.name,
order=order.code
)
}
])
payment.execute({"payer_id": request.session.get('payment_paypal_payer')})
if payment.state == 'pending': if payment.state == 'pending':
messages.warning(request, _('PayPal has not yet approved the payment. We will inform you as soon as the ' messages.warning(request, _('PayPal has not yet approved the payment. We will inform you as soon as the '