2016-11-23 102 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事件。