所有文章
Playbook閱讀時間 7 分鐘

同一個訂閱被扣款兩次,通常是用戶在兩個平台各付了一次,而其中只有一筆退款由你決定

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

桌上並排放著一支 iPhone 和一支 Android 手機,旁邊是一張列有兩筆相同扣款的銀行對帳單,代表用戶為同一個訂閱被扣款兩次

重點摘要

  • 為同一個訂閱被扣款兩次的用戶,通常是透過兩個不同的商店分別購買,例如 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。接著在顯示付費牆之前,先在你的伺服器上檢查該帳戶是否已在任一平台擁有有效方案,並請用戶先登入。

資料來源與延伸閱讀

RefundHalt

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

繼續閱讀

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

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