# ขอคืนเงิน App Store: สิ่งที่นักพัฒนาเห็น

> Apple เป็นผู้ตัดสินการคืนเงินเพียงผู้เดียว นักพัฒนาได้รับ CONSUMPTION_REQUEST ตอบได้ภายใน 12 ชั่วโมง แล้วรู้ผลผ่าน REFUND

หน้าต้นฉบับ: [ขอคืนเงิน App Store: สิ่งที่นักพัฒนาเห็น](https://devoria.fr/th/blog/app-store-refund-what-developer-sees)
ผู้เขียน: [Mehdi Azizi](https://devoria.fr/th/mehdi-azizi)
เผยแพร่: 2026-11-04
แก้ไขเนื้อหาล่าสุด: 2026-11-04


บน App Store **Apple เป็นผู้อนุมัติหรือปฏิเสธการคืนเงิน ไม่ใช่นักพัฒนาเลย** ลูกค้าส่งคำขอผ่านเว็บไซต์ของ Apple หรือจากในแอปของคุณ ถ้าคุณเชื่อมต่อการแจ้งเตือนเซิร์ฟเวอร์ของ Apple ไว้ คุณจะได้รับการแจ้งเตือน `CONSUMPTION_REQUEST` ตอนที่มีคำขอ แล้วได้ `REFUND` หรือ `REFUND_DECLINED` เมื่อมีการตัดสิน ระหว่างนั้นคุณมีเวลา 12 ชั่วโมงในการส่งข้อมูลการใช้งานและความต้องการของคุณ โดยมีเงื่อนไขว่าลูกค้าต้องให้ความยินยอมแล้ว

การคืนเงินที่ได้รับอนุมัติจะถอดรายการซื้อออกจากสิทธิ์ที่ใช้งานอยู่ของลูกค้า และแสดงเป็นค่าติดลบในรายงานยอดขายของคุณ คู่มือนี้อธิบายทีละขั้นตอน ว่าคุณส่งอะไรให้ Apple ได้บ้าง และคุณทำอะไรได้บ้างกับคำขอที่ไม่สุจริต กฎทั้งหมดมาจากหน้าเอกสารของ Apple ที่ผมอ่านทวนเมื่อวันที่ 3 พฤศจิกายน 2026 ส่วนกรณีจริงมาจากระบบแจ้งเตือนที่ผมติดตั้งไว้กับแอปของผมในเดือนตุลาคม

## ใครเป็นผู้ตัดสินการคืนเงินบน App Store?

Apple และมีแค่ Apple เท่านั้น [หน้าช่วยเหลือของ Apple](https://support.apple.com/en-us/118223) อธิบายขั้นตอนของลูกค้าไว้ว่า ลูกค้าเข้าสู่ระบบที่ reportaproblem.apple.com เลือก "Request a refund" ระบุเหตุผล แล้วเลือกรายการซื้อที่เกี่ยวข้อง Apple แนะนำให้รอคำตอบ 24 ถึง 48 ชั่วโมง

ลูกค้ายังขอคืนเงินจากในแอปของคุณได้ด้วย StoreKit มี [หน้าต่างคำขอ](https://developer.apple.com/documentation/storekit/transaction/beginrefundrequest%28in%3A%29-9k0pj) สำหรับเรื่องนี้ ใช้ได้ตั้งแต่ iOS 15 Apple แนะนำให้เรียกใช้จากหน้าตั้งค่าบัญชีหรือเมนูช่วยเหลือ หน้าต่างนี้จะแสดงรายการซื้อและรายการเหตุผลให้เลือก และ Apple ใช้เวลาตัดสินไม่เกิน 48 ชั่วโมง

**ไม่ว่าทางไหน คุณก็ไม่ต้องอนุมัติอะไรเลย** คุณทำได้แค่ให้ข้อมูลและบอกความต้องการ ซึ่งเป็นหนึ่งในหลายเกณฑ์ที่ Apple ใช้ตัดสิน

## แต่ละฝ่ายเห็นอะไร ทีละขั้นตอน

| ขั้นตอน          | ฝั่งลูกค้า                          | ฝั่งนักพัฒนา                                           |
| ---------------- | ----------------------------------- | ------------------------------------------------------ |
| คำขอ             | แบบฟอร์มของ Apple หรือหน้าต่างในแอป | การแจ้งเตือน `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) ส่งการแจ้งเตือนห้าประเภทที่เกี่ยวข้องกับเรื่องนี้ คุณจะได้รับที่ที่อยู่ HTTPS ที่ลงทะเบียนไว้ใน App Store Connect หนึ่งที่อยู่สำหรับ production และอีกหนึ่งสำหรับ sandbox

| การแจ้งเตือน          | สิ่งที่บอก                                             | สิ่งที่คุณต้องทำ                        |
| --------------------- | ------------------------------------------------------ | --------------------------------------- |
| `CONSUMPTION_REQUEST` | ลูกค้าขอคืนเงิน                                        | ตอบภายใน 12 ชั่วโมง หากได้รับความยินยอม |
| `REFUND`              | Apple คืนเงินสำหรับธุรกรรมแล้ว                         | ถอดเนื้อหาหรือสิทธิ์ที่ถูกคืนเงินออก    |
| `REFUND_DECLINED`     | Apple ปฏิเสธคำขอ                                       | ไม่ต้องทำอะไร สิทธิ์ยังใช้ได้ต่อ        |
| `REFUND_REVERSED`     | Apple ยกเลิกการคืนเงินหลังลูกค้าโต้แย้ง                | คืนสิ่งที่คุณถอดออกไป                   |
| `REVOKE`              | รายการซื้อที่แชร์ผ่าน Family Sharing ใช้ไม่ได้อีกต่อไป | ถอดสิทธิ์ของสมาชิกในครอบครัว            |

เซิร์ฟเวอร์ของคุณต้องตอบกลับด้วยรหัส HTTP ระหว่าง 200 ถึง 206 ตาม [หน้าเรื่องการตอบกลับการแจ้งเตือน](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 ตัว 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 มีฟิลด์ "Apple Server Notification Forwarding URL" ในการตั้งค่าแอป อธิบายไว้ใน [หน้าเรื่องการแจ้งเตือนของ Apple](https://www.revenuecat.com/docs/platform-resources/server-notifications/apple-server-notifications) ผมใช้วิธีนี้อยู่ วิธีตั้งค่าการสมัครสมาชิกด้วย RevenueCat อยู่ใน [RevenueCat และการสมัครสมาชิกในแอป iOS](https://devoria.fr/th/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" ถ้าแอปของคุณตรวจสิทธิ์ด้วย `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 อาจนำไปพิจารณาว่าคุณปฏิบัติตามจรรยาบรรณหรือไม่

## กรณีของผม: ระบบแจ้งเตือนที่ติดตั้งกับแอปของผม

วันที่ 12 ตุลาคม 2026 ผมติดตั้งระบบแจ้งเตือนกับแอปของผม RevenueCat ส่งต่อการแจ้งเตือนของ Apple ไปยัง route หนึ่งบน devoria.fr ซึ่งจะตรวจลายเซ็นของ Apple แล้วส่งการแจ้งเตือนมาหาผม โดยไม่มียอดเงิน ผมอยากเห็นคำขอตอนที่มันเข้ามา ไม่ใช่แค่ผลลัพธ์

วันที่ 18 ตุลาคม คำขอจริงครั้งแรกเข้ามาที่ TradaZen แอปจำลองการเทรดของผม เป็นการสมัครสมาชิกรายปี ที่ถูกเรียกเก็บเงินหลังทดลองใช้ฟรี 7 วัน เหตุผลที่ระบุ: ซื้อโดยไม่ได้ตั้งใจ ได้บทเรียนสามข้อ:

1. **คำขอเดียวกันอาจเข้ามาหลายครั้ง** ผมได้รับการแจ้งเตือนเดียวกันสามครั้งในคืนเดียว ตั้งแต่นั้นมา การแจ้งเตือนทุกรายการจะถูกกรองซ้ำตามประเภทการแจ้งเตือนและรหัสธุรกรรม
2. **การตัดสินมาถึงภายในไม่ถึงหนึ่งวัน** Apple ปฏิเสธประมาณ 22 ชั่วโมงหลังคำขอ ลูกค้ายังคงมีสิทธิ์ใช้งาน
3. **การถูกปฏิเสธไม่ใช่จุดจบ** ลูกค้าคนเดิมส่งคำขอใหม่อีกครั้งสองวันต่อมา สำหรับธุรกรรมเดียวกัน

> คำขอแบบ "ซื้อโดยไม่ได้ตั้งใจ" หลังหมดช่วงทดลองใช้ ไม่ได้ชนะกันที่การตอบ Apple แต่ต้องป้องกันตั้งแต่ที่ paywall ก่อนการชำระเงินครั้งแรก

## ลดคำขอที่ไม่สุจริตโดยไม่ผิดกฎ

**สิ่งที่ทำได้:**

- **ตอบทุกคำขอด้วยข้อมูลที่ถูกต้อง** เมื่อลูกค้าให้ความยินยอมแล้ว
- **แสดงความต้องการแบบเจาะจง** เช่น ปฏิเสธสำหรับรายการซื้อที่ใช้ไปแล้ว แทนที่จะปฏิเสธทุกคน
- **ผูก `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) ห้ามผลักดันลูกค้าให้ซื้อสิ่งที่ไม่ต้องการ หรือเรียกเก็บเงินสำหรับสิ่งที่ไม่ได้ส่งมอบ
- **กดดันลูกค้า** ที่ขอคืนเงิน กฎเดียวกันนี้กำหนดให้บริการลูกค้าด้วยความเคารพ ไม่ข่มขู่

ตัวช่วยที่ดีที่สุดยังคงอยู่ที่ต้นทาง: paywall ที่บอกราคา วันที่เรียกเก็บเงินครั้งแรก และวิธียกเลิก ข้อผิดพลาดที่ควรหลีกเลี่ยงอยู่ใน [ข้อผิดพลาดของ paywall](https://devoria.fr/th/blog/ios-paywall-beginner-mistakes-sales) และกฎของช่วงทดลองใช้อยู่ใน [การทดลองใช้ฟรีบน App Store](https://devoria.fr/th/blog/introductory-offer-app-store-connect-free-trial-ios)

## ทดสอบก่อนขึ้น production

ตาม [หน้าเรื่องการทดสอบคำขอ](https://developer.apple.com/documentation/storekit/testing-refund-requests) ทั้ง sandbox และการทดสอบ StoreKit ใน Xcode รองรับคำขอคืนเงิน ใน sandbox ไม่ว่าเลือกเหตุผลอะไรก็จะได้รับการอนุมัติอัตโนมัติ ถ้าจะจำลองการปฏิเสธ ให้เลือก "Other" แล้วพิมพ์ `DECLINE` ถ้าจะจำลองการคืนเงินตามสัดส่วน ให้พิมพ์ `GRANT_PRORATED` ใน sandbox คำตอบข้อมูลการใช้งานของคุณต้องส่งออกไปภายในห้านาที

## การสมัครสมาชิกที่ถูกขอคืนเงินน้อยลง

[iOS & Android Kit](https://devoria.fr/th/kits/ios) เริ่มจากโค้ดของแอปผม พร้อม onboarding, paywall และการสมัครสมาชิกที่เขียนไว้แล้ว และพาคุณผ่านสี่ขั้นตอนจนถึง App Store ตามจังหวะของคุณ วิธีตั้งค่าแบบครบถ้วนอยู่ในหน้า [การสมัครสมาชิกในแอป iOS](https://devoria.fr/th/expertise/ios-in-app-subscription) และกฎของ Apple เรื่องการสมัครสมาชิกอยู่ใน [guideline 3.1.2](https://devoria.fr/th/blog/guideline-3-1-2-app-rejected-subscription)

ก่อนเปิดใช้ paywall [ทำแบบประเมินฟรี](https://devoria.fr/th/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 ไหม?

ต้อง Apple กำหนดให้มีความยินยอมที่ถูกต้องก่อนแชร์ข้อมูลใดๆ ผ่าน Consumption API ถ้าไม่มี คุณห้ามตอบการแจ้งเตือน และห้ามใช้หน้าต่างขออนุญาตติดตามเพื่อโฆษณาในการขอความยินยอม

### การคืนเงินส่งผลเสียต่อแอปของผมไหม?

อาจส่งผล guideline 5.6.4 ระบุว่าคำขอคืนเงินที่มากเกินไปเป็นสัญญาณหนึ่งของคุณภาพที่ไม่เพียงพอ ซึ่ง Apple อาจนำไปพิจารณาว่าคุณปฏิบัติตามจรรยาบรรณหรือไม่


## โปรเจกต์ของคุณ

[iOS & Android Kit](https://devoria.fr/th/kits/ios): สร้างแอป iPhone และ Android ของคุณด้วย Claude Code: โค้ดเริ่มต้นจากแอปของผม เส้นทางจนถึงสโตร์ และชุดคิททั้งหมด ฿3,699

[แบบประเมิน: อะไรกั้นคุณไว้จากแอป iPhone ของคุณ](https://devoria.fr/th/diagnostic): 7 คำถาม 60 วินาที: รู้ว่าอะไรที่ขวางคุณจากการเผยแพร่แอป iPhone จริง ๆ พร้อมเส้นทาง 4 ขั้นตอนและชุดคิทที่เหมาะกับคุณ
