在条形invoice.payment_succeeded webhook中,如何区分订阅创建和续订

时间:2017-01-21 21:21:29

标签: stripe-payments webhooks

根据文档,invoice.payment_succeeded在订阅创建和续订时都会被触发。 https://stripe.com/docs/subscriptions/lifecycle

我需要不同的逻辑来创建案例和续约案例。我可以使用哪些数据来区分这些情况?

2 个答案:

答案 0 :(得分:1)

我使用以下模型来跟踪付款:

  • 用户有0..1订阅
  • 订阅有0 .. * SubscriptionPayments
  • SubscriptionPayment存储来自Stripe的所有相关信息

当我第一次使用Stripe的Customer.create创建订阅时,我创建了一个SubscriptionPayment对象并将其附加到订阅。此时,Subscription付款的StripeInvoiceId属性为null(因为它不是从Customer.create返回的)。

片刻之后,当invoice.payment_succeeded事件被触发时,我检索最新的SubscriptionPurchase并检查StripeInvoiceId属性。

如果它为null,我知道这是初始购买的扩充,我只是使用事件附带的信息更新现有对象。

另一种情况是最新的SubscriptionPurchase已经设置了StripeInvoiceId属性;在那种情况下,我知道我正在处理更新。

答案 1 :(得分:1)

执行此操作的几种简单方法,因为webhook数据在数据正文中包含发票信息字段[取决于您要使用的语言/库]:

  1. 获取billing_reason string并检查它是manual还是created. subscription_cycle/subscription_update。这分别意味着是收费或订阅发票。
  

指示创建发票的原因。 subscription_cycle   表示通过订阅进入新的订阅而创建的发票   期。 subscription_update表示由于以下原因创建了发票   创建或更新订阅。已为所有旧版本设置了订阅   表示更改订阅或期间的发票   进步。为与发票无关的所有发票设置了手册   订阅(例如:通过发票编辑器创建)。的   即将来临的值保留为即将来临的模拟发票   发票终点。

  1. 检查发票上的subscription字段。如果为空/空,则不是订阅费用。如果它具有订阅字段,则可以通过API调用获取所需的所有其他信息。