mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
More safety against duplicate PayPal payments
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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 '
|
||||||
|
|||||||
Reference in New Issue
Block a user