О каких веб-перехватчиках нужно заботиться в Stripe Checkout?
Я реализую подписку с помощью Stripe Checkout, но у меня есть вопросы, на которые я не смог получить окончательных ответов даже от их поддержки.
У меня следующий сценарий:
- Пользователь нажимает на
Subscribe
кнопка - Пользователь перенаправляется на страницу Stripe Checkout (вместе с токеном сеанса)
- Пользователь успешно платит (и теперь является Заказчиком)
- и здесь я получаю 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"S
listen
функция и, вероятно, показывает все вызовы, которые обычно не выполняются, потому что они должны быть определены на панели мониторинга событие за событием. Например, если я создаю счет на панели управления и оплачиваю его, тогда, если веб-перехватчик не определен явно, мой сервер ни о чем не узнает.
- и здесь я получаю 14 вызовов веб-перехватчиков (каждый из них имеет разные типы событий):
Пока здесь все работает хорошо. Меня беспокоит следующее:
- Если в следующем месяце с Клиента будет взиматься плата, какой веб-перехватчик мне следует слушать? Мне нужно различать первого клиента (потому что я создаю новую учетную запись для этого пользователя) и существующего клиента, который мне просто нужно отметить в базе данных, что этот пользователь все еще активен (или прослушивать событие отмены подписки?
subscription_schedule.canceled
может быть?). Одна из идей - просто прослушать успешный платеж и после этого проверить, существует ли клиент в базе данных - если он просто обновляет, если нет, то создать учетную запись. - когда я совершаю еще один платеж по подписке, используя тот же адрес электронной почты, я получаю точно такие же веб-перехватчики (включая
customer.created
которого, я думаю, не должно быть) или я что-то упускаю? - есть ли возможность случайно дважды зарядить клиента, как я читал в других реализациях Stripe (см. идемпотентность)?
- что еще нужно учитывать при внедрении Stripe Checkout? Мне кажется, их инструкции не убеждают в том, что я сделал все, что считается хорошей практикой.
Поток, которого я хочу достичь:
- Успешный платеж пользователя (как указано выше в пунктах с 1 по 3). Уже сделано!
- Зарегистрируйте нового клиента в базе данных (в данном случае Firebase) и войдите в систему автоматически, чтобы после оплаты у него был мгновенный доступ.
- Пока карта клиента заряжена, у него есть доступ. Пока он отменяет или на карте недостаточно средств, мне нужно, чтобы мой сервер уведомил об этом, чтобы понизить доступ.