我应该在哪个条带事件上更新我的数据库以授予订阅者访问权限

At which stripe event should I update my db to grant subscriber access

我有一个使用 Stripe 进行订阅的 SaaS MERN 应用程序。我正在使用 Stripe 的新结账功能来处理所有付款。我安装了 stripe CLI 以查看进行订阅时发生的事件。我有几个关于发出的事件以及如何在我的 stripe webhook 中处理它们的问题。

  1. 下面哪个事件表明支付成功,我可以更新我的数据库。

  2. 为什么payment_intent.succeeded出现在payment_intent.created之前。

  3. 为什么会发生 customer.subscription.updated 事件(我假设它应该只是第一次购买时应该发生的 customer.subscription.created 事件)

  4. 我在我的 webhook 中使用 customer.subscription.updated 事件来允许客户打开和关闭自动续订。因为 customer.subscription.updated 事件也在订阅时的初始付款时被触发,所以我如何区分在这两种情况下触发相同事件时要做什么。

  5. 这不是那么重要,但如果有人知道底部的 POST 错误是什么,我将不胜感激。 [编辑] 我通过将我的 res.status(200).json({received: true}) 移到我的代码上方来解决这个问题。最初它被放置在我的 webhook 的最后,所以我认为它超时了。

谢谢:)

  1. 如果您特别想在成功付款时提供订阅,那么您应该收听 payment_intent.succeeded

  2. Stripe 不保证 webhook 事件的顺序,可能会乱序接收它们:https://stripe.com/docs/webhooks/best-practices#event-ordering

  3. 订阅的 status 将被更新以显示最新的发票已成功支付,这会触发和更新事件

  4. 您可能想改用 invoice.upcominghttps://stripe.com/docs/api/events/types?lang=java#event_types-invoice.upcoming

  5. 你必须在你这边调试它才能看到它来自哪里。看起来您的本地服务器可能不是 运行,因此 Stripe CLI 无法转发 webhook 事件。