2016-11-23 149 views
2

我已经设置我的条纹订阅将在3次失败的付款尝试后自动取消,我有customer.subscription.deleted webhook记录取消订阅。检测订阅是否自动取消

有没有一种方法可以检测customer.subscription.deleted webhook如果订阅因付款尝试失败而被分段取消,或者通过Stripe Dashboard手动取消,或者是因为我们的应用程序提出的API请求而被取消?

回答

3

由于仪表板本身使用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,就像过多失败的付款后的自动取消一样。

+0

太棒了!非常感谢。 “请求”属性将为我完成工作。谢谢。 – user3204760

+0

从我所看到的customer.subscription.deleted事件中的请求属性为空,如果订阅在其期间结束时自动取消,因为订阅上的cancel_at_period_end设置为true。因此,检查“请求”属性似乎不足以确定订阅因付款失败而被取消。 –

+0

@YoniRabinovitch你绝对正确。我编辑了我的答案,以说明在这种情况下会发生什么。 – Ywain

0

如果您在结算周期结束时取消订阅,则会立即触发customer.subscription.updated事件。该事件反映订阅的cancel_at_period_end值的变化。当在该期间结束时实际取消订阅时,将发生customer.subscription.deleted事件。