Почему веб-крючок 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 вопроса, которые я хотел бы задать:

  1. Почему два одинаковых события отправляются одновременно?
  2. Можно ли послать событие только один раз? Или можно послать второе событие немного позже?
  3. Как я могу решить эту проблему?

Если кто-нибудь знает об этой проблеме, пожалуйста, помогите мне. спасибо.

Вам следует написать в службу поддержки Stripe, поскольку только они могут просмотреть событие (evt_1LP4n0BB5Q5Dr2x7QDEfWFak) здесь.

Мое предположение состоит в том, что вы могли перепутать и дважды сработать по:

  1. Произвели платеж
  2. Вручную вызвали команду resend (Зачем вообще нужно использовать resend?)

Если вы только произвели платеж, но наступило 2 одинаковых события, то лучше всего обратиться в службу поддержки Stripe, как указано выше

Вернуться на верх