你可以自己為 Google Play 訂單退款,在拒付發生前處理還能省下銀行手續費
對任何三年以內的 Google Play 訂單,你都可以用一次 API 呼叫退款,退款時可選擇是否撤銷存取權限。在爭議演變成拒付之前自己先退款,能省下從 2026 年 8 月 3 日起落到開發者頭上的銀行手續費。以下說明 orders.refund 的用法。

重點摘要
- Google Play Developer API 中的 `orders.refund` 端點讓開發者可以直接為任何一次性購買或訂閱訂單退款,無需審核、無需理由,也不需要客戶提出請求。
- 退款和撤銷是兩個獨立的操作。`orders.refund` 接受一個選用的 `revoke` 旗標。不設定它,買家保留存取權限;設為 true,Google 會立即終止對該項目的存取。
- 超過三年的訂單無法透過 Google Play Developer API 退款。一旦這個時間窗關閉,該訂單就永遠無法處理了。
- `orders.refund` 只能進行全額退款。對訂閱進行按比例的部分退款需要使用較新的 `purchases.subscriptionsv2.revoke` 端點,並帶上 `proratedRefund` 上下文。
- 在為訂閱訂單退款時將 `revoke` 設為 true,會觸發一則 `SUBSCRIPTION_REVOKED` Real-time Developer Notification,因此你的後端能像得知其他訂閱事件一樣得知這次撤銷。
- 從 2026 年 8 月 3 日起,拒付時 Google 會把購買價款加上銀行手續費一併轉嫁給開發者。你自己發起的退款只退回購買價款,所以對一筆前景不妙的訂單提早退款,可能比讓它變成拒付更省錢。
- 開發者發起的退款是唯一一種你完全掌控的 Google Play 退款流程。48 小時自助退款、客服退款和作廢購買都是在沒有你參與的情況下決定的。
你不必等到客戶提出爭議。如果你想把錢退回去,你可以自己直接為 Google Play 訂單退款,只需一次 API 呼叫,或在 Play Console 裡點兩下。Google 不會問你為什麼,也不會質疑你。這是唯一一種由你按下按鈕的退款流程,而提早使用它,趕在爭議固化成銀行拒付之前,往往是代價最小的出路。
唯一真正由你掌控的退款流程
Google Play 上大多數退款是發生在你身上的,而不是經由你完成的。買家在 48 小時內向 Google 提出,就能取得自動的自助退款,無需開發者介入。客服人員可以發起退款,且一經發放即為最終結果。銀行拒付是在持卡人和其銀行之間決定的。在所有這些情形裡,你都只是一個事後才知情的旁觀者。
開發者退款是個例外。在這裡,是你決定把錢退回去,按你自己的節奏,出於你自己的理由。它是一種善意工具,一種客戶服務工具,同時也悄然是一種成本控制工具。準確了解它的行為方式,才能讓它從一個緊急按鈕變成一個深思熟慮的選擇。
orders.refund 在一次呼叫裡做了什麼
Google Play Developer API 中的 orders.refund 方法為單筆訂單退款,無論該訂單是一次性應用程式內購買還是訂閱付款。你向該訂單的退款路徑送出一個空的 POST,用你的服務帳戶進行驗證,呼叫成功後回傳一個空的回應主體。這就是全部機制。
revoke 旗標決定他們是否保留存取權限
這次呼叫給你的唯一選擇就是 revoke 查詢旗標。Google 的參考文件直白地說明了它的作用:若設為 true,將立即終止對該訂閱或應用程式內項目的存取權限。省略它,錢退回去而客戶保留其所購買的一切。這一個布林值,就是友善退款和乾淨取消之間的區別。
| 呼叫的組成部分 | 值 |
|---|---|
| 方法和路徑 | POST /androidpublisher/v3/applications/{packageName}/orders/{orderId}:refund |
packageName | 你的應用程式 id,例如 com.acme.app |
orderId | 購買時向買家顯示的訂單 id |
revoke | 選用的查詢旗標。true 會立即終止存取,省略它則退款並保留存取權限 |
| 請求主體 | 空 |
| OAuth 範圍 | https://www.googleapis.com/auth/androidpublisher |
預設全額退款,僅訂閱可按比例退款
orders.refund 退回整筆訂單金額。它沒有用於部分金額的欄位。如果你需要退回訂閱的一部分,就用較新的 purchases.subscriptionsv2.revoke 端點,它接受一個撤銷上下文,可以根據週期內剩餘的時間發起全額退款或按比例退款。較舊的 purchases.subscriptions.revoke 只做全額退款,這正是 v2 方法存在的主要原因。對於一次性訂單,2018 年 3 月之後的購買可以透過 Play Console 網站進行部分退款,付費應用程式則一律不可。

三年之牆和其他限制
硬性邊界是時間。Google 明確指出,超過三年的訂單無法退款。一旦訂單越過這條線,就沒有申訴、也沒有例外,所以退款是一個帶有到期日的決定。還有另外幾項限制,界定了這次呼叫能做什麼、不能做什麼。
| 限制 | 含義 |
|---|---|
| 三年時限 | 超過三年的訂單無法透過 API 退款 |
| 僅全額 | orders.refund 退回整筆訂單金額,絕不退部分金額 |
| 部分退款 | 訂閱可透過 purchases.subscriptionsv2.revoke 處理,一次性訂單可對 2018 年 3 月之後的購買透過 Play Console 處理,付費應用程式一律不可 |
| 不可逆 | 退款一經發起便無法撤銷 |
這在錢上為你省下什麼
在你按下按鈕之前,每一筆退款其實已經是一筆損失,因為你為服務這次購買所花的錢不會隨退款回來。如果買家生成了圖像、對你的模型發起了 API 呼叫、消耗了儲存空間,或觸發了向第三方的付款,那些成本已經花掉,而且花掉就是花掉。退款只是決定誰來承擔在此之上的售價。
自己發起退款的理由,在於如果你不這麼做會發生什麼。Google 的文件說得很明確:從 2026 年 8 月 3 日起,當客戶向其銀行就一筆扣款提出爭議時,Google 會把購買價款和銀行的拒付手續費轉嫁給開發者。你透過 orders.refund 發起的退款只退回購買價款。所以對於一筆你本就預計會損失的訂單,自行退款比拒付正好少了那筆銀行手續費,而且它會在事態升級之前把案子了結。
自行退款在其他退款流程中處於什麼位置
把開發者退款和其他所有能從你帳戶裡拉走錢的方式放在一起看會更清楚。這些流程裡只有兩種會徵詢你的意見,而只有一種讓你能自己發起退款。
| 退款流程 | 由誰決定 | 你的掌控度 |
|---|---|---|
開發者退款(orders.refund) | 你 | 完全。你決定是否退、何時退 |
| 48 小時自助退款 | 無。Google 自動退款 | |
| 客服退款 | Google 或 Apple 客服 | 無。一經發放即為最終結果 |
拒付審查(orders.reviewrefund) | Google,依據你的證據 | 僅有一個 24 小時的舉證窗口 |
| Voided Purchases API | 無人,它是唯讀的 | 無。你只能讀取已經發生的事 |
如何從頭到尾為 Google Play 訂單退款
從 Play Console
- 開啟 Play Console,在左側選單中選擇訂單管理。
- 透過訂單 id 或買家的完整電子郵件地址找到該訂單。
- 在價格下方,選擇退款並挑選一個退款理由。如果你需要部分退款,請使用網站,而不是行動應用程式。
從 API
- 驗證一個持有
androidpublisher範圍且在 Play Console 中擁有財務權限的服務帳戶。 - 向該訂單的退款路徑送出一個空的 POST,僅當你也想切斷存取時才加上
revoke=true。 - 處理那個空的成功回應;如果你撤銷了一個訂閱,請預期一則
SUBSCRIPTION_REVOKED通知會到達你的後端。
開發者退款是一件小而鋒利的工具。它讓你有一種乾淨的方式來讓客戶得到應有的補償,也提供了一條比拒付更省錢的退路,尤其對一筆你本就要損失的訂單。唯一的規則是要有意識地使用它,把 revoke 旗標設成你真正想要的樣子。
常見問題解答
- 我能在不取消客戶存取權限的情況下為 Google Play 訂單退款嗎?
- 可以。呼叫 `orders.refund` 並不設定 `revoke` 旗標。買家拿回錢,同時保留對該項目的存取權限。僅當你也想立即終止對該購買的存取時,才把 `revoke` 設為 true。
- 在 Google Play 上,我最多能退多久以前的訂單?
- 自購買之日起最多三年。Google Play Developer API 指出,超過三年的訂單無法退款,而且那個時間窗一旦關閉就沒有例外。
- orders.refund 支援部分退款嗎?
- 不支援。`orders.refund` 只發起全額訂單退款。若要對訂閱進行部分或按比例退款,請使用帶 `proratedRefund` 上下文的 `purchases.subscriptionsv2.revoke`,或對符合條件的一次性訂單透過 Play Console 發起部分退款。
- 當我在退款時撤銷一個訂閱,我的後端會知道嗎?
- 會。在為訂閱訂單退款時將 `revoke` 設為 true,會觸發一則 `SUBSCRIPTION_REVOKED` Real-time Developer Notification,因此你的伺服器可以像處理其他訂閱事件一樣更新權益。
- 自己為訂單退款是否比讓它變成拒付更好?
- 從純成本角度看,往往是的。從 2026 年 8 月 3 日起,一次拒付會讓開發者損失購買價款加上銀行手續費,而你自己發起的退款只退回購買價款。如果一筆訂單明顯會走向爭議,提早退款可以避免那筆額外的銀行手續費。
資料來源與延伸閱讀
- Google Play Developer API: Method orders.refund
- Android Developers: Manage subscriptions and one-time purchases
- Play Console Help: Manage your app's orders and issue refunds
- Google Play Developer API: Method purchases.subscriptionsv2.revoke
- Google Play Console Help: refund protection and chargeback cost responsibility
- Google Play Help: Learn about Google Play refund policies
RefundHalt
App Store 與 Google Play 的退款自動駕駛
繼續閱讀
Apple 的 Send Consumption Information 現在只要求五個欄位,而非十二個,以下逐一解讀
當客戶向 Apple 申請退款時,Send Consumption Information 載荷就是你的回應。Apple 已將它從十二個欄位精簡為五個,其中三個必填、兩個選填。以下是每個欄位、各自接受的取值,以及你必須在其中傳送的 12 小時視窗。
有一個端點能回傳某位客戶在 App Store 的全部退款記錄,本文說清楚它究竟交還了什麼
Apple 的 Get Refund History 端點會以簽章交易的形式,回傳某位客戶在 App Store 的完整退款記錄。本文講清每一個欄位、revision 權杖如何翻頁、為何它是按客戶而非按 App 維度,以及你漏掉一筆退款要付出的代價。