Почему веб-крючок Stripe отправляет одно и то же событие дважды примерно в одно и то же время?
Я создаю платежную систему с использованием Stripe. После совершения платежа с помощью Stripe мы используем событие 'invoice.paid' для авторизации пользователя. Я пробовал это несколько раз и заметил, что webhook посылает одно и то же событие дважды примерно в одно и то же время.
Это воспроизводит одну и ту же проблему как при совершении платежа в тестовом режиме с веб-страницы, так и при выполнении следующей команды из терминала.
stripe events resend evt_xxxxxxxxxxxxxxx
Однако это явление подтверждается только в среде разработки путем выполнения следующей команды.
stripe listen --forward-to http://0.0.0.0:8080/webhook/
Я еще не пробовал его в производстве.
Я получаю одно и то же событие дважды, поэтому я сохранил ID события и настроил его на возврат статуса 200 при получении второго события.
def webhook_view (request):
payload = json.loads(request.body)
event_id = payload.get('id')
event_type = payload.get('type','')
logger.info (f'type: {event_type} event_id: {event_id}')
if Event.objects.filter (id = event_id).exists ():
logger.info (f'{event_id} already exists')
return HttpResponse (status = 200)
Event (id = event_id, created_at = timezone.now(), data = json.dumps(payload)).save()
Однако интервал между двумя запросами настолько мал, что второе событие проходит проверку.
[2022-07-24 22:28:53,677] [webhook_view: 60] type: invoice.paid event_id: evt_1LP4n0BB5Q5Dr2x7QDEfWFak
[2022-07-24 22:28:53,682] [webhook_view: 60] type: invoice.paid event_id: evt_1LP4n0BB5Q5Dr2x7QDEfWFak
Есть 3 вопроса, которые я хотел бы задать:
- Почему два одинаковых события отправляются одновременно?
- Можно ли послать событие только один раз? Или можно послать второе событие немного позже?
- Как я могу решить эту проблему?
Если кто-нибудь знает об этой проблеме, пожалуйста, помогите мне. спасибо.
Вам следует написать в службу поддержки Stripe, поскольку только они могут просмотреть событие (evt_1LP4n0BB5Q5Dr2x7QDEfWFak) здесь.
Мое предположение состоит в том, что вы могли перепутать и дважды сработать по:
- Произвели платеж
- Вручную вызвали команду resend (Зачем вообще нужно использовать resend?)
Если вы только произвели платеж, но наступило 2 одинаковых события, то лучше всего обратиться в службу поддержки Stripe, как указано выше