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

Posted

技术标签:

【中文标题】我应该在哪个条带事件中更新我的数据库以授予订阅者访问权限【英文标题】:At which stripe event should I update my db to grant subscriber access 【发布时间】:2021-04-04 07:38:54 【问题描述】:

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

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

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

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

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

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

谢谢你:)

【问题讨论】:

【参考方案1】:

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

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

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

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

    您必须自己调试它才能查看它的来源。看起来您的本地服务器可能没有运行,因此 Stripe CLI 无法在 webhook 事件上转发。

【讨论】:

以上是关于我应该在哪个条带事件中更新我的数据库以授予订阅者访问权限的主要内容,如果未能解决你的问题,请参考以下文章

Stripe 定期/订阅计费最佳设计/实践?

如何在 symfony 5 中实现条带 webhook?

Symfony 5,测试条带时得到 403

哪个是订阅以太坊状态变化的更有效方式

如何使用 firebase 条带扩展添加多个订阅?

如何/我可以在条带 webhook 处理程序中调用 FASTAPI 异步函数,还是我的方法完全错误?