检测订阅是否自动取消
我已经设置我的条纹订阅将在3次失败的付款尝试后自动取消,我有customer.subscription.deleted webhook记录取消订阅。检测订阅是否自动取消
有没有一种方法可以检测customer.subscription.deleted webhook如果订阅因付款尝试失败而被分段取消,或者通过Stripe Dashboard手动取消,或者是因为我们的应用程序提出的API请求而被取消?
由于仪表板本身使用API,因此无法区分最后两种情况。
但是,您可以区分自动和手动取消。只需查看customer.subscription.deleted
事件正文中的request
属性即可。
如果订阅在失败付款失败后自动取消,那么request
将具有空值。
否则,如果订阅通过API或仪表板取消,则request
将具有非空值:subscription cancelation request的请求ID("req_..."
)。
编辑:如号Yoni拉宾诺维奇指出的那样,如果订阅用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.updated事件。该事件反映订阅的cancel_at_period_end值的变化。当在该期间结束时实际取消订阅时,将发生customer.subscription.deleted事件。
太棒了!非常感谢。 “请求”属性将为我完成工作。谢谢。 – user3204760
从我所看到的customer.subscription.deleted事件中的请求属性为空,如果订阅在其期间结束时自动取消,因为订阅上的cancel_at_period_end设置为true。因此,检查“请求”属性似乎不足以确定订阅因付款失败而被取消。 –
@YoniRabinovitch你绝对正确。我编辑了我的答案,以说明在这种情况下会发生什么。 – Ywain