stripe-payments - 使用 Stripe 的 webhook 在后端更新订阅的最佳方式是什么?
问题描述
为了在我的数据库中更新客户的订阅,我的 webhook 应该寻找什么事件?我会假设customer.subscription.updated
它包含current_period_start
和current_period_end
项目。然而,我担心的是,这customer.subscription.updated
显然是在被解雇前一个小时左右invoice.payment_succeeded
被解雇的。如果一小时后付款失败,我不想更新客户的订阅。
解决方案
正如鸭子在他/她的评论中所说,如果发票支付失败或成功,我认为更新订阅的最佳方法是收听这些事件:
invoice.payment_succeeded
:每当发票付款尝试成功时发生。invoice.payment_failed
:每当发票付款尝试失败时发生,原因是付款被拒绝或缺少存储的付款方式。
其实这就是我在生产中处理事情的方式,而且非常有效。我会推荐 Stripe 文档的文章Billing Lifecycle and Events,尤其是订阅生命周期部分:
在第一张发票之后,以下事件循环在每个计费周期重复:
- 当订阅接近其续订日期时,将
invoice.upcoming
发送一个事件。- 当订阅期过去时,
invoice.created
会发送一个事件,指示创建发票草稿。- 创建发票大约一小时后,它会被最终确定(不再允许更改),并
invoice.finalized
发送一个事件。尝试收费,并charge.succeeded
发送事件以指示付款成功。- 发送事件以
invoice.payment_succeeded
指示发票已标记为已付款。
推荐阅读
- r - 按列分组并折叠所有其他没有 NA 的列
- azure - 我想在自动化帐户上创建一个运行手册,其中已经通过 arm 连接到它
- php - Laravel Model Create 方法返回不完整的字段模型实例
- c++ - 模数(浮点数)与分支
- gmail-api - WinError 10054 使用 Python 通过 Gmail API 发送带附件的电子邮件时,远程主机强制关闭现有连接
- node.js - 如何使用 flask 和 node.js 设置 HTTPS?
- php - PHP 不正确的变量声明
- selenium-webdriver - Jenkins 中为 TestNG 报告的实时测试
- c++ - 结构内的联合——如何指定初始化程序?
- ios - NSLayoutConstraint 没有成员“属性”