同一個訂閱被扣款兩次,通常是用戶在兩個平台各付了一次,而其中只有一筆退款由你決定
用戶為同一個訂閱被扣款兩次,通常是一份透過 App Store 購買,另一份透過 Google Play 或你的網站購買。本文說明每一筆該由誰退款、會讓你損失多少,以及如何阻止第二次扣款。

重點摘要
- 為同一個訂閱被扣款兩次的用戶,通常是透過兩個不同的商店分別購買,例如 App Store 和 Google Play。每個商店各自獨立計費、獨立退款。
- 開發者無法為 App Store 購買項目退款。由 Apple 決定,用戶可以透過 reportaproblem.apple.com 申請,也可以透過 App 用 StoreKit 的 beginRefundRequest 開啟的退款頁面申請。Apple 表示核准或拒絕最多需要 48 小時。
- 在 Google Play 上,開發者可以在 Play Console 的 Order management 中退款,也可以透過 orders.refund API 退款,但該 API 無法退款超過 3 年的訂單。
- 退款 Google Play 訂閱的最新一筆訂單,會立即移除該訂閱並取消後續續訂。退款較早的訂單,訂閱仍維持有效。
- Apple 會針對任何產品類型的退款申請傳送 CONSUMPTION_REQUEST,包括自動續訂型訂閱。如果用戶已同意,開發者須在 12 小時內透過 Send Consumption Information 回應。
- 對於 2026 年 8 月 3 日之後成立的 Google Play 訂單,一次退單會讓開發者損失購買金額(扣除 Play 的服務費),再加上銀行的退單手續費。
- 在 Apple 購買中設定 appAccountToken,在 Google Play 購買中設定經過混淆處理的帳戶 ID,你的伺服器就能在第二次扣款發生前,辨識出兩份商店訂閱背後是同一位用戶。
Apple 和 Google 的計費系統都不會阻止同一個人在同一個月內為你的訂閱分別向兩家付款。用戶為同一個訂閱被扣款兩次,幾乎都是這個原因。他們先在 iPhone 上訂閱,之後又在 Android 平板或你的網站上訂閱了一次,而你的 App 沒有認出第一份方案。用戶看到兩筆扣款,於是寫信給你。問題在於,你只能親自退其中一筆,而且前提是那一筆不是透過 Apple 購買的。以下說明每一邊如何運作、重複訂閱讓你損失多少,以及如何確保不再發生。
為什麼用戶會為同一個訂閱被扣款兩次
每個商店只管自己的購買項目。Apple 負責 App Store 訂閱的計費,Google 負責 Google Play 訂閱的計費,你的金流服務商負責網頁方案的計費。它們彼此都不知道對方存在。你的伺服器是這兩筆購買唯一能交會的地方,前提是兩筆購買都帶有能將它們連結到同一帳戶的 ID。
導致重複扣款的常見情況如下:
- 用戶換了手機,從 iOS 換到 Android 或反過來,因為新 App 顯示了付費牆,就又訂閱了一次。
- 用戶在你的網站上訂閱,接著安裝 App 卻沒有登入,於是 App 又賣給他一份商店訂閱。
- 用戶解除安裝 App,以為方案就此結束。Google 的說明文件指出,解除安裝 App 不會取消其 Google Play 訂閱。App Store 方案也會持續續訂,直到在 Apple 帳戶中取消為止。
「你們的 App 和網站顯然沒有互通」
這是你會在客服信件裡讀到的抱怨。從用戶的角度來看,這話不無道理。他們只買了一個產品,卻被要求再付一次錢,感覺就像陷阱,即使雙方都只是無心之過。最快的降溫方式,是直接講清楚哪一筆你可以退,哪一筆需要他們去找 Apple。
每一筆扣款由誰退款
大多數客服回覆就是在這裡出錯。你只能承諾你能掌控的事。
| 重複訂閱的購買管道 | 退款由誰決定 | 方案如何停止續訂 | 你能做什麼 |
|---|---|---|---|
| App Store | 只有 Apple,透過 reportaproblem.apple.com 或你的 App 內退款頁面 | 用戶在自己的 Apple 帳戶中取消 | CONSUMPTION_REQUEST,如果用戶已同意,須在 12 小時內回覆 |
| Google Play,購買後 48 小時內 | 用戶可以向 Google 申請,或由你退款 | 退款最新一筆訂單會取消後續續訂 | Google 的自助退款你無法介入 |
| Google Play,超過 48 小時 | 由你在 Play Console 或透過 orders.refund 退款 | 退款最新一筆訂單會取消後續續訂 | 由你決定 |
| 你的網站 | 由你透過金流服務商退款 | 由你在自己這端取消 | 由你決定 |
開發者能為 App Store 訂閱退款嗎?
不能。所有 App Store 退款都由 Apple 處理。你能做的是縮短用戶要走的路。StoreKit 的 beginRefundRequest 會在你的 App 內開啟 Apple 的退款頁面,購買資訊和退款原因清單都已預先填好。Apple 的文件指出,App Store 核准或拒絕申請最多需要 48 小時。在 App 之外,用戶可以登入 reportaproblem.apple.com,點選「Request a refund」(申請退款),選擇原因,再選取該訂閱。
自行處理 Google Play 那一筆的退款
在 Google Play 上,主導權在你手上。在 Play Console 中開啟 Order management,選取訂單並退款。Play Console 說明文件對訂閱有明確規定:退款最新一筆訂單,訂閱會立即移除,後續續訂也會取消。退款較早的訂單,訂閱仍維持有效。如果要自動化處理,orders.refund API 可以完成同樣的工作,它支援 revoke 參數以立即終止存取權,並且不接受超過 3 年的訂單。
重複訂閱讓你損失多少
重複的那筆錢從來就不是你能留下的營收。真正的問題是,在退款之外還要額外付出多少。
單純的情況
假設一位用戶在 App Store 和 Google Play 上都以每月 $9.99 付費,過了三個月才發現。重複扣款合計 $29.97。如果你親自退還這三筆 Google Play 訂單,你退回 $29.97,問題當天就結束。如果用戶改為把 App Store 那一筆交給 Apple,退多少由 Apple 決定,你只能透過伺服器通知得知結果。無論哪種方式,其中一個平台這三個月的營收都要退回去。
代價高昂的情況
真正的損失發生在用戶放棄找客服、直接打電話給銀行的時候。銀行一旦作出決定,退單就是最終結果。Google Play 給你一次申辯的機會,也就是退單審查,你須在 24 小時內透過 orders.reviewrefund 回覆。對於 2026 年 8 月 3 日之後成立的 Google Play 訂單,退單敗訴會讓你損失購買金額(扣除 Play 的服務費),再加上銀行的退單手續費。一筆你一分鐘就能處理的 $29.97 退款,會變成 $29.97 再加上一筆你無法掌控的手續費。
這段期間你持續付出的成本
兩份方案同時有效期間,你的後端服務的是一個人,看到的卻是兩份訂閱。如果你按訂閱計算席次、同步資料或呼叫付費的第三方 API,你可能要為同一位用戶支付兩倍的運算、儲存和 API 呼叫費用。把兩筆紀錄合併,這筆開銷就停止了。

客服如何處理重複扣款
回覆要快,而且一則訊息說完。每多一次往返,用戶向銀行提出爭議的機率就越高。
- 依用戶的帳戶查詢兩筆購買,而不是依他們來信使用的電子郵件地址查詢。
- 詢問他們想保留哪一份方案。通常是他們現在正在使用的裝置上的那一份。
- 如果重複訂閱在 Google Play 或你的網站上,你直接退款,並告訴他們已經處理完畢。
- 如果重複訂閱在 App Store 上,引導他們前往 reportaproblem.apple.com,或使用你 App 內的退款按鈕(如果你已經做了),並告訴他們在 Apple 帳戶設定中取消該訂閱。
- 如果 Apple 隨後傳來 CONSUMPTION_REQUEST 且用戶已同意,須在 12 小時內回覆正確的使用資料。一份從未使用過的重複方案,Apple 很容易核准退款。
如何在第二次扣款發生前阻止它
預防比任何退款都便宜,而兩個商店都已經提供了相應的工具。
將每一筆購買連結到你的帳戶 ID
在 iOS 上,為每個帳戶產生一個 UUID,並作為 appAccountToken 購買選項傳入。Apple 會在交易資訊和訂閱續訂資訊中回傳同一個值。如果購買發生在你的 App 之外,可以之後透過 Set App Account Token 端點附加或更新該權杖。在 Android 上,向 setObfuscatedAccountId 傳入一個不超過 64 個字元的雜湊帳戶 ID,絕對不要傳入原始個人資料。
顯示付費牆之前先檢查權益
在付費牆出現之前,先向你自己的伺服器查詢:已登入的帳戶是否已經在任一平台擁有有效方案。先顯示登入提示,再只對沒有有效方案的帳戶顯示付費牆。
監控同一帳戶下的兩份有效方案
每天檢查一次,找出跨商店擁有不只一份有效訂閱的帳戶。在第一週就發現,代表只需退一個月而不是三個月,只需寄一封簡短的信,而不是應付一次退單。
RefundHalt 會將 App Store 和 Google Play 訂閱與你自己的帳戶 ID 對應起來,因此重複付費的用戶,會在他的銀行察覺之前,就以「一個人、兩份方案」的樣貌出現在你面前。
常見問題解答
- 為什麼用戶會為同一個訂閱被扣款兩次?
- 通常是因為他們在兩個平台上各買了一次,例如 App Store 和 Google Play,或是某個商店和你的網站。每個商店各自為自己的訂閱計費,並不知道另一份訂閱存在,所以兩份都會續訂,直到其中一份被取消。
- 我可以替用戶的 App Store 訂閱退款嗎?
- 不行。只有 Apple 能為 App Store 購買項目退款。你可以用 StoreKit 的 beginRefundRequest 在 App 內開啟 Apple 的退款頁面,或引導用戶前往 reportaproblem.apple.com。Apple 表示核准或拒絕申請最多需要 48 小時。
- 如何為重複的 Google Play 訂閱退款?
- 在 Play Console 的 Order management 中退款該訂單,或呼叫 orders.refund API。退款最新一筆訂單會立即移除訂閱並取消後續續訂。該 API 無法退款超過 3 年的訂單。
- 退款訂閱會同時取消訂閱嗎?
- 在 Google Play 上,退款最新一筆訂單會取消後續續訂,但退款較早的訂單,訂閱仍維持有效。在 App Store 上,是否退款由 Apple 決定,取消訂閱則需要用戶在自己的 Apple 帳戶中操作。
- 如何防止用戶在 iOS 和 Android 上重複訂閱?
- 為每一筆購買附加你自己的帳戶 ID,在 Apple 上使用 appAccountToken,在 Google Play 上使用經過混淆處理的帳戶 ID。接著在顯示付費牆之前,先在你的伺服器上檢查該帳戶是否已在任一平台擁有有效方案,並請用戶先登入。
資料來源與延伸閱讀
- Apple Support: Request a refund for apps or content that you bought from Apple
- Apple Developer: beginRefundRequest(in:)
- Apple Developer: Send Consumption Information
- Apple Developer: appAccountToken
- Play Console Help: Manage your app's orders and issue refunds
- Google Play Developer API: orders.refund
- Google Play Help: Apps, games, and in-app purchases refund policies
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
App Store 與 Google Play 的退款自動駕駛
繼續閱讀
應用程式從 Google Play 或 App Store 下架後,退款仍可能從你的付款中扣除
從 Google Play 或 App Store 下架的應用程式會停止產生收入,但商店合約仍讓你承擔退款責任,並允許 Apple 和 Google 暫扣你的付款。本文說明每份合約的規定、訂閱者會遇到什麼,以及一次下架的代價。
刪除 App 帳號不會取消訂閱,之後的退款申請仍可能找上你
Apple 和 Google Play 都要求你提供刪除 App 帳號的功能,但刪除帳號並不會停止任何一家商店的扣款。本文說明兩家商店各自的要求,為什麼帳號被清空後你可能無法回應 CONSUMPTION_REQUEST 或退單審查,以及哪些資料應該保留。