使用 customer.subscription.update 而不是invoice.paid 和invoice. payment_failed 事件webhook 来处理Stripe 订阅

Eli*_*Eli 3 stripe-payments

我正在尝试使用 Stripe 构建一个简单的订阅网站,其中包含三到四个不同的计划。

在应用程序中,当用户注册时,会分配一个 Stripe 客户 ID。然后,当订阅计划时,我正在监听这些 webhook 事件:

customer.subscription.updated || customer.subscription.created

每次订阅发生变化时都会触发它们。然后我检查status属性,该属性会告诉我用户是否是activeincompletetrialingcanceledpast_due或 ,unpaid并在用户的数据库表中采取相应的操作。

这对我来说很有意义,但 Stripe 使用发票事件 Webhooks 代替(https://stripe.com/docs/billing/subscriptions/checkout#provision-and-monitor):

  • 结帐.会话.完成
  • 发票已付
  • 发票.付款失败

我应该听这些事件吗?我不确定,因为,例如,发票事件不会跟踪客户在计费周期中更改计划的时间,因此我customer.subscription.updated无论如何都必须添加 Webhook。

小智 7

这实际上取决于您以及您的集成需求(有很多不同的 Webhook 事件,其中许多可以用于相同的目的)。通常,用户更关心了解续订发票何时实际支付,这就是为什么该指南建议将这些事件作为最低限度的事件。如果您订阅了每月向客户发送货物的订阅,那么在发货前听取发票付款成功的确认更有意义。

话虽这么说,您绝对可以依赖customer.subscription.updated事件,但invoice.paid/payment_failed如果您想知道付款何时成功或想要重试通知,则还需要侦听事件。以您续订并付款成功的情况为例:

  1. 首先,您将收到customer.subscription.updated事件信号,表明计费周期已更改并且草稿发票已创建(这也将发送事件invoice.created)。
  2. 一小时后发票完成并自动付款
  3. 您的 Webhook 端点收到一个invoice.paidWebhook 事件,但没有收到其他customer.subscription.updated事件,因为状态处于活动状态且未更改。

  • 对于某些 SaaS 应用程序,如果订阅保持“活动”并且发票电子邮件由 Stripe 处理,则不会发生任何变化,因此可以仅依赖“customer.subscription.updated”事件。 (3认同)