Stripe Checkout webhook - 监听哪个事件

pez*_*pez 14 webhooks stripe-payments

背景:

我已经在 React 应用程序中实现了Stripe Checkout ,以及成功侦听事件的Webhook 。

这些是成功结帐后 Webhook 听到的事件:

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的事情:

客户成功创建订阅后,我需要将值保存到数据库中。此值有助于启用付费功能,因此我必须确保 Webhook 捕获所有成功的事件。


问题:

我是否可以始终仅依赖这些 Webhook 事件之一来指示成功?如果不是,哪些是最值得聆听的?

我认为对于我的用例来说最重要的事件可能是checkout.session.completedcharge.succeededpayment_intent.succeeded,但我不太确定这些事件有何不同,以及其中一些事件是否/何时可能不会出现。

文档表明

目前,Stripe 上有三种接受付款的方式:

  • 条纹结帐
  • 收费API
  • 支付意向API

  • checkout.session.completed:结账会话成功完成时发生。
  • charge.succeeded:充电成功时出现。
  • payment_intent.succeeded:当 PaymentIntent 成功完成付款时发生。

所以我的猜测是checkout.session.completed, 、charge.succeeded、 和中的每一个payment_intent.succeeded都表示成功,而这三个都返回的原因是它们对应于当前在 Stripe 上接受付款的三种方式。

如果是这种情况,我可以可靠地监听仅checkout.session.completed指示成功吗?


其他信息:

stripe listen --forward-to localhost:4242/myWebHook成功结帐会话后的输出:

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]
Run Code Online (Sandbox Code Playgroud)

ale*_*lex 21

大多数用户通常侦听成功订阅创建的事件是:

没有单一的正确答案,因为您想要监听哪个事件取决于多种因素,例如

  • 如果您正在侦听的事件包含您需要的信息
  • 对于checkout.session.completed,如果您仅接受卡付款(无异步付款方式),那么是的,您可以在checkout.session.completed客户成功创建订阅后将值保存到数据库中。但是,如果您也接受异步付款方式,您可能需要侦听并处理此处列出的其他事件:https://stripe.com/docs/ payments/checkout/fulfill-orders#delayed-notification
  • 一些用户希望将所有已付费发票(包括订阅续订的发票)保存到他们的数据库中。在这种情况下,监听事件可能更有意义invoice.paid

不使用charge.succeededor是有原因的payment_intent.succeeded

  • 如果发票金额 = 0(例如试用),则不会创建 PaymentIntent/费用。
  • 如果您将发票标记为带外付款,则 PaymentIntent 将被取消,并且您将永远不会收到这两个事件。

我建议阅读https://stripe.com/docs/billing/subscriptions/overview以更好地了解订阅的工作原理。