【问题标题】:Stripe webhook confusion条纹 webhook 混淆
【发布时间】:2020-12-08 05:23:37
【问题描述】:

我很难在 Stripe 中找到合适的 webhook 来使用,因为它似乎在多种情况下都会被解雇。

因此,我的网站出售了一些商品(例如 10 件),可以作为单次购买或订阅购买(您每 X 天获得一次商品,没有 SASS jut 产品)。我正在使用 Stripe 的 Checkout 和 Portal 来处理所有订阅和单次购买,这些部分效果很好。人们将东西添加到购物车,结帐,付款,我们都很好。问题是从 webhook 向我们的系统添加订单。

看看这个场景:一个人将 2 个单品和 1 个订阅添加到他们的购物车。他们结账并付款。发生这种情况时,我们让checkout.session.completed 赶上结帐会话已完成,我们将这些商品从他们的购物车添加到订单中。在“X”天后重新订阅,我们将监听 invoice.payment_succeeded webhook 以在我们的系统中创建新订单。这个逻辑是有缺陷的,因为invoice.payment_succeeded 在第一个订单上也被调用,所以基本上当他们结帐时,我们的系统会添加 2 个订阅订单:一个来自 checkout.session.completed,一个来自 invoice.payment_succeeded。我们该如何处理?

我想要的是:

1 个 webhook 用于了解结帐何时完成,然后才被调用,他们这样做:checkout.session.completed

1 个仅在续订订阅时调用的 webhook,在创建时也不会调用,我找不到。

如果他们没有仅用于订阅续订的 webhook,我如何在“发票”对象中判断是第一个,所以我在结帐时不做任何事情,只在续订时创建新订单?

【问题讨论】:

    标签: stripe-payments


    【解决方案1】:

    您应该考虑使用invoice.paid, as it will also fire when you mark an Invoice as paid out-of-band,而不是使用invoice.payment_succeededinvoice.payment_succeeded 不会发生这种情况)。两者都描述了发票,因此您应该能够在它们之间切换,只需对代码进行最少的更改或无需更改。

    您是正确的,没有特定于仅订阅续订的事件,但您可以在发票上使用 the billing_reason property 来确定创建发票的原因。如果它是新订阅的第一张发票,则发票的 billing_reason 将设置为 subscription_create

    【讨论】:

      猜你喜欢
      • 2016-03-07
      • 2016-09-12
      • 1970-01-01
      • 2012-03-26
      • 2015-10-07
      • 2013-12-02
      • 2016-09-17
      • 2013-11-06
      • 1970-01-01
      相关资源
      最近更新 更多