Stripe订阅支付失败后,如何重新激活订阅权益及对应事件?
重新激活订阅权益的正确事件触发逻辑
当用户之前的付款失败、订阅权益被禁用后,你需要依赖以下两种核心事件来安全重新激活权益,优先级和可靠性如下:
首选事件:invoice.paid
这是最直接、最可靠的信号——当用户成功支付了之前失败的逾期账单时,Stripe会触发该事件。处理逻辑如下:
- 拿到事件中的
invoice.subscription关联用户的订阅记录,确认是之前标记为未付款的那笔订阅。 - 将数据库里的
subscriptionNotPaid字段更新为false。 - 立即恢复用户的订阅权益,若之前因付款失败未正确延续订阅期限,可同步延长对应时长。
补充事件:customer.subscription_updated
如果用户的订阅状态从past_due(逾期未付)变回active(正常生效),这个事件会被触发。但需要额外判断订阅状态的变更原因:
- 检查事件返回的订阅对象
status字段是否变为active,且之前状态是past_due。 - 确认状态变更是因为付款成功,而非其他操作(比如用户手动修改订阅计划)。
关键注意事项
- 务必保证事件处理的幂等性:通过记录事件ID(
event.id)避免重复处理同一事件,防止重复启用权益或多次延长期限。 - 不要仅依赖订阅状态变更而忽略付款确认,
invoice.paid是用户实际完成付款的铁证,比订阅状态变更更可靠。
内容的提问来源于stack exchange,提问作者Dudu Dudu
相关产品推荐
相关产品推荐

