在我的 Stripe-Connect 应用程序中,我想处理 Stripe customer.subscription.deleted 付款尝试失败后自动取消订阅时生成的 webhook(基于付款失败的订阅设置)。
Stripe 文档 指出: “如果 customer.subscription.deleted 事件的 request 属性为 null,您可以看到订阅被自动取消,而不是根据您的请求取消。” 另请参阅检测订阅是否自动取消。
但是,似乎如果订阅将 cancel_at_period_end 设置为“true”,则 customer.subscription.deleted 事件的 request 属性为 null,即使订阅在周期结束时“自然”结束,而不是由于失败而结束尝试付款。
所以,我的问题是,如何检测 cancel_at_period_end 设置为 true 的订阅因付款尝试失败而被取消?
不幸的是,目前无法区分这两种情况。我的建议是在您的终端存储您已标记为在当前周期结束时取消的订阅。这样,当您收到
customer.subscription.deleted
事件时,您可以根据您端的该标志检查它是否来自失败的付款。
另一个解决方案是查看该订阅的最新发票。您可以查看 attempt_count 属性来查看对其进行了多少次重试,并推断取消是否来自上次尝试。
订阅对象现在有一个字段
cancellation_details.details
,可以区分cancellation_requested
和payment_failed
:
屏幕截图取自 https://stripe.com/docs/api/subscriptions/object#subscription_object-cancellation_details-reason 于 9/12/2023