From 184c91cfbc7eb7bef3358998813d56adb4d14192 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 1 Nov 2017 21:28:19 +0100 Subject: [PATCH] Catch PaymentException on paypal return view --- src/pretix/plugins/paypal/payment.py | 1 - src/pretix/plugins/paypal/views.py | 8 +++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pretix/plugins/paypal/payment.py b/src/pretix/plugins/paypal/payment.py index ccfa97eddc..c32ac42143 100644 --- a/src/pretix/plugins/paypal/payment.py +++ b/src/pretix/plugins/paypal/payment.py @@ -230,7 +230,6 @@ class Paypal(BasePaymentProvider): logger.error('Invalid state: %s' % str(payment)) raise PaymentException(_('We were unable to process your payment. See below for details on how to ' 'proceed.')) - return if order.status == Order.STATUS_PAID: logger.warning('PayPal success event even though order is already marked as paid') diff --git a/src/pretix/plugins/paypal/views.py b/src/pretix/plugins/paypal/views.py index 6c94fe33c2..8f320fa036 100644 --- a/src/pretix/plugins/paypal/views.py +++ b/src/pretix/plugins/paypal/views.py @@ -14,6 +14,7 @@ from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_POST from pretix.base.models import Order, Quota, RequiredAction +from pretix.base.payment import PaymentException from pretix.base.services.orders import mark_order_paid, mark_order_refunded from pretix.control.permissions import event_permission_required from pretix.multidomain.urlreverse import eventreverse @@ -57,7 +58,12 @@ def success(request, *args, **kwargs): if pid == request.session.get('payment_paypal_id', None): if order: prov = Paypal(request.event) - resp = prov.payment_perform(request, order) + try: + resp = prov.payment_perform(request, order) + except PaymentException as e: + messages.error(request, str(e)) + urlkwargs['step'] = 'payment' + return redirect(eventreverse(request.event, 'presale:event.checkout', kwargs=urlkwargs)) if resp: return resp else: