订阅续订时是否引发了customer.subscription.updated事件?

时间:2016-10-11 08:13:00

标签: stripe-payments webhooks

我很困惑为什么Stripe的文档表明我认为customer.subscription.updated事件没有被触发:

  • 条带subscription对象具有属性current_period_startcurrent_period_end,只要客户成功支付订阅的发票(https://stripe.com/docs/api#subscriptions),该对象就会更新
  • customer.subscription.updated事件的文档说明了它......

      

    订阅更改时发生。示例包括从一个计划切换到另一个计划,或将状态从试用切换到活动。

    ...这意味着如果current_period_startcurrent_period_end值发生变化,则会引发事件,但如果确实如此,则不会确认事件,或者在这种情况下不确认。

    但是,此第三方网页声明在成功续订(https://www.masteringmodernpayments.com/stripe-webhook-event-cheatsheet#8)时不会引发此问题。

  • 但提升这项活动才有意义......

  • 当然,如果应用程序需要监视单个事件类型(即customer.subscription.updated),那么它将大大简化程序代码,而无需同时监视invoice.payment_succeeded,{{ 1}}和invoice.created
  • 但订阅生命周期(https://stripe.com/docs/subscriptions/lifecycle)的文档完全没有提及charge.succeeded事件。

这应该是没有提出这样一个适当的事件似乎很奇怪。文档也没有说明何时更新customer.subscription.updatedcurrent_period_end值,这限制了它们的效用。

因此,在我的应用程序中,收到current_period_start事件后,我的程序代码如何确定客户的订阅期何时结束呢?

2 个答案:

答案 0 :(得分:11)

我已确认在结算周期结束时调用customer.subscription.updated

为此,我拦截了期末发生的所有webhook(仅供参考:我使用AWS Lambda函数从AWS API网关接收事件,然后将事件放在SQS队列上:))

我同意customer.subscription.updated事件的the Stripe documentation可以更清晰,可以通过说明来涵盖此用例....

  

订阅更改时发生。例子包括   当结算周期结束并且新的结算周期开始时,何时   从一个计划切换到另一个计划,或将状态从试用切换到   活性

(仅供参考:我会完全忽略cheatsheet网站。他们只是对customer.subscription.updated的短暂引用 - 在第8步中,他们描述(不良)用“创建没有试用计划的客户”的用例这不会创建customer.subscription.updated事件,因为此事件仅在订阅更新时发生,而不是在创建时发生。它们引用customer.subscription.updated的位置在步骤12“发票费用尝试失败”的上下文中)

为了保护Stripes有关订阅生命周期的文档,它确实说“下图显示了最重要事件的生命周期”,我会说customer.subscription.updated在创建发票和付款方面,重要的事件并非如此。

有关Stripe如何处理句点结束的一些细节:

  • 在我的测试中,Stripe在订阅的current_period_end属性中的时间戳大约2分钟后引发了customer.subscription.updated事件。该事件有两个与之关联的数据对象。第一个是使用新值的订阅。第二个是具有前两个previousAttributescurrent_period_start值的current_period_end对象。

  • 同时生成了两个事件:customer.subscription.updatedinvoice.created(这是刚刚过去的期间的发票)。

  • 创建发票后大约一小时,同时生成了三个事件:invoice.payment_succeededcharge.succeededinvoice.updated

如何处理结算周期的转存与发票的付款状态完全取决于您,并且在很大程度上取决于您的应用类型。这就是Stripe API的美丽(它是一件美丽的东西)。

在我的情况下,我将结算周期的滚动分别视为发票的付款状态。我的应用程序关注结算周期何时结束,并根据此更新使用情况,但任何支付失败都会生成警报&离线处理。

总之,您可以使用customer.subscription.updated来了解结算周期何时发生变化。

答案 1 :(得分:0)

customer.subscription.updatedcurrent_period_start更改时会触发

current_period_end。这些代表结算周期

invoice.payment_succeeded发生时,您必须更新您身边的信息(例如:订阅期): https://stripe.com/docs/subscriptions/guide#step-3-sync-with-your-site

此处还有更多信息:https://support.stripe.com/questions/what-events-can-i-see-when-a-subscription-is-renewed