# App Store 退款：開發者看得到什麼

> App Store 退款由 Apple 決定。開發者收到 CONSUMPTION_REQUEST，可在 12 小時內回應，再透過 REFUND 得知結果。

原始頁面：[App Store 退款：開發者看得到什麼](https://devoria.fr/zh-hant/blog/app-store-refund-developer-view)
作者：[Mehdi Azizi](https://devoria.fr/zh-hant/mehdi-azizi)
發布日期：2026-11-04
內容最後修訂：2026-11-04


在 App Store 上，**核准或拒絕退款的永遠是 Apple，從來不是開發者。**客戶在 Apple 的網站上或從你的 app 裡提出申請。如果你接好了 Apple 的伺服器通知，申請送出時你會收到 `CONSUMPTION_REQUEST` 通知，做出決定時再收到 `REFUND` 或 `REFUND_DECLINED`。在這中間，你有 12 小時可以送出使用資料和你的偏好，前提是客戶同意。

退款一旦核准，該筆購買就會從客戶的有效權益中移除，並在你的銷售報告中以負數呈現。這篇指南會詳細說明每個步驟、你可以傳給 Apple 什麼，以及面對濫用的退款申請你可以做什麼。規則來自 2026 年 11 月 3 日重新查閱的 Apple 頁面。實際案例則來自我 10 月在自己的 app 上接好的一個提醒機制。

## App Store 退款由誰決定？

Apple，而且只有 Apple。[Apple 的支援頁面](https://support.apple.com/en-us/118223)描述了客戶的流程：登入 reportaproblem.apple.com，選擇「Request a refund」，填寫原因，再選擇相關的購買項目。Apple 建議客戶等待 24 到 48 小時取得回覆。

客戶也可以從你的 app 裡申請退款。StoreKit 為此提供了[一個申請表單](https://developer.apple.com/documentation/storekit/transaction/beginrefundrequest%28in%3A%29-9k0pj)，iOS 15 起可用。Apple 建議從帳號設定或說明選單呼叫它。表單會顯示購買項目和一份原因清單，Apple 最多花 48 小時做出決定。

**無論哪種情況，你都不需要核准任何東西。**你只能提供資訊和偏好，而這些只是 Apple 決策中的眾多依據之一。

## 每個步驟，雙方各看到什麼

| 步驟           | 客戶端                          | 開發者端                               |
| -------------- | ------------------------------- | -------------------------------------- |
| 申請           | Apple 的表單或 app 內的申請表單 | `CONSUMPTION_REQUEST` 通知             |
| 12 小時內      | 等待                            | 可以送出使用資料                       |
| 48 小時內      | Apple 回覆                      | `REFUND` 或 `REFUND_DECLINED` 通知     |
| 核准之後       | 款項退回原付款方式              | 購買從有效權益中移除，單位數為負       |
| 客戶提出異議後 | Apple 撤銷退款                  | `REFUND_REVERSED` 通知，需要恢復存取權 |

App Store Connect 只會在 Sales and Trends 裡顯示已經核准的退款。**申請本身只會透過伺服器通知送達。**沒有這些通知，你只能事後才發現退款。

## 退款相關的伺服器通知

[App Store Server Notifications V2](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype) 有五種類型跟這裡有關。你會在 App Store Connect 中設定的 HTTPS 網址收到它們，正式環境一個、sandbox 一個。

| 通知                  | 代表什麼                             | 你要做什麼                   |
| --------------------- | ------------------------------------ | ---------------------------- |
| `CONSUMPTION_REQUEST` | 客戶申請退款                         | 在 12 小時內回應（若有同意） |
| `REFUND`              | Apple 已退款該筆交易                 | 移除已退款的內容或存取權     |
| `REFUND_DECLINED`     | Apple 拒絕了申請                     | 不用做什麼，存取權繼續有效   |
| `REFUND_REVERSED`     | 客戶提出異議後，Apple 撤銷了退款     | 恢復你先前移除的內容         |
| `REVOKE`              | 透過家人共享分享的購買項目已不再可用 | 移除該家庭成員的存取權       |

你的伺服器必須回傳 200 到 206 之間的 HTTP 狀態碼。根據[通知回應的說明頁面](https://developer.apple.com/documentation/appstoreservernotifications/responding-to-app-store-server-notifications)，否則 Apple 會重試五次，分別在前一次嘗試後的 1、12、24、48 和 72 小時。在 sandbox 中只會送一次。

## Consumption API：你可以告訴 Apple 什麼

申請送達時，你可以用 [Send Consumption Information](https://developer.apple.com/documentation/appstoreserverapi/send-consumption-information) 回應。規則就是 Apple 的一句話：「Respond within 12 hours of receiving the `CONSUMPTION_REQUEST` notification.」API 第 2 版適用於所有產品類型，包括訂閱。

[請求](https://developer.apple.com/documentation/appstoreserverapi/consumptionrequest)的欄位：

| 欄位                    | 必填 | 告訴 Apple 什麼                                       |
| ----------------------- | ---- | ----------------------------------------------------- |
| `customerConsented`     | 是   | 客戶同意分享他的資料                                  |
| `deliveryStatus`        | 是   | 購買項目已交付且正常運作，或者為什麼沒有交付          |
| `sampleContentProvided` | 是   | 購買前是否提供了試用、片段或說明                      |
| `consumptionPercentage` | 否   | 已使用的比例，0 到 100,000 對應 0 到 100%             |
| `refundPreference`      | 否   | 你的偏好：`DECLINE`、`GRANT_FULL` 或 `GRANT_PRORATED` |

有兩點很重要。如果 `deliveryStatus` 不是 `DELIVERED`，已使用比例必須是零。另外，訂閱按比例退款時，你要省略已使用比例：由 Apple 計算。

**同意是一切的前提。**Apple 寫道：「You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API.」沒有同意，就不要回應。Apple 也禁止用廣告追蹤視窗來取得這個同意：「Don't use the AppTrackingTransparency prompt to obtain consent」。

## 如果你用 RevenueCat

用 RevenueCat 的話，接收 Apple 通知並回應申請的是它，功能叫 [Refund Control](https://www.revenuecat.com/docs/customers/refund-control)。你可以從四種政策中選一種：偏好全額退款、偏好拒絕、只送出使用資料，或者不回應。

啟用資料分享，就等於確認你已經取得客戶的同意。RevenueCat 自己也說：「Enabling consumption data sharing confirms that you obtained consent from your Customers.」它也建議把「Prefer no refund」只用在特定族群，並在這個偏好影響到大部分客戶時提出警告。

如果你也想在自己的伺服器上收到通知，RevenueCat 在 app 設定中提供了「Apple Server Notification Forwarding URL」欄位。說明在[它關於 Apple 通知的頁面](https://www.revenuecat.com/docs/platform-resources/server-notifications/apple-server-notifications)。我就是這樣用的。用 RevenueCat 建置訂閱的方式，請看 [RevenueCat 與 iOS app 內訂閱](https://devoria.fr/zh-hant/blog/revenuecat-ios-in-app-subscription-setup)。

## 對你的收入和訂閱有什麼影響

**對存取權。**根據 [`currentEntitlements` 的文件](https://developer.apple.com/documentation/storekit/transaction/currententitlements)，「Products that the App Store has refunded or revoked don't appear in the current entitlements」。如果你的 app 用 `currentEntitlements` 檢查權益，已退款的存取權會自動消失。交易會在 `revocationDate` 和 `revocationReason` 中記錄撤銷的日期和原因。

**對報告。**根據[銷售報告的說明](https://developer.apple.com/help/app-store-connect/reference/reporting/summary-sales-report)，退款會以負數的單位數和客戶價格顯示。訂閱方面，[訂閱資料的說明頁面](https://developer.apple.com/help/app-store-connect/measure-app-performance/view-subscription-data)會把全額和部分退款列入事件，並從每日單位數中扣除。

**對你的信譽。**[Guideline 5.6.4](https://developer.apple.com/app-store/review/guidelines/#5.6.4) 把過多的退款申請列為品質不足的跡象之一。高退款率不只是損失金錢：Apple 可能會把它納入評估你是否遵守行為準則。

## 我的案例：接在我 app 上的提醒

2026 年 10 月 12 日，我在自己的 app 上接了一個提醒。RevenueCat 把 Apple 的通知轉發到 devoria.fr 的一個路由。它會驗證 Apple 的簽章，然後發提醒給我，不含金額。我想在申請送達的當下就看到，而不只是看到結果。

10 月 18 日，第一筆真正的申請出現在 TradaZen，我的交易模擬器上。一個年訂閱，在 7 天免費試用結束時付款。填寫的原因：誤購。三個心得：

1. **同一筆申請可能會送來好幾次。**同一個晚上我收到三次一樣的提醒。之後每個提醒都會依通知類型和交易 ID 去除重複。
2. **決定在不到一天內就出來了。**Apple 在申請後大約 22 小時拒絕了。客戶保留了存取權。
3. **被拒絕不代表結束。**同一位客戶兩天後又針對同一筆交易再申請了一次。

> 試用結束時以「誤購」為由的申請，不是靠回應 Apple 就能贏的。要在付費牆上、在第一次付款之前就預防。

## 在不違反規則的前提下減少濫用申請

**允許的做法：**

- **在客戶同意的情況下，用正確的資料回應每一筆申請。**
- **表達有針對性的偏好**，例如對已經使用完的購買項目表示拒絕，而不是對所有人一律拒絕。
- **把每一筆 `REFUND` 對應到一個客戶帳號。**[Apple 關於退款通知的頁面](https://developer.apple.com/documentation/storekit/handling-refund-notifications)建議這麼做，用來找出重複退款。
- **在購買前清楚說明買的是什麼。**[Guideline 3.1.2(c)](https://developer.apple.com/app-store/review/guidelines/#3.1.2) 要求在提供訂閱之前，說明使用者用這個價格能得到什麼。

**禁止的做法：**

- **送出不實資料**讓申請被拒，或在沒有同意的情況下回應。
- **透過廣告追蹤視窗取得同意**，Apple 明文排除了這種做法。
- **設計陷阱式購買。**[Guideline 5.6](https://developer.apple.com/app-store/review/guidelines/#5.6) 禁止誘導客戶進行非自願的購買，或對沒有交付的東西收費。
- **對申請退款的客戶施壓。**同一條規則要求客服要保持尊重，不得恐嚇。

最好的著力點還是在前端：付費牆要寫清楚價格、第一次付款的日期，以及取消的方式。要避免的錯誤請看[付費牆的常見錯誤](https://devoria.fr/zh-hant/blog/ios-paywall-beginner-mistakes)，試用期的規則請看 [App Store 免費試用](https://devoria.fr/zh-hant/blog/ios-free-trial-introductory-offer-app-store-connect)。

## 上線前先測試

根據[退款申請測試的說明頁面](https://developer.apple.com/documentation/storekit/testing-refund-requests)，sandbox 和 Xcode 的 StoreKit 測試都支援退款申請。在 sandbox 中，任何原因都會自動核准。要模擬拒絕，選擇「Other」並輸入 `DECLINE`。要模擬按比例退款，輸入 `GRANT_PRORATED`。在 sandbox 中，你的使用資料回應必須在五分鐘內送出。

## 較少被退款的訂閱

[iOS & Android Kit](https://devoria.fr/zh-hant/kits/ios) 以我自己 app 的程式碼為基礎，onboarding、付費牆和訂閱都已經寫好，並以四個步驟帶你一路上架 App Store，依你自己的步調進行。完整的建置方式詳見 [iOS app 內訂閱](https://devoria.fr/zh-hant/expertise/ios-in-app-subscription)頁面，Apple 的訂閱規則則在 [guideline 3.1.2](https://devoria.fr/zh-hant/blog/guideline-3-1-2-app-subscription-rejected)。

在推出你的付費牆之前，[先做免費診斷](https://devoria.fr/zh-hant/diagnostic)：它會告訴你專案真正卡住的地方，並寄給你我的 Apple 防退件檢查清單。

## 常見問題

### 開發者可以拒絕 App Store 退款嗎？

不行。由 Apple 單獨決定。你可以送出使用資料和偏好，例如 `DECLINE`，這些只是眾多依據之一。最終決定權在 Apple。

### 開發者會收到退款申請的通知嗎？

會，前提是接好了 App Store Server Notifications V2。Apple 會在申請時送出 `CONSUMPTION_REQUEST`，做出決定時再送出 `REFUND` 或 `REFUND_DECLINED`。沒有通知的話，你只能在報告中看到已核准的退款。

### Apple 處理退款申請要多久？

Apple 對客戶說是 24 到 48 小時。StoreKit 的文件則說最多 48 小時。在你這邊，你有 12 小時可以送出使用資料。

### 退款後存取權會怎樣？

已退款的購買項目會從客戶的有效權益中移除：StoreKit 2 不會再在 `currentEntitlements` 中回傳它。如果 Apple 之後撤銷退款，你會收到 `REFUND_REVERSED`，必須恢復存取權。

### 回應 Apple 需要客戶同意嗎？

需要。透過 Consumption API 分享任何資料之前，Apple 都要求有效的同意。沒有同意，就不要回應通知。也不能用廣告追蹤視窗來取得同意。

### 退款會對我的 app 不利嗎？

有可能。Guideline 5.6.4 把過多的退款申請列為品質不足的跡象之一，Apple 可能會把它納入評估是否遵守行為準則。


## 你的專案

[iOS & Android Kit](https://devoria.fr/zh-hant/kits/ios)：用 Claude Code 打造你的 iPhone 和 Android App：我自己 App 的起始程式碼、上架商店的完整流程，以及所有套件。$3,599。

[診斷：你離自己的 iPhone App 還差什麼](https://devoria.fr/zh-hant/diagnostic)：7 個問題，60 秒：找出真正卡住你發布 iPhone App 的原因，拿到你的 4 步驟路線，以及最適合你的套件。
