Фон:
Я реализовал Полоса в приложении React и вебхук, который успешно прослушивает события.
Вот события, которые вебхук слышит после успешной проверки:
checkout.session.completed
charge.succeeded
payment_method.attached
customer.created
customer.updated
invoice.created
invoice.finalized
customer.subscription.created
invoice.updated
customer.subscription.updated
invoice.paid
invoice.payment_succeeded
payment_intent.succeeded
payment_intent.created
Что я пытаюсь сделать:
Мне нужно сохранить значение в базе данных после того, как клиент успешно создаст подписку. Это значение помогает включить платные функции, поэтому я должен быть уверен, что веб-перехватчик перехватывает все успешные события.
Вопрос:
Могу ли я постоянно полагаться только на одно из этих событий веб-перехватчика, чтобы указать на успех? Если нет, то какие из них важнее всего слушать?
Я думаю, что наиболее важными событиями для моего варианта использования, вероятно, являются checkout.session.completed, charge.succeeded и payment_intent.succeeded, но я не слишком уверен в том, чем они отличаются и могут ли/когда некоторые из них не появиться.
документы указывает:
There are three ways to accept payments on Stripe today:
- Stripe Checkout
- Charges API
- Payment Intents API
и:
checkout.session.completed: Occurs when a Checkout Session has been successfully completed.charge.succeeded: Occurs whenever a charge is successful.payment_intent.succeeded: Occurs when a PaymentIntent has successfully completed payment.
Итак, я предполагаю, что каждый из checkout.session.completed, charge.succeeded и payment_intent.succeeded указывает на успех, и причина, по которой все три возвращаются, заключается в том, что они соответствуют трем способам приема платежей в Stripe в настоящее время.
Если это так, могу ли я надежно слушать только checkout.session.completed, чтобы указать на успех?
Другая информация:
stripe listen --forward-to localhost:4242/myWebHook вывод после успешной сессии Checkout:
(фактические значения evt_ заменены для простоты)
2022-05-08 --> checkout.session.completed [evt_123456]
2022-05-08 --> charge.succeeded [evt_123456]
2022-05-08 --> payment_method.attached [evt_123456]
2022-05-08 --> customer.created [evt_123456]
2022-05-08 --> customer.updated [evt_123456]
2022-05-08 --> invoice.created [evt_123456]
2022-05-08 --> invoice.finalized [evt_123456]
2022-05-08 --> customer.subscription.created [evt_123456]
2022-05-08 --> invoice.updated [evt_123456]
2022-05-08 --> customer.subscription.updated [evt_123456]
2022-05-08 --> invoice.paid [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 --> invoice.payment_succeeded [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 <-- [200] POST http://localhost:4242/myWebHook [evt_123456]
2022-05-08 --> payment_intent.succeeded [evt_123456]
2022-05-08 <-- [200] POST http://localhost:3000/myWebHook [evt_123456]
2022-05-08 --> payment_intent.created [evt_123456]
2022-05-08 <-- [200] POST http://localhost:3000/myWebHook [evt_123456]





События, которые большинство пользователей обычно прослушивают для успешного создания подписки:
checkout.session.completed илиinvoice.paid и проверьте billing_reason, чтобы определить, почему счет был создан: https://stripe.com/docs/api/invoices/object#invoice_object-billing_reasonНет единого правильного ответа, потому что какое событие вы хотели бы прослушать, будет зависеть от множества факторов, например.
checkout.session.completed, если вы принимаете только карточные платежи (без асинхронных способов оплаты), то да, вы можете полагаться на checkout.session.completed для сохранения значения в базе данных после того, как клиент успешно создаст подписку. Однако, если вы также принимаете асинхронные способы оплаты, вам следует прослушивать и обрабатывать дополнительные события, перечисленные здесь: https://stripe.com/docs/payments/checkout/fulfill-orders#delayed-notification.invoice.paid.Есть причины не использовать charge.succeeded или payment_intent.succeeded:
Я бы посоветовал прочитать https://stripe.com/docs/billing/subscriptions/обзор, чтобы лучше понять, как работают подписки.