From 5eeba8828337ea73b0144f34a98fd8b61c357a96 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 3 Jul 2019 10:56:59 +0200 Subject: [PATCH] Stripe: Robust webhook recognition --- src/pretix/plugins/stripe/views.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/pretix/plugins/stripe/views.py b/src/pretix/plugins/stripe/views.py index 249f577ec..8aae931da 100644 --- a/src/pretix/plugins/stripe/views.py +++ b/src/pretix/plugins/stripe/views.py @@ -173,6 +173,17 @@ def webhook(request, *args, **kwargs): if hasattr(request, 'event'): return func(request.event, event_json, objid, None) else: + # If we receive a charge webhook *before* the payment intent webhook, we don't know the charge ID yet + # and can't match it -- but we know the payment intent ID! + if event_json['data']['object']['object'] == "charge" and event_json['data']['object']['payment_intent']: + try: + rso = ReferencedStripeObject.objects.select_related('order', 'order__event').get( + reference=event_json['data']['object']['payment_intent'] + ) + return func(rso.order.event, event_json, objid, rso) + except ReferencedStripeObject.DoesNotExist: + pass + return HttpResponse("Unable to detect event", status=200)