Trong một thời gian dài, câu trả lời trung thực cho câu hỏi "làm sao để phản hồi yêu cầu hoàn tiền của Apple" chính là: bạn không thể. Apple nhận tiền thanh toán, nhận yêu cầu hoàn tiền, tự quyết định, và điều đầu tiên nhà phát triển biết được chỉ là khoản thanh toán bị giảm đi. Điều đó không còn đúng kể từ năm 2021, dù nhiều người vẫn nghĩ như vậy.
Giờ đây, trước khi đưa ra quyết định, Apple sẽ hỏi máy chủ của bạn biết gì về giao dịch mua, và chờ khoảng 12 giờ để nhận câu trả lời. Chúng tôi đã viết chi tiết về nội dung thực sự của một CONSUMPTION_REQUEST, nên ở đây sẽ không nhắc lại từng trường dữ liệu trong payload. Bài viết này nói về việc cần làm gì khi nhận được một yêu cầu như vậy.
Những Điểm Chính
Apple là bên quyết định mọi yêu cầu hoàn tiền trên App Store. Những gì bạn gửi không thay đổi điều đó, nhưng sẽ thay đổi những gì Apple biết khi đưa ra quyết định.
Yêu cầu này đến dưới dạng thông báo CONSUMPTION_REQUEST, chỉ áp dụng cho vật phẩm tiêu hao (consumable) và gói đăng ký tự động gia hạn.
Bạn có 12 giờ để phản hồi thông qua endpoint Send Consumption Information, hiện yêu cầu năm trường dữ liệu.
Phản hồi chủ yếu xoay quanh ba thông tin: giao dịch đã được giao hay chưa, đã sử dụng bao nhiêu, và khách hàng có được dùng thử miễn phí trước đó hay không. Cộng thêm tùy chọn ưu tiên của bạn.
Theo kinh nghiệm của chúng tôi, phần lớn các khoản hoàn tiền mà nhà phát triển "mất" là những yêu cầu không ai phản hồi.
Yêu Cầu Hoàn Tiền Trên Apple App Store Là Gì?
Yêu cầu hoàn tiền trên Apple App Store là việc khách hàng yêu cầu Apple hoàn lại tiền cho một ứng dụng hoặc một giao dịch mua trong ứng dụng. Họ không yêu cầu bạn. Họ truy cập reportaproblem.apple.com, hoặc sử dụng bảng yêu cầu hoàn tiền trong ứng dụng, chọn một lý do từ danh sách ngắn, chọn giao dịch mua và gửi yêu cầu. Trang hỗ trợ của Apple thông báo rằng họ sẽ nhận được phản hồi trong vòng 24 đến 48 giờ.
Nếu giao dịch mua là vật phẩm tiêu hao hoặc gói đăng ký tự động gia hạn, Apple sẽ gửi tín hiệu đến máy chủ của bạn để hỏi những gì bạn biết, sau đó kết hợp câu trả lời của bạn với lịch sử mua hàng và hoàn tiền của khách hàng mà Apple nắm rõ hơn bạn rất nhiều, rồi đưa ra quyết định. Bạn không thấy được tên khách hàng và cũng không có quyền phủ quyết. Bạn chỉ có một khoảng thời gian ngắn để đưa ra các dữ kiện.
Quy Trình Hoàn Tiền Của Apple Hoạt Động Như Thế Nào Đối Với Nhà Phát Triển
Quy trình hoàn tiền của Apple dành cho nhà phát triển diễn ra qua bốn giai đoạn, và bạn chỉ tham gia vào một trong số đó.
Khách hàng yêu cầu Apple hoàn tiền và chọn một lý do.
Apple gửi một CONSUMPTION_REQUEST đến URL máy chủ mà bạn đã đăng ký trong App Store Connect. Điều này chỉ xảy ra với vật phẩm tiêu hao và gói đăng ký tự động gia hạn.
Bạn có 12 giờ để gọi endpoint Send Consumption Information kèm theo dữ liệu của mình.
Apple đưa ra quyết định, sau đó thông báo cho bạn bằng thông báo REFUND hoặc REFUND_DECLINED.
Nếu bạn chưa bao giờ thiết lập URL máy chủ cho App Store Server Notifications, giai đoạn hai sẽ âm thầm không diễn ra. Apple sẽ chỉ dựa vào thông tin tài khoản của khách hàng để đưa ra quyết định, và bạn chỉ biết được điều này qua báo cáo doanh số, nếu bạn có đọc báo cáo đó.
Điều Gì Xảy Ra Sau Khi Khách Hàng Yêu Cầu Hoàn Tiền?
Ngay sau khi khách hàng gửi yêu cầu, endpoint của bạn sẽ nhận được một payload JSON đã ký với notificationType là CONSUMPTION_REQUEST. Bên trong gồm có: giao dịch đã ký, product ID, original transaction ID, và một consumptionRequestReason. Apple đã bổ sung trường lý do này vào năm 2024 và giải thích trong phiên WWDC24 về App Store server APIs. Có năm giá trị khả dĩ: UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL và OTHER.
Điều còn thiếu chính là danh tính người dùng. Manh mối duy nhất để truy ngược về hồ sơ của bạn là transaction ID, và appAccountToken nếu bạn đã gắn nó vào lúc mua hàng. Nếu chưa, đây sẽ là lúc bạn ước gì mình đã làm vậy.
Vì vậy, việc xem xét thực chất là một thao tác tra cứu: ai đã mua món này, họ đã nhận được nó chưa, và họ đã làm gì với nó kể từ đó?
Cách Phản Hồi Yêu Cầu Hoàn Tiền Của Apple
Những người tìm kiếm cách phản hồi thông báo yêu cầu hoàn tiền của Apple thường chỉ tìm thấy tài liệu tham khảo API. Dưới đây là các bước theo đúng thứ tự.
1. Xác Minh Payload
Apple ký mọi thông báo. Hãy kiểm tra chữ ký trước khi tin bất kỳ nội dung nào trong đó. Thư viện App Store Server Library của Apple hỗ trợ việc này bằng Java, Python, Node và Swift.
2. Tìm Giao Dịch Mua
Sử dụng transaction ID hoặc appAccountToken để tra cứu giao dịch mua trong hệ thống của bạn. Bạn cần tìm được người dùng, hồ sơ giao hàng, và bất kỳ dữ liệu sử dụng nào đã ghi nhận kể từ đó.
3. Đọc Lý Do, Sau Đó Kiểm Tra Lại
FULFILLMENT_ISSUE nghĩa là khách hàng nói rằng họ chưa bao giờ nhận được thứ mình đã trả tiền. Hãy kiểm tra nhật ký giao hàng trước, vì nếu họ đúng, bạn sẽ muốn khoản hoàn tiền này được chấp thuận.
UNINTENDED_PURCHASE thường là do trẻ em thao tác hoặc chạm nhầm.
UNSATISFIED_WITH_PURCHASE là trường hợp dữ liệu sử dụng của bạn thực sự có trọng lượng, vì câu "tôi không thích nó" sẽ có ý nghĩa khác hẳn khi mới dùng 2 phần trăm so với khi đã dùng hết 100.
4. Chọn Tùy Chọn Ưu Tiên
Apple chấp nhận các giá trị GRANT_FULL, GRANT_PRORATED hoặc DECLINE. Hãy chọn giá trị mà dữ liệu của bạn có thể chứng minh. Đây chỉ là một tùy chọn ưu tiên, và Apple đã từng chấp thuận hoàn tiền trong nhiều trường hợp mà nhà phát triển đề nghị từ chối.
5. Gửi Phản Hồi
Gọi đến Send Consumption Information endpoint này. Nội dung yêu cầu hiện tại có năm trường: customerConsented, deliveryStatus, consumptionPercentage, sampleContentProvided và refundPreference.
Mức tiêu thụ được tính theo milliunit, điều này thường khiến nhiều người nhầm lẫn: 100000 nghĩa là đã sử dụng hết, 45200 nghĩa là 45.2 phần trăm.
Và customerConsented phải là true, vì vậy quyền chia sẻ dữ liệu sử dụng cần được đưa vào điều khoản của bạn từ rất lâu trước khi yêu cầu đầu tiên xuất hiện.
6. Hành Động Theo Kết Quả
REFUND nghĩa là bạn cần thu hồi nội dung hoặc quyền sử dụng, tốt nhất là trong vòng một giờ. REFUND_DECLINED nghĩa là không có gì thay đổi. Dù kết quả thế nào, hãy ghi lại kết quả đó vào hồ sơ vụ việc.
Giả sử ai đó mua một gói 500 coin lúc 11 giờ đêm, tiêu hết 470 coin trong đêm, rồi gửi yêu cầu theo diện UNSATISFIED_WITH_PURCHASE vào sáng hôm sau. Đã giao hàng, đã sử dụng 94 phần trăm, không có dùng thử, tùy chọn ưu tiên là DECLINE. Đó là một phản hồi đầy đủ cho yêu cầu hoàn tiền của Apple. Nó không cần phải là một bài luận.
Nhà Phát Triển Cần Kiểm Tra Thông Tin Gì Trước Khi Phản Hồi?
Năm điều, phần lớn trong số đó lẽ ra đã có sẵn trong cơ sở dữ liệu của bạn.
Hồ Sơ Giao Dịch Mua
Ngày mua, sản phẩm, giá, và việc tài khoản này đã từng mua hàng của bạn trước đây hay chưa. Nếu hồ sơ của bạn còn sơ sài, endpoint Get Transaction History của Apple sẽ trả về mọi giao dịch mà khách hàng này đã thực hiện trong ứng dụng của bạn, chỉ cần cung cấp một transaction ID của họ làm điểm khởi đầu.
Giao Hàng
Máy chủ của bạn có thực sự đã giao coin, mở khóa tính năng, hay kích hoạt gói đăng ký hay không, và vào thời điểm nào? Nếu thao tác đó thất bại, deliveryStatus của bạn sẽ là một trong các giá trị UNDELIVERED và khoản hoàn tiền này là xứng đáng. Đừng cố tranh cãi với chính nhật ký của mình.
Mức Độ Sử Dụng Kể Từ Đó
Số phiên sử dụng, số chương đã mở, số coin đã tiêu, hay bất cứ điều gì mà "sử dụng" có nghĩa đối với sản phẩm của bạn. Apple chỉ cần một con số phần trăm, nhưng bạn không thể đưa ra một con số có thể bảo vệ được nếu không có các sự kiện dữ liệu làm nền tảng cho nó.
Khách Hàng Có Được Trải Nghiệm Trước Hay Không
Tức là một đợt dùng thử miễn phí, một chương xem trước, hoặc một gói miễn phí. Apple hỏi trực tiếp điều này, và nếu câu trả lời là có, nó sẽ làm suy yếu lý do "tôi không biết mình đang mua gì".
Tài Khoản Trong Hệ Thống Của Bạn
Tài khoản đó đã tồn tại bao lâu, bạn đã từng hoàn tiền cho tài khoản này trước đây hay chưa, có ticket hỗ trợ nào đang mở hay không. Apple chỉ thấy được nửa lịch sử phía App Store. Còn bạn thấy được nửa còn lại.
Tất cả những điều này đều phụ thuộc vào việc gắn transaction ID của Apple với một người dùng trong hệ thống của bạn, và đó chính là lý do appAccountToken tồn tại. Đây là khoảng trống phổ biến nhất mà chúng tôi thường gặp, và chúng tôi đã viết về lý do vì sao appAccountToken quan trọng đối với việc bảo vệ trước yêu cầu hoàn tiền nếu bạn muốn biết chi tiết cách thiết lập.
Những Lỗi Thường Gặp Của Nhà Phát Triển Khi Xử Lý Yêu Cầu Hoàn Tiền Của Apple
Thông Báo Không Bao Giờ Đến
Không có URL máy chủ nào được thiết lập trong App Store Connect, hoặc có nhưng lại trỏ đến một máy chủ staging mà ai đó đã ngừng sử dụng từ tháng 3. Apple vẫn tiếp tục gửi thông báo. Nhưng không có ai nhận.
Phản Hồi Trễ
Mười hai giờ nghe có vẻ là nhiều thời gian, cho đến khi một yêu cầu đến vào lúc 2 giờ sáng Chủ nhật, trong khi người phụ trách đang ngủ, rồi sau đó đi ăn brunch, rồi mơ hồ nhận ra có một tin nhắn Slack. Một quy trình được xây dựng xoay quanh giờ hành chính chắc chắn sẽ bỏ lỡ một phần không nhỏ các yêu cầu.
Không Có Gì Để Trình Bày
Thông báo đến nhưng không có nhật ký giao hàng, không có sự kiện sử dụng, không có appAccountToken. Apple sẽ quyết định dựa trên lời khai của khách hàng. Sai lầm đó thực ra đã xảy ra từ nhiều tháng trước, ngay tại bước thanh toán.
Yêu Cầu Apple Từ Chối Mọi Trường Hợp
Chúng tôi từng thấy những hệ thống gửi DECLINE cho mọi yêu cầu, kể cả những trường hợp mà chính nhật ký của nhà phát triển cho thấy việc giao hàng đã thất bại. Apple có thể nhận ra kiểu mẫu này, và điều đó làm giảm độ tin cậy của bạn trong những yêu cầu mà bạn thực sự có lý lẽ chính đáng.
Quên Thu Hồi Sau Khi Hoàn Tiền Được Chấp Thuận
Đây là lỗi khiến bạn thiệt hại gấp đôi. Tiền đã mất mà khách hàng vẫn còn giữ nội dung, và một số người sẽ nhận ra điều đó.
Kiểm Thử Trên Môi Trường Production
Apple cung cấp cho bạn một endpoint thông báo thử nghiệm và các yêu cầu hoàn tiền trong môi trường sandbox. Hãy sử dụng cả hai trước khi yêu cầu thực sự đầu tiên xuất hiện vào một giờ bất tiện.
Quản Lý Hoàn Tiền Của Apple: Thủ Công So Với Tự Động
Quản lý hoàn tiền của Apple bao gồm mọi việc diễn ra trong khung thời gian 12 giờ đó: nhận yêu cầu, tìm dữ liệu, chọn tùy chọn ưu tiên, gửi phản hồi, ghi lại kết quả, và thu hồi khi cần thiết.
Thủ Công
Làm thủ công nghĩa là có một người có quyền truy cập nhật ký và nhận cảnh báo. Cách này hoạt động tốt khi chỉ có vài yêu cầu mỗi tháng, miễn là người đó không bao giờ nghỉ phép một tuần.
Khi số lượng đạt khoảng hai mươi yêu cầu mỗi tuần, mọi thứ bắt đầu trở nên quá tải. Ở mức một trăm, đó đã trở thành một công việc toàn thời gian, và chẳng ai muốn nhận công việc đó.
Tự Động
Khi được tự động hóa, việc tra cứu và phản hồi sẽ chạy dựa trên các quy tắc bạn chỉ cần viết một lần. Một vật phẩm tiêu hao đã dùng hết sẽ nhận DECLINE, một FULFILLMENT_ISSUE kèm giao hàng thất bại sẽ nhận GRANT_FULL, và bất kỳ trường hợp bất thường nào sẽ được gắn cờ để con người xem xét.
Phản hồi được gửi đi chỉ trong vài phút, vào lúc 2 giờ sáng cũng đáng tin cậy như vào lúc 2 giờ chiều.
Điểm mấu chốt: tự động hóa chỉ tốt bằng chất lượng dữ liệu nền tảng của nó. Dữ liệu giao hàng và sử dụng thiếu sót chỉ khiến bạn gửi đi kết quả "không xác định" nhanh hơn mà thôi.
Khi Nào Nhà Phát Triển Nên Cân Nhắc Sử Dụng Phần Mềm Quản Lý Hoàn Tiền Của Apple?
Thành thật mà nói, không phải ngay từ đầu. Hai hoặc ba yêu cầu mỗi tháng hoàn toàn có thể xử lý bằng một checklist và một cảnh báo rõ ràng, và việc tự tay xử lý vài trường hợp sẽ dạy cho bạn rất nhiều điều.
Việc này bắt đầu hợp lý khi số lượng yêu cầu đến nhanh hơn khả năng một người có thể xử lý trong khung thời gian cho phép, hoặc vào những giờ mà không ai còn thức. Nó cũng hữu ích khi bạn vận hành nhiều ứng dụng, hoặc cả Apple và Google Play song song, và muốn có một danh sách duy nhất thay vì ba danh sách riêng lẻ.
Phần mềm quản lý hoàn tiền của Apple sẽ chứng minh giá trị của nó ngay khi quy trình thủ công bắt đầu bỏ sót yêu cầu. Bạn sẽ biết khi nào điều đó xảy ra: đó là tuần mà bạn bỏ lỡ ba yêu cầu liên tiếp và chỉ phát hiện ra qua khoản thanh toán.
Phần Mềm Bảo Vệ Trước Yêu Cầu Hoàn Tiền Của Apple: Nhà Phát Triển Nên Tìm Gì?
Nếu bạn đang so sánh các phần mềm bảo vệ trước yêu cầu hoàn tiền của Apple, hãy bắt đầu từ nền tảng kỹ thuật: phần mềm đó có tự nhận CONSUMPTION_REQUEST và phản hồi các trường hợp thông thường mà không cần con người can thiệp hay không? Tốc độ phản hồi nhanh đến mức nào, kể cả vào ban đêm và cuối tuần? Câu trả lời đúng phải là "vài phút", và hãy yêu cầu xem timestamp để kiểm chứng.
Bằng Chứng
Phần mềm đó có thể lấy hoặc nhận dữ liệu giao hàng và sử dụng của bạn hay không, hay chỉ đơn giản là phản hồi lại thông báo kèm theo một tùy chọn ưu tiên? Loại thứ hai không có nhiều giá trị.
Nó cũng nên được xây dựng dựa trên App Store Server API và Server Notifications V2, chứ không phải bằng cách phân tích email.
Khả Năng Theo Dõi
Thông báo khi có yêu cầu mới đến, khi phản hồi được gửi đi, và khi Apple đưa ra quyết định.
Mỗi yêu cầu được quản lý như một vụ việc riêng, với phản hồi và kết quả được lưu tại một nơi duy nhất.
Báo cáo về tỷ lệ hoàn tiền, tỷ lệ thắng và các lý do, theo từng ứng dụng và từng sản phẩm.
Một nhật ký kiểm toán (audit trail) cho biết ai hoặc cái gì đã gửi phản hồi nào, và vào lúc nào.
Các quy tắc do bạn tự kiểm soát, để việc thay đổi logic không cần phải triển khai (deploy) lại.
Giá Cả
Cách tính giá cũng khác nhau: phí cố định hàng tháng, phí theo từng yêu cầu, và mô hình tính theo phần trăm giá trị thu hồi được — mỗi mô hình phù hợp với một mức khối lượng khác nhau.
Có một điều mà không phần mềm nào làm được: ngăn yêu cầu hoàn tiền xảy ra, hoặc đảm bảo kết quả quyết định của Apple. Ai nói ngược lại thì đang cố bán cho bạn một thứ gì đó.
Thực Hành Tốt Nhất Khi Phản Hồi Yêu Cầu Hoàn Tiền Của Apple
Hãy ghim danh sách này ngay cạnh lịch trực.
Đăng ký một URL máy chủ production cho App Store Server Notifications V2, và thiết lập cảnh báo khi nó ngừng hoạt động.
Thiết lập appAccountToken cho mọi giao dịch mua. Không bỏ sót giao dịch nào.
Ghi nhật ký giao hàng kèm timestamp và kết quả, cùng với một vài sự kiện sử dụng cho biết "họ đã thực sự dùng nó".
Đưa điều khoản đồng ý chia sẻ dữ liệu sử dụng vào điều khoản dịch vụ của bạn ngay từ bây giờ.
Phản hồi mọi yêu cầu trong vòng 12 giờ, kể cả những trường hợp mà phản hồi là "chấp thuận hoàn tiền".
Chỉ yêu cầu DECLINE khi dữ liệu của bạn thực sự chứng minh được điều đó. Apple sẽ nhận ra các kiểu mẫu lặp lại.
Thu hồi quyền truy cập ngay trong ngày với mọi thông báo REFUND.
Mỗi tháng một lần, hãy kiểm tra xem bạn đã thực sự phản hồi bao nhiêu phần trăm số yêu cầu. Con số đó ảnh hưởng đến tỷ lệ hoàn tiền của bạn nhiều hơn bất kỳ yếu tố nào khác.
Phần Mềm Quản Lý Hoàn Tiền Của Apple Có Đáng Sử Dụng Không?
Ở khối lượng thấp, có lẽ là không. Nhưng khi số lượng yêu cầu vượt quá khả năng mà một người có thể phản hồi một cách đáng tin cậy, hoặc bắt đầu xuất hiện ngoài giờ làm việc, thì phần mềm phản hồi tự động thường sẽ tự bù đắp được chi phí của chính nó.
Nếu chỉ rút ra được một thói quen từ tất cả những điều này, đó là: hãy phản hồi mọi yêu cầu, bằng dữ liệu thật, trước khi hết giờ. Dipsea, một ứng dụng âm thanh theo mô hình đăng ký, đã giảm tỷ lệ hoàn tiền từ 3 phần trăm xuống còn 1.9 phần trăm chỉ trong khoảng hai tuần sau khi bắt đầu phản hồi, và chưa từng một lần yêu cầu Apple từ chối. Những ứng dụng chọn cách im lặng sẽ không bao giờ biết được mình đã có thể giữ lại được bao nhiêu.
Câu hỏi thường gặp
Đây là việc khách hàng yêu cầu Apple hoàn tiền cho một ứng dụng hoặc giao dịch mua trong ứng dụng, thường thông qua reportaproblem.apple.com. Apple thông báo cho khách hàng rằng họ sẽ nhận được phản hồi trong vòng 24 đến 48 giờ. Đối với các vật phẩm tiêu hao và gói đăng ký, Apple sẽ yêu cầu nhà phát triển cung cấp thông tin trước.
Xác minh thông báo, tìm giao dịch mua trong hồ sơ của bạn, kiểm tra tình trạng giao hàng và mức độ sử dụng, chọn một tùy chọn ưu tiên, rồi gọi đến endpoint Send Consumption Information của Apple trong vòng 12 giờ. Sau đó, hành động theo quyết định cuối cùng của Apple.
Không. Bạn có thể cho Apple biết rằng bạn muốn yêu cầu đó bị từ chối và gửi dữ liệu để chứng minh điều đó. Nhưng Apple vẫn là bên đưa ra quyết định cuối cùng, và Apple hoàn toàn có thể (và thực tế vẫn) chấp nhận hoàn tiền ngay cả khi nhà phát triển đã đề nghị từ chối.
Năm thông tin: khách hàng đã đồng ý chia sẻ dữ liệu hay chưa, giao dịch mua đã được giao hay chưa, mức độ đã sử dụng là bao nhiêu, khách hàng có từng dùng thử hoặc trải nghiệm miễn phí hay không, và tùy chọn ưu tiên hoàn tiền của bạn. Đó là toàn bộ nội dung yêu cầu (request body) hiện tại.
Mười hai giờ kể từ khi nhận được CONSUMPTION_REQUEST. Apple yêu cầu bạn phản hồi trong khoảng thời gian đó nếu muốn dữ liệu của mình được đưa vào quá trình ra quyết định.



