管理訂閱項目和一次性消費

您可能需要對訂閱項目或一次性購買交易採取管理動作,以處理日常業務。舉例來說,客戶服務人員可能需要為使用者核發全額或部分退款,或者您可能需要在特定情況下撤銷權益。您可以透過 Play 管理中心管理訂單,也可以使用 Google Play Developer API,透過自己的系統管理訂單。

取消訂閱

使用者或開發人員都可以取消訂閱。

使用者發起的取消

使用者隨時可以透過 Play 商店取消 Google Play 訂閱。如適用,您也必須在應用程式和網站中提供取消訂閱的選項。

如要讓使用者輕鬆取消訂閱,最簡單的方法是在應用程式中提供前往 Play 商店的深層連結,讓使用者查看及管理訂閱項目。

開發人員主動取消

開發人員可能也需要在後端觸發取消程序。 purchases.subscriptions.cancel API 可讓您取消訂閱交易。舉例來說,您可以使用這個方法關閉舊版服務。 取消訂閱不會退款,使用者在目前的帳單週期結束前仍可存取訂閱內容。

這個方法可讓您在 cancellationType 要求主體參數中指定下列取消類型:

  • USER_REQUESTED_STOP_RENEWALS:取消訂閱,如同使用者透過 Play 商店取消訂閱。在目前的約期剩餘期間,你仍須支付分期付款。使用者可以在訂閱到期前透過 Play 商店還原訂閱,或在訂閱到期後重新訂閱 (如果基本方案允許)。

  • DEVELOPER_REQUESTED_STOP_PAYMENTS:取消訂閱並停止所有後續付款。使用者無法透過 Play 商店還原或重新訂閱,但您可以在應用程式中啟用重新訂閱功能。

允許使用者還原未到期的訂閱項目

在某些情況下,您可能會發現允許使用者在開發人員觸發取消後,從 Play 訂閱中心還原未到期的訂閱項目很有用。舉例來說,您可能想提供自訂應用程式內取消流程。根據您的業務邏輯,您可以決定使用者是否能還原後端觸發的取消作業。

如要指出使用者可以還原取消作業,請對 purchases.subscriptions.cancel API 發出 POST 要求,並將 cancellationType 要求參數設為 USER_REQUESTED_STOP_RENEWAL 值。

例子:

  • 訂閱項目「1a2b3c4d5e6f7g8h9i0j」的購買憑證
  • 應用程式套件名稱 com.your.app
  • 訂閱 ID your-subscription-product

HTTP POST 要求:

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptions/your-subscription-product/tokens/1a2b3c4d5e6f7g8h9i0j:cancel

要求主體:

{
  "cancellationType": "USER_REQUESTED_STOP_RENEWAL"
}

允許使用者重新訂閱已過期的訂閱項目

如要允許重新訂閱已到期的訂閱項目,請在訂閱項目的基本方案中啟用「重新訂閱」選項,然後將 cancellationType 參數設為 USER_REQUESTED_STOP_RENEWAL 值,取消訂閱。

僅允許使用者在應用程式中重新訂閱

如果將 cancellationType 參數設為 DEVELOPER_REQUESTED_STOP _PAYMENTS,或未設定 cancellationType 參數,使用者就無法透過 Play 訂閱中心還原訂閱項目。不過,使用者可以視需要透過您的應用程式重新訂閱。

採取這項行動會觸發SUBSCRIPTION_CANCELED即時開發人員通知。請按照「取消」一節的說明處理這些取消操作。

延後結算

如要延長訂閱項目的權利期限,請使用 subscriptionsv2.defer 方法。延後含有加購內容的訂閱項目時,訂閱項目中的所有項目都會延後相同時間。在延後期間,使用者仍會訂閱你的內容,但不必支付額外費用。延後訂閱項目的帳單結算日後,系統會相應更新狀態資訊,並在購買狀態資訊的 expiryTime 欄位中反映:

  • 如果是有效的定期訂閱項目,延後付款會延長下次續訂日期。
  • 對於預付方案,延後收費會延長到期時間。

延後結算的用途範例如下:

  • 以特價優惠的形式向使用者提供免費存取權,例如現有訂閱者填寫意見回饋問卷調查,即可免費享有一週的觀影體驗。
  • 提供顧客免費存取權,以做為顧客服務行動,例如在延長停機後,顧客可能無法使用您的服務。

每個 API 呼叫可以將帳單最短延後一天,最長延後一年。如要將授權結束時間延得更長,請在新的到期日前再次呼叫 API。

採取這項行動會觸發SUBSCRIPTION_DEFERRED即時開發人員通知。如要瞭解如何處理這些事件,請參閱「關於訂閱方案」一文中的「延後訂閱者的帳單」一節。

例子:

  1. FitnessGoals 串流服務想在 2 月舉辦促銷活動,鼓勵使用者規律運動。

  2. 因此決定在 2 月期間,凡是使用 FitnessGoals 運動至少 10 次的訂閱者,皆可額外獲得一個月的服務。

  3. 他們會追蹤挑戰的結果,並在 3 月 1 日,針對 2 月達成挑戰的使用者,呼叫每個有效訂閱項目的 subscriptionsv2.defer 方法。

  4. 這些使用者可免費多看一個月的運動影片,而且還會告訴所有朋友 FitnessGoals 如何幫助他們保持健康!

核發退款和撤銷

在許多情況下,您可能需要針對訂閱項目或一次性購買交易核發退款或撤銷存取權。

依訂單 ID 全額退款

透過 orders.refund API,您可以在購買後三年內針對任何訂單核發全額退款。orders.refund 方法會收到撤銷參數,指出除了提供退款外,是否也應撤銷存取權。

如果您透過退款呼叫發出訂閱項目購買交易的撤銷要求,系統會立即終止訂閱,並觸發SUBSCRIPTION_REVOKED即時開發人員通知。請參閱訂閱生命週期管理指南的撤銷部分,瞭解如何處理這些事件。

例子:

  1. 為慶祝新一屆世界盃開打,電子競技應用程式「Football-Not-Soccer」決定在活動開始後 24 小時內,向所有購買新球隊套裝的使用者,抽獎贈送免費虛擬球衣。

  2. Football-Not-Soccer 使用 orders.refund API,但未傳遞撤銷參數,因此無法將球衣購買費用退還給得獎者。

使用購買權杖撤銷訂閱並退款

在某些情況下,您可能需要撤銷使用者的訂閱存取權並提供退款。Play 帳款服務提供撤銷方法,包括透過 subscriptionsv2.revoke API 全額退款和按比例退款。您可以使用這個端點指定 revocationContext,決定退款的計算方式。

採取這項行動會觸發 SUBSCRIPTION_REVOKED 即時開發人員通知。應用程式應依據撤銷所述處理這些取消操作。

例子:

  • 使用購買憑證 1a2b3c4d5e6f7g8h9i0j 購買
  • 套件名稱為「com.your.app」的應用程式
  • 按比例退款的意圖

HTTP POST 要求:

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptionsv2/tokens/1a2b3c4d5e6f7g8h9i0j:revoke

要求主體:

{
  "revocationContext": {
    "proratedRefund": {}
  }
}

全額退款

如要終止訂閱並全額退還當前帳單週期的費用,請全額退款。使用 purchases.subscriptionsv2.revoke 函式,並將 "fullRefund": {} 設為退款類型。

例子:

  1. 瑪麗亞訂閱 SuperMovies 串流服務的 30 天方案,並啟用自動續訂功能。Maria 遇到一些技術問題,導致無法存取內容。她在帳單週期第 3 天聯絡客戶服務,表示從未取得訂閱方案的存取權。

  2. 客服人員在系統中找到 Maria 的訂閱購買詳細資料,並觸發對 purchases.subscriptionsv2.revoke 的呼叫,要求全額退款。

  3. 客服人員告訴 Maria,她應該會收到全額訂閱費用退款,且她已取消訂閱方案。

按比例退款

如要終止訂閱並針對剩餘的授權時間部分退款,請按比例退還款項。使用 purchases.subscriptionsv2.revoke 函式,並將 "proratedRefund": {} 設為退款類型。

例子:

  1. 瑪麗亞訂閱 SuperMovies 串流服務的 30 天方案,並啟用自動續訂功能。她使用這項服務已有一段時間,而且非常滿意。 小美在帳單週期第 15 天聯絡客服人員,表示她即將搬到國外,從隔天起無法再使用這項服務。

  2. 客服人員在系統中找出 Maria 的訂閱購買詳細資料,並觸發對 purchases.subscriptionsv2.revoke 的呼叫,要求按比例退款。

  3. 客服人員告訴 Maria,她應該會收到約 50% 的訂閱費用退款,且服務存取權會立即終止。