我已經設置我的條紋訂閱將在3次失敗的付款嘗試後自動取消,我有customer.subscription.deleted webhook記錄取消訂閱。檢測訂閱是否自動取消
有沒有一種方法可以檢測customer.subscription.deleted webhook如果訂閱因付款嘗試失敗而被分段取消,或者通過Stripe Dashboard手動取消,或者是因爲我們的應用程序提出的API請求而被取消?
我已經設置我的條紋訂閱將在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