检测订阅是否自动取消

use*_*760 6 stripe-payments

我已将我的 Stripe 订阅设置为在​​ 3 次付款尝试失败后自动取消,并且我有 customer.subscription.deleted webhook 来记录取消的订阅。

有没有办法在 customer.subscription.deleted webhook 中检测订阅是否因付款尝试失败或通过 Stripe Dashboard 手动取消或因我们的应用程序发出的 API 请求而被条带取消?

Ywa*_*ain 9

您无法区分后两种情况,因为仪表板本身使用 API。

但是,您可以区分自动取消和手动取消。只需查看事件正文中的request属性即可customer.subscription.deleted

如果订阅在支付失败次数过多后自动取消,request则将有一个空值。

否则,如果通过 API 或仪表板取消订阅,request则将具有非空值:订阅取消请求的请求 ID ( "req_...") 。

编辑:正如 Yoni Rabinovitch 指出的那样,如果订阅被取消at_period_end=false(或没有at_period_end参数,false默认值也是如此),则上述情况为真。

如果使用 取消订阅at_period_end=true,则将customer.subscription.updated立即触发一个事件(以反映订阅的cancel_at_period_end属性现在为 true),并且该事件request将具有订阅取消请求的请求 ID。

但是,在customer.subscription.deleted计费周期结束时实际取消订阅时将发送的事件将具有request=null,就像在太多失败的付款后自动取消一样。

  • 据我所知,如果订阅在周期结束时自动取消,则 customer.subscription.deleted 事件中的请求属性为 null,因为订阅上的 cancel_at_period_end 设置为 true。因此,检查“请求”属性似乎不足以确定订阅因支付失败而被取消。 (2认同)