From efbddc248663ad5fc74684d942f9ddbfdfe60dc7 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 1 Oct 2018 13:48:47 +0200 Subject: [PATCH] Log failed payments --- src/pretix/control/logdisplay.py | 1 + src/pretix/plugins/paypal/payment.py | 4 ++++ src/pretix/plugins/stripe/payment.py | 25 +++++++++++++++++++++++++ src/pretix/plugins/stripe/views.py | 15 +++++++++++++++ 4 files changed, 45 insertions(+) diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py index 3d6ad6ce6c..4a496033ac 100644 --- a/src/pretix/control/logdisplay.py +++ b/src/pretix/control/logdisplay.py @@ -198,6 +198,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs): 'pretix.event.order.payment.confirmed': _('Payment {local_id} has been confirmed.'), 'pretix.event.order.payment.canceled': _('Payment {local_id} has been canceled.'), 'pretix.event.order.payment.started': _('Payment {local_id} has been started.'), + 'pretix.event.order.payment.failed': _('Payment {local_id} has failed.'), 'pretix.event.order.refund.created': _('Refund {local_id} has been created.'), 'pretix.event.order.refund.created.externally': _('Refund {local_id} has been created by an external entity.'), 'pretix.event.order.refund.done': _('Refund {local_id} has been completed.'), diff --git a/src/pretix/plugins/paypal/payment.py b/src/pretix/plugins/paypal/payment.py index c9f12dba89..aa742aa0d2 100644 --- a/src/pretix/plugins/paypal/payment.py +++ b/src/pretix/plugins/paypal/payment.py @@ -245,6 +245,10 @@ class Paypal(BasePaymentProvider): if payment.state != 'approved': payment_obj.state = OrderPayment.PAYMENT_STATE_FAILED payment_obj.save() + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + }) logger.error('Invalid state: %s' % str(payment)) raise PaymentException(_('We were unable to process your payment. See below for details on how to ' 'proceed.')) diff --git a/src/pretix/plugins/stripe/payment.py b/src/pretix/plugins/stripe/payment.py index 43a560df93..0da6f5b3f0 100644 --- a/src/pretix/plugins/stripe/payment.py +++ b/src/pretix/plugins/stripe/payment.py @@ -326,6 +326,11 @@ class StripeMethod(BasePaymentProvider): } payment.state = OrderPayment.PAYMENT_STATE_FAILED payment.save() + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + 'message': err['message'] + }) raise PaymentException(_('Stripe reported an error with your card: %s') % err['message']) except stripe.error.StripeError as e: @@ -341,6 +346,11 @@ class StripeMethod(BasePaymentProvider): } payment.state = OrderPayment.PAYMENT_STATE_FAILED payment.save() + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + 'message': err['message'] + }) raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' 'with us if this problem persists.')) else: @@ -370,6 +380,11 @@ class StripeMethod(BasePaymentProvider): payment.info = str(charge) payment.state = OrderPayment.PAYMENT_STATE_FAILED payment.save() + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + 'info': str(charge) + }) raise PaymentException(_('Stripe reported an error: %s') % charge.failure_message) def payment_pending_render(self, request, payment) -> str: @@ -461,6 +476,11 @@ class StripeMethod(BasePaymentProvider): } payment.state = OrderPayment.PAYMENT_STATE_FAILED payment.save() + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + 'message': err['message'] + }) raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' 'with us if this problem persists.')) @@ -630,6 +650,11 @@ class StripeCC(StripeMethod): } payment.state = OrderPayment.PAYMENT_STATE_FAILED payment.save() + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + 'message': err['message'] + }) raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' 'with us if this problem persists.')) diff --git a/src/pretix/plugins/stripe/views.py b/src/pretix/plugins/stripe/views.py index 5b3a674cd8..1b3dd9122a 100644 --- a/src/pretix/plugins/stripe/views.py +++ b/src/pretix/plugins/stripe/views.py @@ -270,6 +270,11 @@ def charge_webhook(event, event_json, charge_id, rso): payment.info = str(charge) payment.state = OrderPayment.PAYMENT_STATE_FAILED payment.save() + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + 'info': str(charge) + }) return HttpResponse(status=200) @@ -335,6 +340,11 @@ def source_webhook(event, event_json, source_id, rso): elif src.status == 'failed': payment.info = str(src) payment.state = OrderPayment.PAYMENT_STATE_FAILED + payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': payment.local_id, + 'provider': payment.provider, + 'info': str(src) + }) payment.save() return HttpResponse(status=200) @@ -423,6 +433,11 @@ class ReturnView(StripeOrderView, View): self.payment.state = OrderPayment.PAYMENT_STATE_FAILED self.payment.info = str(src) self.payment.save() + self.payment.order.log_action('pretix.event.order.payment.failed', { + 'local_id': self.payment.local_id, + 'provider': self.payment.provider, + 'info': str(src) + }) messages.error(self.request, _('We had trouble authorizing your card payment. Please try again and ' 'get in touch with us if this problem persists.')) return self._redirect_to_order()