2014-12-22 65 views
1

我們讓我們的客戶使用條紋訂閱執行30天的免費試用。我們希望足跡持續30天。如果訂閱狀態是trailing,activepast_due那麼客戶可以使用我們的服務。如果沒有卡,如何使Stripe訂閱狀態從追蹤變爲取消?

如果客戶已經離開了線索期並且已經付款並且由於某種原因他們的卡不再好,那麼訂閱狀態從active變爲past_due。訂閱狀態爲past_due 15天(由我們的重試設置決定)。換句話說,如果他們是付費客戶,並且他們的卡在每月付款到期時不好,那麼他們仍然可以在他們修理他們的卡時使用我們的服務額外的15天。

如果30天試用期結束並且沒有卡,則狀態從trialing移至active。然後3分鐘後,狀態從active變爲past_due。然後狀態保持past_due 15天 - 基本上使試用期45天。我們不希望那樣;我們希望試用期僅爲30天。

我們如何不讓這15天多餘?

在這種情況下,我認爲會有一個設置讓訂閱狀態從trailing變爲cancelled,這樣就可以很容易地按照上面設置的方式設置試用期長度。但是這個設置看起來並不存在。

所以我需要手動取消訂閱時,我發現(通過網絡掛接)的trailingactive,然後3分鐘後activepast_due?當從trailing變爲active時,我會將日期時間存儲在數據庫中。然後,當它從activepast_due時,我會檢查存儲的數據時間是否少於15分鐘 - 如果是,那麼我知道我有一個試用期沒有卡而結束,我取消訂閱。還是有更簡單的方法來做到這一點?

回答

2

第一個解決方案是改變您希望處理訂閱失敗付款的方式。默認情況下,如果發票付款失敗,則會在3天后,5天后7天后自動重新嘗試,最終取消。您絕對可以決定在第一次付款失敗後通過更改儀表板中的settings來取消訂閱。

第二種解決方案是抓住webhook中的invoice.payment_failed並立即取消訂閱。

編輯:即使客戶沒有任何相關活動的卡,現在出了試用期就應該肯定會提出的:

每當發票試圖支付時,和付款失敗。這可能是由於付款被拒,或者客戶沒有活動卡。特別值得注意的是,如果沒有活動卡的客戶到達其免費試用期結束時,將發生invoice.payment_failed通知。

編輯2:如果你想知道是否審判剛剛結束的最簡單的解決辦法是保存這個你的結束。您可以在客戶訂閱計劃時才存儲,然後根據收到的日期來檢測這是否結束。

+0

關於您的第一個解決方案,我希望爲未跟蹤的客戶保留多個重試次數,即。已成功付款的客戶。我試圖在第二段中解釋這一點。 – Ryan

+0

無視我在這裏的第一條評論。關於您的第一個解決方案,我希望爲未嘗試的客戶保留多個重試次數。關於你的第二個解決方案,永遠不會有'invoice.payment_failed'事件。只有兩個'customer.subscription.updated'事件。然後是一個'customer.updated'事件。最後在15天后發生'customer.subscription.deleted'事件。 – Ryan

+0

根據文檔,這似乎不可能,我剛剛更新了我的答案 – koopajah

1

我能想到的最簡單的方法是,當您收到invoice.payment_succeeded網絡掛接發票,其total0更大的布爾has_paid屬性添加到您的用戶模型,設置爲僅true。 (當試用開始時,Stripe會在試用期內創建一個0美元的發票,並始終支付成功,因此您必須忽略該發票。)然後,您的invoice.payment_failed webhook可以在has_paid爲false時立即取消訂閱,或讓自動重試如果has_paid爲真,則循環繼續。

0

訂閱從「試用」變爲「活動」時,您可以偵聽「customer.subscription.changed」webhook。在收到的JSON事件中,將會有一個「previous_attributes」字段,它是包含「狀態」等於「試用」的對象。