所有文章
實戰指南閱讀時間 8 分鐘

Google Play 訂閱附加項目退款可以逐項處理,但使用者只能取消整個組合

Google Play 允許一個基本訂閱在同一個購買權杖上附帶最多 49 個附加項目。本文說明訂閱附加項目退款如何運作,哪個 API 呼叫能只退一項而不影響其他項目,Google 在哪些情況下會擋下它,以及每種退款方式會讓你付出什麼成本。

一個人坐在咖啡廳桌邊查看 Android 手機,旁邊放著一張逐項列出的收據。這正是 Google Play 訂閱附加項目逐行退款所針對的組合購買

重點摘要

  • Google Play 的含附加項目訂閱功能,會把一個基本訂閱和最多 49 個附加項目(合計 50 項)放在同一筆購買中,而且每個項目都必須使用相同的週期性計費週期。
  • Google Play 使用者無法在 Play 訂閱中心取消單一附加項目。他們只能將基本訂閱和附加項目一起取消,因此移除單一附加項目必須在開發人員的應用程式內完成。
  • purchases.subscriptionsv2.revoke 方法接受帶有一個 productId 的 itemBasedRefund。如果其他項目仍然有效,Google 只會撤銷該項目並全額退款,訂閱繼續運作。
  • 當訂閱處於付款遭拒狀態、項目已過期或未被擁有,或屬於預付型訂閱時,Google 會擋下逐項退款。
  • 對含附加項目的訂閱執行 proratedRefund,會退還每個項目的最新訂單,金額依距離下次續訂的剩餘時間按比例計算,並一次撤銷所有項目的存取權。
  • 含附加項目訂閱的即時開發人員通知不包含 subscriptionId,因此後端必須呼叫 purchases.subscriptionsv2.get 並讀取每個 lineItem,才能得知哪些項目仍有使用權。
  • Google Play 唯一會要求開發人員提供證據的退款流程,是透過 orders.reviewrefund 標記為待審查的退單,期限為 24 小時。對於 2026 年 8 月 3 日之後成立的訂單,退單敗訴時開發人員須負擔購買價格扣除 Play 服務費後的金額,再加上銀行收取的費用。

在 Google Play 上販售一個含三個附加項目的基本訂閱,你可以退還其中任何一個附加項目,而不取消其餘部分。你的使用者卻做不到。Google 只允許使用者取消整個組合,所以 Google Play 訂閱附加項目退款的精準工具掌握在你這位開發人員手上,而且只能透過 API 使用。用對了,你只退出問題的那一項。呼叫用錯了,你會把所有內容都退款或撤銷。

含附加項目的訂閱是如何組成的

Google 在 I/O 2025 宣布了訂閱的多商品結帳功能。一個購買流程可以同時販售一個基本訂閱和多個選用附加項目,依同一個週期合併計費。Google 的開發人員指南訂下了明確的限制:

  • 只有自動續訂的基本方案可以附帶附加項目。預付型方案不行。
  • 每個項目都必須使用相同的週期性計費週期。不允許在年繳基本訂閱上附加月繳附加項目。
  • 一筆購買最多包含 50 項,也就是一個基本訂閱加上最多 49 個附加項目。
  • 此功能在南韓無法使用。

所有內容都位於同一個購買權杖上。呼叫 purchases.subscriptionsv2.get 時,回應中會有一個 lineItems 清單,每個項目對應一筆資料。每個 line item 都有自己的 productId、expiryTime 和 latestSuccessfulOrderId。最後這個欄位讓逐項退款成為可能:每個項目都有自己的最新訂單。

按比例計費從第一天就開始

當使用者在週期中途加入附加項目時,Google 會立即收取按比例計算的金額,讓附加項目和基本訂閱在同一天續訂。Google 自己的例子是:一個 $10 的月繳附加項目在 7 天試用後於 8 月 15 日加入,收取 $2.90 來涵蓋 8 月剩下的時間。因此,單一附加項目在第一筆完整訂單之前,可能會有一筆期間較短、金額不整齊的首筆訂單。查詢某次退款會落在哪筆訂單時,請記得這一點。

你的使用者只能取消整個組合

Google 給消費者的說明頁面講得很直接。使用者只能將基本訂閱和附加項目一起取消,目前無法在 Google Play 取消個別附加項目。暫停功能也無法使用。如果使用者拒絕漲價,Google 會取消基本訂閱以及所有附加項目。

這樣一來,想退出某個附加項目的使用者在 Play Store 只有兩個選擇:全部取消,或是申請退款。對你來說兩者都不好。Google 的指南指出,你的應用程式可以改為提供移除功能。被移除的附加項目會在目前計費週期結束時到期,組合中的其餘部分繼續續訂。

Google Play 訂閱附加項目退款工具比較

針對含附加項目的訂閱,Google 提供五種退款方式。差別在於退還什麼,以及存取權是否終止。

工具退還的內容存取權的變化
在 Play Console 中針對特定訂單退款該訂單上由你選擇的金額不撤銷任何內容
orders.refund,未設定 revoke一筆訂單的全額不撤銷任何內容
subscriptionsv2.revoke 搭配 itemBasedRefund單一項目最新一筆扣款的全額只有該項目終止,除非它是最後一個有效項目
subscriptionsv2.revoke 搭配 proratedRefund每個項目的最新訂單,依剩餘時間按比例計算所有項目立即終止
subscriptionsv2.revoke 搭配 fullRefund每個項目最新一筆扣款的全額所有項目立即終止

Google 在附加項目指南中提出一項明確警告:不要對含附加項目的訂閱呼叫已淘汰的 purchases.subscriptions.refund。此外,orders.refund 無法處理超過三年的訂單。

itemBasedRefund 的行為

itemBasedRefund 物件只有一個必填欄位 productId,用來指定要撤銷的項目。Google 描述了兩種結果:

  • 其他項目仍然有效:只撤銷指定的項目並全額退款,訂閱繼續。
  • 沒有其他有效項目:該項目被撤銷並全額退款,整個訂閱遭到取消。

每個請求只能指定一個項目。要退還兩個附加項目,就呼叫兩次。

Google 何時會擋下逐項退款

Google 會在三種情況下拒絕 itemBasedRefund。訂閱處於任何付款遭拒狀態,包括寬限期和帳戶保留。你指定的項目未被擁有或已經過期。或者該購買是預付型訂閱,這類訂閱完全不支援逐項停用。

依訂單 ID 退款會發生什麼事

Google 的指南指出,orders.refund 上的 revoke 旗標只有在該訂單是訂閱的最新訂單時才會終止存取權。對較早的訂單退款會成功,但不會撤銷任何內容。Play Console 的行為也一樣:退還最近一筆訂單,訂閱會被移除;退還較早的訂單,訂閱仍維持有效。有附加項目時,請從正確 line item 的 latestSuccessfulOrderId 選取訂單,否則你可能退到另一筆扣款。

誰決定退款,以及何時會要求你提供證據

含附加項目訂閱的大多數退款都不需要你決定,和其他 Play 訂閱一樣。購買後 48 小時內,使用者可以透過「回報問題」向 Google 申請,由 Google 決定。超過這段時間,Google 會請使用者來找你。另外,如果你沒有在三天內確認新的訂閱購買,Google 會自動為使用者退款並撤銷該筆購買。

只有一個流程會詢問你的說法。當持卡人提出退單,且 Google 將其標記為需要開發人員審查時,你會收到 PendingRefundReviewNotification,並有 24 小時可以呼叫 orders.reviewrefund,提交退款偏好和使用證據。退單本身由銀行裁定,銀行的裁定就是最終結果。

在伺服器上追蹤附加項目退款

Google 的 RTDN 參考文件列出 SUBSCRIPTION_ITEMS_CHANGED,用於訂閱組合中某個項目發生變更的情況,以及 SUBSCRIPTION_REVOKED,用於訂閱在到期前遭到撤銷的情況。Google 的指南說明,透過 subscriptionsv2.revoke 進行的撤銷會同時觸發 SUBSCRIPTION_REVOKED 通知和 VoidedPurchaseNotification,並記錄在 Voided Purchases API 中。

麻煩在於 subscriptionId。Google 表示,含附加項目訂閱的 RTDN 不會提供這個欄位。所以別指望通知告訴你是哪個項目變了。針對組合的每一則通知:

  • 使用 purchaseToken 呼叫 purchases.subscriptionsv2.get。
  • 讀取每個 lineItem 及其 expiryTime。Google 要求你重新整理所有項目的 expiryTime,而不只是你預期的那一項。
  • 依 productId 授予或移除存取權,而不是依購買權杖。
  • 輪詢 Voided Purchases API 作為備援。它涵蓋過去 30 天。

寬限期和帳戶保留會套用到整個組合

付款問題會同時影響所有項目。Google 會在有效項目中選出最短的寬限期,並套用到整個續訂。寬限期間,使用者保有所有項目。進入帳戶保留後,所有項目的存取權都會暫停。如果付款始終沒有恢復,付款遭拒的項目會到期,其他項目則在各自計費週期的剩餘時間內恢復。

開發人員的桌上,筆電顯示著伺服器成本圖表,旁邊是一張逐項列出的發票,用來追蹤每個 Google Play 訂閱附加項目背後實際支付的成本

每種退款方式讓你付出多少錢

附加項目通常對應著你需要付費的東西。額外的雲端儲存空間由儲存服務供應商向你計費。AI 額度包依模型 API 呼叫計費。額外的席位代表更多運算資源,創作者方案則可能觸發分潤支付。這些成本在使用者使用附加項目時就已產生,退款只退還價格,卻拿不回任何一項成本。

退得太多

代價最高的錯誤,是使用者只抱怨一個附加項目,你卻用了 fullRefund 或 proratedRefund。兩者都會撤銷所有項目,所以你連基本訂閱的費用也退了,還失去一位原本想繼續訂閱的使用者。itemBasedRefund 只會退還該附加項目最新一筆扣款。當它被擋下時,對該項目最新訂單執行 orders.refund,可以退款而不終止任何內容。

部分退款與費用

Play Console 允許你對訂閱訂單進行部分退款,Google 表示退款比例同樣適用於你的收益與服務費。退還一半的訂單金額,Google 的服務費也會退回一半。但你為提供該附加項目所付出的成本不會退回。

組合訂單的退單

對於 2026 年 8 月 3 日之後成立的訂單,Google 將退單成本轉由開發人員負擔。退單成立時,你須支付購買價格扣除 Play 服務費後的金額,再加上銀行收取的費用。含多個附加項目的組合訂單,一旦敗訴損失也更大。依附加項目記錄、並對應到經過模糊處理之帳戶 ID 的使用記錄,就是你在 24 小時審查中要提交的資料。

附加項目退款檢查清單

  • 在應用程式內提供移除單一附加項目的方式,因為 Google Play 沒有提供。
  • 每收到一則通知,都儲存每個 lineItem 的 productId、expiryTime 和 latestSuccessfulOrderId。
  • 只有一個附加項目出問題時,預設使用 itemBasedRefund。
  • 訂閱處於寬限期或帳戶保留時,改用 orders.refund 退還該項目的訂單。
  • 絕對不要對組合呼叫已淘汰的 purchases.subscriptions.refund。
  • 依帳戶記錄附加項目的使用情況,以便在 24 小時內提交退單審查資料。
  • 依附加項目統計退款率,而不只依訂閱統計,避免表現不佳的附加項目被基本方案的數據掩蓋。

常見問題解答

使用者能不能只取消 Google Play 訂閱中的一個附加項目?
在 Google Play 中不行。Google 的說明頁面指出,使用者只能將基本訂閱和附加項目一起取消。你的應用程式可以提供移除單一附加項目的功能,被移除的附加項目會在目前計費週期結束時到期。
如何退還一個附加項目而不取消訂閱?
呼叫 purchases.subscriptionsv2.revoke,並傳入指定該附加項目 productId 的 itemBasedRefund。如果其他項目仍然有效,Google 只會撤銷該項目並全額退款。你也可以使用不帶 revoke 旗標的 orders.refund 退還該項目的最新訂單,這樣會退款但不影響存取權。
為什麼我的 itemBasedRefund 呼叫失敗了?
當訂閱處於付款遭拒狀態、項目未被擁有或已過期,或屬於預付型訂閱時,Google 會擋下這個呼叫。呼叫前請檢查 line item 的 expiryTime 和訂閱狀態。
按比例退款適用於含附加項目的訂閱嗎?
適用,但它會撤銷所有內容。Google 會退還每個項目的最新訂單,金額依距離下次續訂的剩餘時間按比例計算,所有項目的存取權立即終止。
哪個 RTDN 會告訴我某個附加項目已被退款?
Google 的指南說明,撤銷會觸發 SUBSCRIPTION_REVOKED 和 VoidedPurchaseNotification,而 SUBSCRIPTION_ITEMS_CHANGED 涵蓋組合中某個項目的變更。由於組合訂閱缺少 subscriptionId,請呼叫 purchases.subscriptionsv2.get 並讀取每個 lineItem,以確認發生了什麼變化。

資料來源與延伸閱讀

RefundHalt

App Store 與 Google Play 的退款自動駕駛

繼續閱讀

下一筆退款申請已經在路上。

讀完另一封關於未能抗辯退款的客服郵件所需的時間,就足夠您設定好 RefundHalt。