forked from CGM_Public/pretix_original
Stripe: Look up charges by their source ID as well
This commit is contained in:
@@ -194,20 +194,29 @@ def webhook(request, *args, **kwargs):
|
|||||||
if event_json['data']['object']['object'] == "charge":
|
if event_json['data']['object']['object'] == "charge":
|
||||||
func = charge_webhook
|
func = charge_webhook
|
||||||
objid = event_json['data']['object']['id']
|
objid = event_json['data']['object']['id']
|
||||||
|
lookup_ids = [
|
||||||
|
objid,
|
||||||
|
event_json['data']['object'].get('source', {}).get('id')
|
||||||
|
]
|
||||||
elif event_json['data']['object']['object'] == "dispute":
|
elif event_json['data']['object']['object'] == "dispute":
|
||||||
func = charge_webhook
|
func = charge_webhook
|
||||||
objid = event_json['data']['object']['charge']
|
objid = event_json['data']['object']['charge']
|
||||||
|
lookup_ids = [objid]
|
||||||
elif event_json['data']['object']['object'] == "source":
|
elif event_json['data']['object']['object'] == "source":
|
||||||
func = source_webhook
|
func = source_webhook
|
||||||
objid = event_json['data']['object']['id']
|
objid = event_json['data']['object']['id']
|
||||||
|
lookup_ids = [objid]
|
||||||
elif event_json['data']['object']['object'] == "payment_intent":
|
elif event_json['data']['object']['object'] == "payment_intent":
|
||||||
func = paymentintent_webhook
|
func = paymentintent_webhook
|
||||||
objid = event_json['data']['object']['id']
|
objid = event_json['data']['object']['id']
|
||||||
|
lookup_ids = [objid]
|
||||||
else:
|
else:
|
||||||
return HttpResponse("Not interested in this data type", status=200)
|
return HttpResponse("Not interested in this data type", status=200)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
rso = ReferencedStripeObject.objects.select_related('order', 'order__event').get(reference=objid)
|
rso = ReferencedStripeObject.objects.select_related('order', 'order__event').get(
|
||||||
|
reference__in=[lid for lid in lookup_ids if lid]
|
||||||
|
)
|
||||||
return func(rso.order.event, event_json, objid, rso)
|
return func(rso.order.event, event_json, objid, rso)
|
||||||
except ReferencedStripeObject.DoesNotExist:
|
except ReferencedStripeObject.DoesNotExist:
|
||||||
if event_json['data']['object']['object'] == "charge" and 'payment_intent' in event_json['data']['object']:
|
if event_json['data']['object']['object'] == "charge" and 'payment_intent' in event_json['data']['object']:
|
||||||
@@ -398,7 +407,6 @@ def source_webhook(event, event_json, source_id, rso):
|
|||||||
prov._charge_source(None, source_id, payment)
|
prov._charge_source(None, source_id, payment)
|
||||||
except PaymentException:
|
except PaymentException:
|
||||||
logger.exception('Webhook error')
|
logger.exception('Webhook error')
|
||||||
|
|
||||||
elif src.status == 'failed':
|
elif src.status == 'failed':
|
||||||
payment.fail(info=str(src))
|
payment.fail(info=str(src))
|
||||||
elif src.status == 'canceled' and payment.state in (OrderPayment.PAYMENT_STATE_PENDING, OrderPayment.PAYMENT_STATE_CREATED):
|
elif src.status == 'canceled' and payment.state in (OrderPayment.PAYMENT_STATE_PENDING, OrderPayment.PAYMENT_STATE_CREATED):
|
||||||
|
|||||||
Reference in New Issue
Block a user