所有文章
Deep dive閱讀時間 8 分鐘

一次性購買退款是你真正能收回的那種少見退款,所以終身解鎖只讓你損失價款,別無其他

針對終身解鎖、去廣告升級或永久專業版的一次性購買退款,是你真正能撤銷的那種退款,因為你可以把功能收回來。這裡說明它在 App Store 與 Google Play 上的成本,為什麼 Apple 從不先徵詢你的意見,以及如何讓 revoke 真正生效。

一把打開的黃銅掛鎖旁放著一張收據和一把鑰匙,展示一次性購買退款中開發者把已解鎖功能收回的情形

重點摘要

  • 一次性購買項目是客戶永久保留的一次性購買,例如去廣告、終身專業版解鎖、永久功能。與可消耗項目不同,交付時沒有任何東西被消耗掉,所以一次性購買退款是唯一一種你可以退回金錢、同時收回功能的退款。
  • 這使得一次性購買退款成為你會遇到的最乾淨的損失。你損失的是售價,商店會退回它自己的佣金,但沒有算力、沒有 API 呼叫,也沒有你已付費卻無法收回的交付產物。損失被限定在價款之內。
  • 問題在於價格。終身解鎖通常是你單價最高的產品,往往是月度訂閱的十到三十倍,所以一筆一次性購買退款是你帳戶上幾乎任何其他退款都比不上的單筆衝擊。
  • 在 App Store 上,Apple 透過 reportaproblem.apple.com 獨自決定每一筆一次性購買退款,而且針對一次性購買項目沒有 CONSUMPTION_REQUEST。Apple 只在可消耗項目與自動續期訂閱上發送那種證據請求,所以在一次性購買項目上你沒有申辯的視窗,也完全沒有證據通道。
  • Apple 仍會告訴你退款發生了。REFUND App Store Server Notification 會針對可消耗項目、一次性購買項目與非續期訂閱觸發,簽名交易中帶有 revocationDate 與 revocationReason。StoreKit 也會把該產品從 Transaction.currentEntitlements 中移除,這就是你關閉功能的信號。
  • 在 Google Play 上,你可以自己從 Play Console 或 orders.refund API 為一次性購買項目退款,把 revoke 設為 true 會立即終止存取權。Google 自己的 48 小時自助退款無需徵詢你,未確認的一次性購買會在 3 天後被自動退款並撤銷。
  • 陷阱是在用戶端控制存取權。如果一筆已退款的一次性購買在快取收據或僅存於用戶端的旗標中仍被標記為已擁有,客戶在錢退走之後仍保留功能,於是你損失了價款卻還在繼續提供解鎖。要在你的伺服器上根據撤銷狀態核驗權益,每次啟動都核驗。

銷售終身解鎖、去廣告升級或永久專業版,你賣出的就是一次性購買項目,這是唯一一種退款能真正撤銷你所交付內容的購買。可消耗項目的退款收回的是你交付金幣或點數時已經花掉的錢。訂閱退款撤銷的是本來就在出租的存取權。一次性購買項目的退款則不同,從一個狹義的角度看,它是你會遇到的最溫和的退款:客戶什麼都留不下。你退回價款,收回功能,而且不像可消耗項目,你這邊的帳本上不會留下算力帳單。這是好消息。壞消息是,一次性購買項目通常是你所售商品中單價最高的,所以這唯一一種你能乾淨撤銷的退款,也是金額最大的退款之一。

什麼是一次性購買項目,以及為什麼它的退款行為不同

商店把每一筆購買歸入某種類型,類型決定了退款能撤銷什麼、不能撤銷什麼。一次性購買項目位於可消耗項目的對立端。

一次性購買項目只買一次,永久保留

一次性應用內購買是一種永久權益。客戶購買一次,就在帳戶的整個生命週期內擁有它:去廣告、終身專業版、完整版解鎖、永久功能包。Apple 在客戶的各裝置間免費恢復它,Google Play 把它綁定到帳戶。沒有續期也沒有到期,所以價值不會隨時間分批計量,也不會在兌換時被消耗。它就是打開並保持開啟。

交付時沒有任何東西被花掉,所以退款可以乾淨地撤銷它

這正是一次性購買退款不同的全部原因。當你交付一個金幣包,金幣被花掉,你的算力帳單是真實且花掉了的。當你交付一次性購買項目,你翻動的是一個旗標。沒有與這筆銷售掛鉤的按次使用成本,所以當錢退回時,你可以把旗標翻回去,幾乎毫髮無損。商店甚至會幫你:在兩個平台上,已退款的一次性購買都會被撤銷,客戶失去存取權,而且無法再次購買並第二次退款。

一次性購買退款實際讓你付出什麼

出現在你報表裡的數字,就是退出去的售價。在一次性購買項目上,這個數字幾乎就是全部故事,這正是它與可消耗項目不同之處,可消耗項目的售價只是損失的起點。

成本你何時付出退款時是否收回
購買價款購買時否,全額退回給客戶
商店在銷售上的佣金購買時通常是,商店退回它自己的分成
交付解鎖所需的算力或 API 呼叫沒有,你翻動一個旗標沒有可收回的,也沒有損失
功能本身你已授予存取權是,revoke 會把它收回
銀行拒付費用,若爭議鬧到銀行扣款之後否,而且在 Google Play 上你現在也要付這筆費用

損失就是價款,而價款正是問題所在

因為沒有履約成本會被擱淺,一次性購買退款讓你付出的是售價,別無其他。麻煩在於規模。一筆月度訂閱退款退回幾美元。終身解鎖常常定價為 30、60 或 120 美元,正是因為客戶只付一次,所以一筆一次性購買退款可能等於另一位用戶一年的訂閱收入。你看到它們的次數會遠少於訂閱退款,但每一筆衝擊更重,而一小簇終身退款可能壓過一個繁忙月份的普通流失。

兩隻手隔著桌子遞回一把小黃銅鑰匙,同時錢朝另一個方向滑回,展示一次性購買退款中功能被收回、價款被退回的情形

App Store 這一側,Apple 從不先徵詢你

在 App Store 上你沒有退款開關,而對於一次性購買項目,你也沒有證據通道。這兩點都值得說清楚,因為第二點會讓那些以為消耗流程涵蓋一切的開發者措手不及。

一次性購買項目沒有 CONSUMPTION_REQUEST

Apple 自己決定每一筆退款,一次一個請求,透過 reportaproblem.apple.com。對於可消耗項目,以及自 2024 年起對於自動續期訂閱,Apple 會向你的伺服器發送 CONSUMPTION_REQUEST,並給你 12 小時回傳消耗資訊。一次性購買項目則什麼都沒有。沒有消耗請求,沒有 12 小時視窗,也沒有可填的欄位,因為 Apple 把永久解鎖視為要麼擁有、要麼沒有,沒有什麼可衡量的。在一次性購買退款上你沒有發言權。你收到的是一份通知。

REFUND 通知是你得知退款發生的途徑

你確實會收到的,是一條 REFUND App Store Server Notification。Apple 會針對可消耗項目、一次性購買項目與非續期訂閱發送它,裡面的簽名交易帶有 revocationDate(退款的時間戳記)與 revocationReason。StoreKit 在裝置上呈現同一事實:已退款的產品從 Transaction.currentEntitlements 中消失,StoreKit 會呼叫你的撤銷權益處理程序,使應用可以關閉功能。把通知當作觸發信號,把權益核查當作事實來源。當 revocationDate 被設置時,解鎖就結束了。

Google Play 這一側,你可以退款,但最快的路徑繞過你

Google Play 給開發者的直接控制權比 Apple 多,儘管最傷人的那些退款仍然在沒有你參與的情況下發生。

你可以自己為一次性購買項目退款並撤銷

你可以從 Play Console,或用 Play Developer API 中的 orders.refund 方法,對任何不滿三年的訂單發起一次性購買退款。該呼叫接受一個 revoke 參數,把它設為 true 會立即終止對該應用內項目的存取權。Google Play 隨後會把客戶視為不再擁有該產品,解除安裝已退款的應用,並阻止在同一項目上重複購買再退款的循環。這是你擁有乾淨槓桿的唯一之處:退款加 revoke 確實能把永久解鎖收回。

48 小時與 3 天的路徑在沒有你參與下運行

有兩種 Google Play 一次性購買退款在你沒有任何輸入的情況下發生。在購買後 48 小時內,客戶可以直接從商店獲得自助退款,而不會徵詢你。另外,如果你的伺服器在 3 天內從未確認購買,Google Play 會自動退款並撤銷,認定客戶已付款卻從未收到商品。這兩者都在你介入之前就已決定,而 Voided Purchases API 是你事後得知的途徑,好讓你取消權益。

當一次性購買項目變成拒付時,用金錢來衡量意味著什麼

退款是失去一次性購買銷售的便宜版本。拒付是昂貴版本,而在終身價格上,兩者的差距很大。

爭議路徑成本更高、收回更少

當客戶去找銀行而不是商店時,銷售會以拒付的形式退回,而拒付是最終的。在 App Store 上你沒有消耗視窗來為一次性購買項目辯護,所以無從提交。在 Google Play 上,自 2026 年 8 月 3 日起,一筆拒付會把購買價款減去 Play 的服務費,再加上銀行的拒付費用,轉嫁到開發者身上,而 Google 繼續承擔它自己的服務費。在一筆 90 美元的終身解鎖上,這會把一筆你本可以吸收的乾淨退款,變成一筆更大的、最終的損失,還釘上一筆銀行費用。

把不滿意的客戶留在退款通道裡

教訓與每家商店都在推著你走的方向一致:退款撤銷銷售並通常退回佣金,拒付兩者都不做還添一筆費用。一個能拿到直接退款的客戶很少會打電話給銀行。在 Google Play 上,你可以在 24 小時內透過 orders.reviewrefund 回應拒付審查,Google 還提供 Review Refund API 來共享交易詳情,以便它代你挑戰欺詐性爭議。用它,但不要依賴它。更便宜的做法是在爭議開始之前就讓誠實的退款變得容易。

如何在一次性購買退款上少虧一些

你無法阻止商店為永久解鎖退款。你能做到的是,當它退款時,你確實把功能收回,並且你能看清模式。

在伺服器上核驗權益,每次啟動都核驗

根據針對當前交易狀態的伺服器核查來決定存取權,而不是根據快取收據或購買時寫入一次的用戶端旗標。當 REFUND 通知到來,或權益消失,或 Google Play 上 revoke 被設置時,在你這一側關閉功能。一筆已退款卻仍然可用的一次性購買,就是最乾淨的退款變成純虧損的那一種情形。

把終身與一次性產品當作各自獨立的群組來觀察

因為一次性購買退款稀少但金額大,它們會消失在一個混合的退款率裡。按產品單獨追蹤它們。某個終身檔位上出現一簇退款,通常指向某件具體的事:一個超過其價值的價格、一個在更新後損壞的功能,或一個承諾超過解鎖實際交付的商店頁面。把一次性購買退款對照一次性購買銷售來讀,原因通常很容易說清。

快速確認,並乾淨利落地兌現合理退款

按時確認每一筆購買,這樣你就永遠不會意外觸發 3 天自動退款;當退款確實合理時,痛快地把功能收回,而不是留下一個心懷不滿的客戶去向銀行升級。退款是較小的損失。拒付才是那個帶著費用的。

簡短版本

一次性購買退款是你真正能撤銷的那種少見退款,因為永久解鎖交付起來不花你任何成本,而且能被直接收回。你損失價款,商店退回它的分成,也不像可消耗項目那樣留下擱淺的算力帳單。麻煩在於終身解鎖通常是你最貴的產品,所以每一筆退款都是一次大的單筆衝擊,Apple 獨自決定它,沒有消耗請求讓你回應,而 Google Play 會在 48 小時內或第 3 天確認節點上,在沒有你參與的情況下把它退款。要在你的伺服器上核驗權益,乾淨地 revoke,快速確認,並把不滿意的客戶留在退款通道而非拒付通道裡。

常見問題解答

我可以自己為一次性應用內購買退款嗎?
在 Google Play 上,可以。你可以對任何不滿三年的訂單,從 Play Console 或 orders.refund API 為一次性購買項目退款,把 revoke 參數設為 true 會立即終止存取權。在 App Store 上,不可以。Apple 透過 reportaproblem.apple.com 決定每一筆退款,而對於一次性購買項目沒有 CONSUMPTION_REQUEST,所以你完全沒有證據視窗。
Apple 會為一次性購買退款發送 CONSUMPTION_REQUEST 嗎?
不會。Apple 只為可消耗項目,以及自 2024 年起為自動續期訂閱發送 CONSUMPTION_REQUEST。一次性購買項目沒有消耗請求,也沒有 12 小時視窗,因為 Apple 把永久解鎖視為要麼擁有、要麼沒有。你透過 REFUND App Store Server Notification 與交易上的 revocationDate 得知退款,而不是透過一個需要回應的請求。
我如何知道客戶的一次性購買被退款了?
在 App Store 上,會觸發一條 REFUND 通知,簽名交易帶有 revocationDate 與 revocationReason,同時 StoreKit 把產品從 Transaction.currentEntitlements 中移除。在 Google Play 上,Voided Purchases API 會報告它,即時通知會標記取消。兩種情況下,都要在你的伺服器上核查權益,並在購買被撤銷時關閉功能。
一次性購買退款能讓我乾淨地拿回錢嗎?
比任何其他退款類型都更乾淨。購買價款退回給客戶,商店通常退回它的佣金,但因為一次性購買項目交付起來不花任何成本,所以不像可消耗項目那樣會有算力或 API 帳單擱淺在你這一側。只要你確實撤銷了功能,你的損失基本上就是售價。
如果我不在 Google Play 上確認一次性購買會怎樣?
如果你在 3 天內不確認,Google Play 會自動退款並撤銷該購買,認定客戶已付款卻從未收到商品。一旦你核驗完購買,就立刻從你的伺服器呼叫 purchases.products.acknowledge,這樣你就永遠不會觸發一筆你並不打算發生的退款。

資料來源與延伸閱讀

RefundHalt

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

繼續閱讀

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

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