2013-05-29 55 views
25

是否可以在期末而不是立即降級用戶?我梳理了API Docs,但一直未能弄清楚如何完成此操作。Stripe:在「期末」降級用戶

作爲一種解決方法,我目前立即取消用戶的訂閱,然後將訂閱訂閱到較少的訂閱,直到本月底才進行試用。這不會起作用 - 我需要能夠延遲降級直到期末(但在請求降級時「記錄」它爲Stripe)。

很明顯,有些方法可以通過webhook回調和本地跟蹤用戶訂閱來實現,但如果可能的話,我想避免這種情況。


編輯

人之前問 - 我使用Temboo的PHP SDK。然而,我不是在尋找一種特定於語言的方法,只是一個高層次的方法(如果可能的話)。

+1

我知道這個問題太舊了,但我認爲任何人想要這樣做都需要使用webhooks和/或在本地跟蹤事物。由於此功能不會自動存在於Stripe中,因此您沒有辦法期待它們在特定的時間點運行特定的行爲,而無需跟蹤您的端點和通過API進行更新。 –

+3

@CharlieS其實,我認爲期望Stripe公開這個功能是完全合理的。從我們的終端管理它所需的開銷很大。我想進行API調用,要求用戶在期末降級到指定的計劃,並在發生此情況時讓Stripe ping一個webhook。他們已經做了很多時間驅動的東西,爲什麼不呢?這是一個非常常見的用例,我希望看到它的支持。 – Madbreaks

回答

4

您應該跟蹤您的用戶何時加入計劃 - 在customer_id旁邊的數據庫中保留一個日期字段。您可以使用此日期確定他們加入的月份的日期,並因此確定結算週期。如果結算日是本月31日,那麼在較短的月份,Stripe將在這些月份的最後一天(https://support.stripe.com/questions/subscription-date-at-end-of-month)開具賬單。

現在,當用戶希望降級時,他們在登錄時完成網站上的操作。記下此降級請求並將其存儲在a中,我們稱之爲數據庫中的「stripe_actionable_table」。重要字段有此表將是:

  • actionable_date(日期行動的條紋要求 - 你會需要一些邏輯來確定較短的月份如上所述)
  • stripe_customer_id
  • what_to_do(升級/降級/取消)
  • change_plan_to(計劃編號 - 可以爲空,如果取消REQ)

然後,您將有一個在特定時間每天運行的cron,並檢查此stripe_actionable_table,並且如果該月的某天與表中的某一行匹配,則執行Stripe請求。完成後,您可以刪除該行或將其標記爲已刪除。

+7

謝謝。是的,有各種各樣的方式可以通過管理我們的事情來完成 - 我的問題是,有沒有一種方法可以讓Stripe在期末自動處理降級。這是一個很常見的情況,並且配合w/webhooks *可以非常容易。但是,正如你的回答(和我們的解決方案)所表明的那樣,這是一個重大麻煩。 – Madbreaks

+9

如何取消使用參數「at_period_end」設置爲TRUE的訂閱。然後設置一個可以偵聽Stripe事件的webhook,以便檢測事件:「customer.subscription.deleted」。當你選擇它時,只需要在較低的訂閱計劃上設置客戶。 – Martin

+0

另一種方法是跟蹤「可操作事件」的列。然後在用戶支付發票時使用webhook。然後,當他們這樣做時,查看錶格,看他們是否需要任何更改,然後在當時處理它... –

0

似乎沒有辦法用Stripe輕鬆完成。

我正在更新數量而不是更改計劃,但該想法也可以應用。

可能的解決方案是:不帶條紋的按比例分配

  1. 更新認購數量。

  2. 保留以前的數量,直到invoice.created事件。

  3. 處理invoice.created事件時,比較上一個數量與用戶訂購的數量,如有必要,請將其減少。

-1

如果您不是要取消訂閱在當前計費週期(即,對於時間的客戶已經支付的持續時間)結束時,提供真實

的at_period_end值

https://stripe.com/docs/subscriptions/canceling-pausing

我想你可以更新訂閱,並添加at_period_end: true,並應在此期限結束後取消它。

+1

取消!=降級。 – Madbreaks

4

正如@Safinn和@Martin所提到的那樣,您可以使用at_period_end: true來取消訂閱,以便在特定日期執行取消操作。

爲了降級到不同的計劃,我解決它的方法是完成上述操作,然後創建一個免費試用結束於相同日期/時間的新計劃。這樣,舊計劃將在新計劃的審判結束的同一天被取消(使其生效)。

這可以讓Stripe完全處理降級(這應該是更簡單的恕我直言),而不是在數據庫中設置webhook或跟蹤日期。

+0

不是一個壞主意。如果我正確理解您的策略,訂閱將有兩個計劃,直到期末時取消原始計劃?如果確實如此,那麼認購活動將與試驗同時結束的計劃保持一致? – dperjar

+0

正確。我們已經使用它超過9個月,它完美的作品 – SneakAttaack

+0

@SneakAttaack聽起來不錯。我從一個條紋開發者那裏得到了這樣的結論:「我認爲處理起來會比聽起來要棘手,任意的時間測試是一個普遍的痛苦,而且你永遠不會得到完全正確的週期(這意味着你最終會在兩個訂閱之間有一個奇怪的狀態),我誠實的建議是對升級進行親評。我主要關心的是兩種訂閱之間的狀態。你有什麼問題嗎? – Montenegrodr

0

現在可以使用Stripe的prorate標誌。

E.g.

$subscription = \Stripe\Subscription::retrieve("sub_44ty4267H50z6c"); 
$itemID = $subscription->items->data[0]->id; 

\Stripe\Subscription::update("sub_44ty4267H50z6c", array(
    "items" => array(
    array(
     "id" => $itemID, 
     "plan" => "basic-plan", 
    ), 
), 
    "prorate" => false, 
)); 

通過設置prorate爲false,就相當於告訴條不適用該計劃的變化,直到當期結束。

官方文檔在這裏:

https://stripe.com/docs/subscriptions/upgrading-downgrading#disable-prorations

澄清(按照下面的用戶評論):請注意,條紋更新自己的活動計劃立即(僅充電的表示用戶被推遲),所以您仍然需要手動管理延遲活動計劃更改從您的應用程序內。

+1

4.5年後,伊什。謝謝 – Madbreaks

+0

剛剛測試過這個&設置按比例分配的錯誤沒有你提到的延遲計劃更改的效果。它仍然立即改變計劃和收費。唯一的區別是它沒有把用戶的任何閒置時間歸功於用戶。文件與此一致。 – Paludis

+0

@Paludis的問題是要求「延遲降級直到期限結束(但在請求降級時」記錄「它爲Stripe)。」比例標誌立即「記錄它/帶」,但收費如同降級被延遲一樣。您如何在自己的應用程序中記錄*計劃更改*然後由您決定。 但我看到我的答案中的措詞可能會被誤解。現在會更新(讓我知道你是否仍然覺得它是虛假的) –