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

重點摘要
- 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 會在有效項目中選出最短的寬限期,並套用到整個續訂。寬限期間,使用者保有所有項目。進入帳戶保留後,所有項目的存取權都會暫停。如果付款始終沒有恢復,付款遭拒的項目會到期,其他項目則在各自計費週期的剩餘時間內恢復。

每種退款方式讓你付出多少錢
附加項目通常對應著你需要付費的東西。額外的雲端儲存空間由儲存服務供應商向你計費。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,以確認發生了什麼變化。
資料來源與延伸閱讀
- Google Play Billing: Subscription with add-ons
- Google Play Help: Subscriptions with add-ons
- Google Play Developer API: purchases.subscriptionsv2.revoke
- Google Play Developer API: orders.refund
- Google Play Billing: Manage subscriptions and one-time purchases
- Play Console Help: Issue refunds and cancel orders
- Google Play Billing: Real-time developer notifications reference
- Google Play Billing: Subscription lifecycle
- Google Play Help: Request a refund on Google Play
- Google Play Developer API: orders.reviewrefund
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
App Store 與 Google Play 的退款自動駕駛
繼續閱讀
過多的退款申請,代價可能遠超退款本身,因為兩大 App 商店都把它視為品質訊號
Apple 審查準則 5.6.4 把過多的退款申請列為 App 未達品質標準的跡象,Google 的開發人員發布協議也允許它依退款率下架新開發人員的 App。本文整理兩家商店的原文、下架的實際成本,以及如何避開風險。
在處理退款之前先驗證 App Store 伺服器通知,因為任何人都能向你的 webhook URL 發送請求
在檢查簽章之前,一則退款通知只不過是一個 HTTPS 請求。本文說明如何驗證 App Store 伺服器通知和 Google Play RTDN 訊息、各商店簽署的內容,以及偽造的退款或遭錯誤拒絕的退款會讓你付出什麼代價。