【问题标题】:In the stripe invoice.payment_succeeded webhook, how can I distinguish between a subscription creation and renewal在条带 invoice.payment_succeeded webhook 中,如何区分订阅创建和续订
【发布时间】:2017-06-06 16:22:23
【问题描述】:

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

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

【问题讨论】:

    标签: stripe-payments webhooks


    【解决方案1】:

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

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

    指出创建发票的原因。订阅周期 表示由订阅推进到新的发票创建的发票 时期。 subscription_update 表示由于以下原因而创建的发票 创建或更新订阅。订阅设置为所有旧 发票以表明订阅或期间的更改 进步。为所有与 a 无关的发票设置了手册 订阅(例如:通过发票编辑器创建)。这 即将到来的价值是为每个即将到来的模拟发票保留的 发票端点。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-11-29
        • 2014-05-01
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 2014-07-11
        • 1970-01-01
        • 2019-12-28
        • 2020-12-05
        相关资源
        最近更新 更多