From f484eb65df5187e7ffd339e49642548b26a4fcf5 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sun, 22 Mar 2020 10:51:14 +0100 Subject: [PATCH] PayPal: Do not crash on failed refund --- src/pretix/plugins/paypal/payment.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/pretix/plugins/paypal/payment.py b/src/pretix/plugins/paypal/payment.py index d9cb17cd7..b7d956697 100644 --- a/src/pretix/plugins/paypal/payment.py +++ b/src/pretix/plugins/paypal/payment.py @@ -427,19 +427,22 @@ class Paypal(BasePaymentProvider): def execute_refund(self, refund: OrderRefund): self.init_api() - sale = None - for res in refund.payment.info_data['transactions'][0]['related_resources']: - for k, v in res.items(): - if k == 'sale': - sale = paypalrestsdk.Sale.find(v['id']) - break + try: + sale = None + for res in refund.payment.info_data['transactions'][0]['related_resources']: + for k, v in res.items(): + if k == 'sale': + sale = paypalrestsdk.Sale.find(v['id']) + break - pp_refund = sale.refund({ - "amount": { - "total": self.format_price(refund.amount), - "currency": refund.order.event.currency - } - }) + pp_refund = sale.refund({ + "amount": { + "total": self.format_price(refund.amount), + "currency": refund.order.event.currency + } + }) + except paypalrestsdk.exceptions.ConnectionError as e: + raise PaymentException(_('Refunding the amount via PayPal failed: {}').format(str(e))) if not pp_refund.success(): raise PaymentException(_('Refunding the amount via PayPal failed: {}').format(pp_refund.error)) else: