您可能需要對訂閱項目或單次購買交易採取管理動作,舉例來說,客服人員可能需要為使用者核發全額或部分退款,或者您可能需要在特定情況下撤銷授權。您可以透過 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_RENEWALS 值。
範例:
- 訂閱項目
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_RENEWALS"
}
允許使用者重新訂閱已過期的訂閱項目
如要允許重新訂閱已到期的訂閱項目,您必須在訂閱項目的基本方案中啟用「Resubscribe」選項,然後將 cancellationType 參數設為 USER_REQUESTED_STOP_RENEWALS 值,藉此取消訂閱。
僅允許使用者透過應用程式重新訂閱
如果將 cancellationType 參數設為 DEVELOPER_REQUESTED_STOP_PAYMENTS,或未設定 cancellationType 參數,使用者就無法透過 Play 訂閱中心還原訂閱項目。不過,使用者可以視需要透過應用程式重新訂閱。
採取這項行動會觸發SUBSCRIPTION_CANCELED即時開發人員通知。請按照「取消」一節的說明處理。
延後收費
您可以使用 subscriptionsv2.defer 方法延長訂閱項目的授權期限。延後含有加購內容的訂閱項目時,訂閱項目中的所有項目都會延後相同時間。在延後期間,使用者仍可存取訂閱內容,但無須支付額外費用。延後訂閱項目的帳單時,狀態資訊會隨之更新,並反映在購買狀態資訊的 expiryTime 欄位中:
- 對於有效的定期訂閱項目,延後結算會延長下次續訂日期。
- 如果是預付方案,延後收費會延長到期時間。
以下列舉幾個延後結帳的使用方式:
- 以特價優惠的形式向使用者提供免費存取權,例如現有訂閱者填寫意見回饋問卷調查,即可免費享有一週的觀影體驗。
- 提供客戶免付費存取權,做為客戶服務行動,例如在長時間服務中斷,可能影響客戶使用服務的能力之後。
每個 API 呼叫可以將帳單最短延後一天,最長延後一年。如要進一步延後授權結束時間,請在新的到期日前再次呼叫 API。
採取這項行動會觸發SUBSCRIPTION_DEFERRED即時開發人員通知。如要瞭解如何處理這類事件,請參閱「關於訂閱項目」中的「延後訂閱者的帳單」。
範例:
FitnessGoals 影視串流服務想在 2 月推出促銷活動,鼓勵使用者定期運動。
他們決定,只要訂閱者在 2 月期間使用 FitnessGoals 運動至少 10 次,就可額外獲得一個月的服務。
他們會追蹤挑戰結果,並在 3 月 1 日,為 2 月達成挑戰的使用者,針對其所有有效的訂閱購買交易,呼叫 subscriptionsv2.defer 方法。
這些使用者可以免費觀看一整個月的常規健身影片,並向所有朋友分享 FitnessGoals 如何幫助他們保持健康!
核發退款和撤銷
在許多情況下,您可能需要針對訂閱項目或單次購買交易核發退款,或撤銷存取權。
依訂單 ID 全額退款
透過 orders.refund API,您可以在購買後三年內針對任何訂單核發全額退款。orders.refund 方法會收到撤銷參數,指出除了提供退款外,是否也應撤銷存取權。
如果您在訂閱交易的退款呼叫中發出撤銷,訂閱會立即終止,並觸發 SUBSCRIPTION_REVOKED 即時開發人員通知和 VoidedPurchaseNotification (記錄在 Voided Purchases API 中)。請參閱訂閱生命週期管理指南的撤銷部分,瞭解如何處理這些事件。
範例:
為慶祝新世界盃開賽,電子競技應用程式 Football-Not-Soccer 決定舉辦抽獎活動,只要使用者在開賽後 24 小時內購買新隊服,就有機會免費獲得虛擬球衣。
Football-Not-Soccer 使用
orders.refundAPI,但未傳遞撤銷參數,因此會將球衣購買費用退還給獲勝者。
透過購買權杖撤銷訂閱並退款
在某些情況下,您可能需要撤銷使用者的訂閱存取權並提供退款。Play 帳款服務提供撤銷方法,包括透過 subscriptionsv2.revoke API 全額退款和按比例退款。您可以使用這個端點指定 revocationContext,決定退款的計算方式。
這項操作會同時觸發 SUBSCRIPTION_REVOKED 即時開發人員通知和 VoidedPurchaseNotification,並記錄在 Voided Purchases API 中。應用程式應依據「撤銷」所述處理這些取消操作。
範例:
- 使用購買憑證
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": {} 設為退款類型。
範例:
瑪麗亞訂閱了 SuperMovies 串流月費方案,每 30 天自動續訂。Maria 遇到一些技術問題,導致無法存取內容。她在帳單週期的第 3 天聯絡客服,表示自己從未取得訂閱項目的存取權。
客戶服務人員在系統中找到 Maria 的訂閱購買詳細資料,並觸發對
purchases.subscriptionsv2.revoke的呼叫,要求全額退款。客服人員告訴 Maria,她應該會收到全額訂閱費用退款,且她已取消訂閱方案。
按比例退款
如需終止訂閱方案,並根據剩餘的授權時間部分退款,請按比例退還款項。使用 purchases.subscriptionsv2.revoke 函式,並將 "proratedRefund": {} 設為退款類型。
自動續訂方案和預付方案 (效期至少一週) 均支援按比例退款。
範例:
瑪麗亞訂閱 SuperMovies 串流服務的 30 天自動續訂月方案。她使用這項服務已有一段時間,而且相當滿意。 在帳單週期第 15 天,Maria 聯絡客戶服務,表示她即將搬到國外,隔天起無法再使用這項服務。
客戶服務人員在系統中找出 Maria 的訂閱購買詳細資料,並觸發對
purchases.subscriptionsv2.revoke的呼叫,要求按比例退款。客服人員告訴 Maria,她應該會收到約 50% 的訂閱費用退款,且服務會立即終止。