根据文档,invoice.payment_succeeded在订阅创建和续订时都会被触发。 https://stripe.com/docs/subscriptions/lifecycle
我需要不同的逻辑来创建案例和续约案例。我可以使用哪些数据来区分这些情况?
答案 0 :(得分:1)
我使用以下模型来跟踪付款:
当我第一次使用Stripe的Customer.create创建订阅时,我创建了一个SubscriptionPayment对象并将其附加到订阅。此时,Subscription付款的StripeInvoiceId属性为null(因为它不是从Customer.create返回的)。
片刻之后,当invoice.payment_succeeded事件被触发时,我检索最新的SubscriptionPurchase并检查StripeInvoiceId属性。
如果它为null,我知道这是初始购买的扩充,我只是使用事件附带的信息更新现有对象。
另一种情况是最新的SubscriptionPurchase已经设置了StripeInvoiceId属性;在那种情况下,我知道我正在处理更新。
答案 1 :(得分:1)
执行此操作的几种简单方法,因为webhook数据在数据正文中包含发票信息字段[取决于您要使用的语言/库]:
billing_reason string
并检查它是manual
还是created. subscription_cycle/subscription_update
。这分别意味着是收费或订阅发票。指示创建发票的原因。 subscription_cycle 表示通过订阅进入新的订阅而创建的发票 期。 subscription_update表示由于以下原因创建了发票 创建或更新订阅。已为所有旧版本设置了订阅 表示更改订阅或期间的发票 进步。为与发票无关的所有发票设置了手册 订阅(例如:通过发票编辑器创建)。的 即将来临的值保留为即将来临的模拟发票 发票终点。
subscription
字段。如果为空/空,则不是订阅费用。如果它具有订阅字段,则可以通过API调用获取所需的所有其他信息。