条带网络钩子事件:订阅续订

32

我在我的Asp.net应用程序中使用STRIPE进行信用卡支付。该应用程序有一个每月订阅计划。当用户首次订阅时,会触发Webhook事件'customer.subscription.created'。 我的问题是下个月订阅续订时会发生什么,并将触发哪些事件? 有谁能告诉我订阅续订Webhook事件的流程吗?

谢谢。

5个回答

55

Webhook 'invoice.payment_succeeded'具实际区分新订阅的第一次收费和后续续订收费。

Webhook发送一个包含'billing_reason'的发票对象,可能的值在Stripe文档-发票对象中进行了说明:

billing_reason (string) “表示创建发票的原因。subscription_cycle表示由订阅进入新期间而创建的发票。 subscription_create表示由于创建订阅而创建的发票。 subscription_update表示由于更新订阅而创建的发票。subscription适用于所有旧发票,以指示对订阅或期间的更改。手动设置所有与订阅无关的发票(例如:通过发票编辑器创建)。将预备价值保留给模拟发票,按照即将到来的发票端点。”

如果billing_reason == 'subscription_cycle',则webhook用于订阅续订。

如果 billing_reason == 'subscription_create',那么这个 Webhook 是为了一个全新的订阅。


1
注意:如果订阅是在未来使用 billing_cycle_anchor 创建的,则即使它是订阅的第一张发票/付款,账单周期也会作为 subscription_cycle 传递。 - richardw
在此之前,我使用了一个逻辑检查:期间开始 != 期间结束,以及订阅是否包含在行项目中。你的回答简化了我的代码。 - kakarukeys
@Saad,你介意在这里接受我的答案吗?非常感谢。 - Erin Geyer

15

续订订阅:

当Stripe中的客户订阅续订时,会发生许多事情,每个事件都有相应的事件:

  1. 创建发票- invoice.created
  2. 更新订阅计费周期- customer.subscription.updated
  3. 一个小时后(给您时间添加任何额外费用)Stripe尝试向客户收费。
  4. 如果付款成功,则引发invoice.payment_succeeded事件。

处理自己应用程序中的这些事件的方法是注册Webhook; 一个HTTP端点,Stripe将向其发送事件详细信息。

  1. 使用Stripe标识符(包含在事件有效负载中)找到客户订阅。
  2. 从Stripe API检索订阅详细信息。
  3. 使用Stripe订阅的period_startperiod_end更新我们的订阅的CurrentPeriodStartCurrentPeriodEnd
  4. 使用来自Stripe事件的详细信息创建客户发票。

8
除了customer.subscription.created,您还会收到一个invoice.created事件,接下来是invoice.payment_succeeded(或invoice.payment_failed)。
根据文档:
如果使用Webhook,Stripe会等待所有Webhook成功后一个小时再尝试支付发票;唯一的例外是第一张发票,当您向客户订阅计划时,它会立即创建和支付。
因此,这意味着下个月也会触发invoice.created事件。 然后Stripe将等待一个小时以允许将发票项目添加到发票中(如果您需要的话),然后才会收取客户的卡费,并触发charge.succeeded(如果收费成功)或charge.failed(如果收费失败)事件。
这个小时的等待是为了让您可以添加发票项目。
有关更多信息,请参见此问题的答案

5
您需要关注 invoice.payment_succeeded 事件:
请查看:https://stripe.com/docs/api#event_types 每当发票被支付时,就会触发此事件。也会触发一个 charge.succeeded 事件, 但它们的区别在于 invoice.payment_succeeded 只针对发票付款,而 charge.succeeded 还包括单独的收费。
在订阅的首次收费和后续的收费之间,没有事件上的区分,但您存储的逻辑(例如订阅创建时间、到期时间等)应该帮助您消除歧义。

当前的API确实区分首次充值和重复充值。请参见下面的答案。 - Erin Geyer

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接