О каких веб-перехватчиках нужно заботиться в Stripe Checkout?

Я реализую подписку с помощью Stripe Checkout, но у меня есть вопросы, на которые я не смог получить окончательных ответов даже от их поддержки.

У меня следующий сценарий:

  1. Пользователь нажимает на Subscribe кнопка
  2. Пользователь перенаправляется на страницу Stripe Checkout (вместе с токеном сеанса)
  3. Пользователь успешно платит (и теперь является Заказчиком)
    • и здесь я получаю 14 вызовов веб-перехватчиков (каждый из них имеет разные типы событий):
      • checkout.session.completed
      • payment_method.attached
      • invoice.created
      • customer.updated
      • customer.subscription.created
      • customer.created (хоть я и использовал ту же электронную почту - тестовый режим, но все же...)
      • invoice.finalized
      • invoice.updated
      • invoice.payment_succeeded
      • customer.subscription.updated
      • charge.succeeded
      • payment_intent.succeeded
      • payment_intent.created
      • invoice.updated
      • Редактирование: я их все сразу, потому что я использую Stripe CLI"Slistenфункция и, вероятно, показывает все вызовы, которые обычно не выполняются, потому что они должны быть определены на панели мониторинга событие за событием. Например, если я создаю счет на панели управления и оплачиваю его, тогда, если веб-перехватчик не определен явно, мой сервер ни о чем не узнает.

Пока здесь все работает хорошо. Меня беспокоит следующее:

  • Если в следующем месяце с Клиента будет взиматься плата, какой веб-перехватчик мне следует слушать? Мне нужно различать первого клиента (потому что я создаю новую учетную запись для этого пользователя) и существующего клиента, который мне просто нужно отметить в базе данных, что этот пользователь все еще активен (или прослушивать событие отмены подписки? subscription_schedule.canceled может быть?). Одна из идей - просто прослушать успешный платеж и после этого проверить, существует ли клиент в базе данных - если он просто обновляет, если нет, то создать учетную запись.
  • когда я совершаю еще один платеж по подписке, используя тот же адрес электронной почты, я получаю точно такие же веб-перехватчики (включая customer.created которого, я думаю, не должно быть) или я что-то упускаю?
  • есть ли возможность случайно дважды зарядить клиента, как я читал в других реализациях Stripe (см. идемпотентность)?
  • что еще нужно учитывать при внедрении Stripe Checkout? Мне кажется, их инструкции не убеждают в том, что я сделал все, что считается хорошей практикой.

Поток, которого я хочу достичь:

  1. Успешный платеж пользователя (как указано выше в пунктах с 1 по 3). Уже сделано!
  2. Зарегистрируйте нового клиента в базе данных (в данном случае Firebase) и войдите в систему автоматически, чтобы после оплаты у него был мгновенный доступ.
  3. Пока карта клиента заряжена, у него есть доступ. Пока он отменяет или на карте недостаточно средств, мне нужно, чтобы мой сервер уведомил об этом, чтобы понизить доступ.

0 ответов

Другие вопросы по тегам