Chuyển đến nội dung
App Store & Play Store Development

Tự động hóa hoàn tiền Apple: Cách tự động phản hồi CONSUMPTION_REQUEST

Khi khách hàng yêu cầu hoàn tiền trên Apple, bạn có khoảng 12 giờ để phản hồi một CONSUMPTION_REQUEST. Đây là cách quy trình hoạt động, dữ liệu cần gửi, và cách tự động hóa nó.

6 min read
Tự động hóa hoàn tiền Apple: Cách tự động phản hồi CONSUMPTION_REQUEST

Trả lời nhanh: Khi khách hàng yêu cầu Apple hoàn tiền cho một giao dịch mua trong ứng dụng hoặc gói đăng ký, App Store sẽ gửi đến server của bạn một thông báo CONSUMPTION_REQUEST và cho bạn khoảng 12 giờ để phản hồi bằng dữ liệu consumption thông qua endpoint Send Consumption Information. Apple sẽ cân nhắc dữ liệu đó khi đưa ra quyết định. Nếu bạn không phản hồi kịp thời, Apple sẽ tự quyết định mà không có ý kiến của bạn và các yêu cầu hoàn tiền không chính đáng thường mặc định được chấp thuận. Việc tự động hóa phản hồi này đảm bảo mọi yêu cầu đều được trả lời trong thời hạn, mọi lúc.

Phiên bản ngắn gọn

Apple sở hữu hệ thống thanh toán. Khi ai đó mua một gói đăng ký hoặc giao dịch mua trong ứng dụng của bạn, Apple thu tiền, giữ lại phần chiết khấu, và xử lý việc hoàn tiền. Trong nhiều năm, các nhà phát triển hoàn toàn không có tiếng nói nào trong các quyết định hoàn tiền.

Điều đó đã thay đổi. Giờ đây Apple cho phép bạn gửi consumption information bằng chứng có cấu trúc về cách khách hàng đã sử dụng thứ họ mua và đưa yếu tố đó vào quyết định hoàn tiền. Bạn không được tự mình phê duyệt hay từ chối khoản hoàn tiền; Apple vẫn là bên đưa ra quyết định cuối cùng. Nhưng im lặng thì Apple chẳng có gì để dựa vào, còn một phản hồi được xây dựng tốt sẽ cung cấp bối cảnh cho quyết định đó.

Vấn đề nằm ở thời điểm và tính nhất quán. Thời hạn này rất ngắn, mở ra vào những giờ không thể đoán trước, và việc thực hiện thủ công ở quy mô thực tế là điều bất khả thi. Đó chính là vấn đề mà tự động hóa hoàn tiền apple giải quyết.

Quy trình hoàn tiền của Apple thực sự hoạt động như thế nào

Đây là toàn bộ trình tự, từ đầu đến cuối:

  1. Khách hàng yêu cầu hoàn tiền. Họ truy cập reportaproblem.apple.com, chọn giao dịch mua, chọn lý do, và gửi yêu cầu.

  2. Apple thông báo cho server của bạn. Đối với các giao dịch mua đủ điều kiện, App Store sẽ gửi một thông báo CONSUMPTION_REQUEST thông qua App Store Server Notifications V2. Payload chứa dữ liệu giao dịch đã được ký (signed) để xác định giao dịch mua đó. Chính những app store server notifications này kích hoạt quy trình tự động.

  3. Bạn phản hồi bằng dữ liệu consumption. Bạn gọi Send Consumption Information với original transaction ID và một body ConsumptionRequest có cấu trúc mô tả việc giao hàng, mức sử dụng, sự đồng ý, và refund preference của bạn. Endpoint send consumption information là bước API then chốt trong quy trình này.

  4. Apple ra quyết định. Hệ thống quyết định hoàn tiền của Apple sẽ cân nhắc dữ liệu của bạn cùng với lịch sử của khách hàng và các yếu tố khác, sau đó đưa ra quyết định.

  5. Bạn được thông báo về kết quả. Thông báo REFUND nghĩa là khoản hoàn tiền đã được chấp thuận; thông báo REFUND_DECLINED (đối với các yêu cầu được khởi tạo qua StoreKit API) nghĩa là không được chấp thuận.

CONSUMPTION_REQUEST chứa gì và bạn cần gửi lại những gì

Bản thân thông báo mang theo thông tin giao dịch đã ký và lý do mà khách hàng đã nêu (consumptionRequestReason). Phần phản hồi của bạn mới là nơi công việc thực sự diễn ra. Apple định nghĩa một ConsumptionRequest có cấu trúc với các trường bao gồm:

Trường

Trường này cho Apple biết điều gì

customerConsented

Liệu khách hàng có đồng ý chia sẻ dữ liệu này hay không. Phải là true, nếu không Apple sẽ từ chối việc gửi.

consumptionStatus

Nội dung đã mua chưa được sử dụng, đã sử dụng một phần, hay đã sử dụng toàn bộ.

deliveryStatus

Giá trị hoặc dịch vụ trong ứng dụng có thực sự được giao hay không.

accountTenure

Khách hàng đã có tài khoản với bạn trong bao lâu.

playTime

Khách hàng đã dành bao nhiêu thời gian trong ứng dụng.

lifetimeDollarsPurchased

Tổng số tiền khách hàng đã chi tiêu trên các ứng dụng của bạn.

lifetimeDollarsRefunded

Tổng số tiền trước đây đã được hoàn lại cho khách hàng.

sampleContentProvided

Khách hàng có thể dùng thử nội dung trước khi mua hay không.

userStatus

Trạng thái hiện tại của tài khoản khách hàng (đang hoạt động, bị đình chỉ, v.v.).

refundPreference

Đề xuất của bạn gửi cho Apple: undeclared, prefer grant, hoặc prefer decline.


Mỗi trường là một tín hiệu. Nếu để trống, đó là bối cảnh mà Apple sẽ không bao giờ nhận được. Chúng tôi phân tích chi tiết từng trường và các giá trị được chấp nhận trong CONSUMPTION_REQUEST Là Gì? Phân Tích Chi Tiết Từng Trường Dữ Liệu. Các nhà phát triển đang đánh giá một apple refund api cũng nên hiểu cách các trường này khớp vào toàn bộ quy trình hoàn tiền.

Khung thời gian 12 giờ

Bạn có khoảng 12 giờ để phản hồi một CONSUMPTION_REQUEST trong môi trường production. Nếu bỏ lỡ, bạn sẽ mất cơ hội cung cấp ý kiến; Apple sẽ quyết định dựa trên những gì đã có.

Vấn đề không nằm ở độ dài của khung thời gian mà nằm ở thời điểm nó mở ra. Các yêu cầu hoàn tiền không chờ đến giờ hành chính. Khung thời gian này có thể mở ra vào ban đêm, cuối tuần, hoặc trong kỳ nghỉ lễ, và một hàng đợi xét duyệt thủ công không thể bao quát được điều đó nếu không có ai trực liên tục. Đây là lý do phổ biến nhất khiến các nhà phát triển mất đi những khoản hoàn tiền lẽ ra họ có thể tranh chấp: không phải vì phản hồi kém, mà vì không hề có phản hồi nào. Chúng tôi phân tích sâu hơn về điều này trong Khung Thời Gian 12 Giờ: Vì Sao Hầu Hết Nhà Phát Triển Mất Hoàn Tiền Theo Mặc Định.

Yêu cầu về sự đồng ý đừng bỏ qua điều này

Đây là phần khiến hầu như ai cũng vấp phải, và đây là vấn đề pháp lý, không chỉ là vấn đề kỹ thuật.

CONSUMPTION_REQUEST của Apple không cho bạn biết liệu khách hàng có đồng ý chia sẻ dữ liệu của họ hay không. Đây là điều được thiết kế có chủ đích Apple kỳ vọng ứng dụng của bạn, chứ không phải server của bạn, sẽ thu thập và xác nhận sự đồng ý trước khi bất kỳ dữ liệu consumption nào được gửi đi. Bạn phải đặt customerConsented thành true trong lệnh gọi API của mình, và bạn, với tư cách nhà phát triển, là người duy nhất chịu trách nhiệm về việc đã thu thập sự đồng ý hợp lệ, bởi vì chính bạn là người chia sẻ dữ liệu mà bạn đã thu thập từ người dùng.

Làm sai điều này thì bạn không chỉ đối mặt với nguy cơ bị từ chối khi gửi dữ liệu bạn còn đối mặt với nguy cơ vi phạm tuân thủ GDPR hoặc DPDP. Hãy xử lý sự đồng ý đúng cách trong điều khoản và quy trình mua hàng của ứng dụng trước khi tự động hóa bất cứ điều gì. Chúng tôi trình bày chính xác nơi và cách thực hiện trong Sự Đồng Ý Của Khách Hàng & Consumption API: Apple Thực Sự Yêu Cầu Gì.

Việc tự động hóa điều này thực sự đòi hỏi những gì

Trên lý thuyết, việc tự động hóa phản hồi nghe có vẻ như một dự án cuối tuần: bắt lấy thông báo, điền vào các trường, gọi endpoint. Nhưng trong môi trường production, đó là một hệ thống hạ tầng thường trực và việc hiểu rõ những gì thực sự liên quan chính là ranh giới giữa "chúng ta sẽ xây dựng nó" và "chúng ta sẽ bỏ qua nó".

Một hệ thống phản hồi nội bộ đáng tin cậy phải nhận và xác minh các thông báo đã ký của Apple, lấy dữ liệu sử dụng và thanh toán chính xác, cập nhật đến từng khoảnh khắc cho mỗi khách hàng ngay khi yêu cầu đến, ánh xạ dữ liệu đó vào đúng các giá trị ConsumptionRequest của Apple, và gửi đi trong khung thời gian khoảng 12 giờ vào bất kỳ giờ nào, mà không cần ai theo dõi. Ngoài ra, nó còn cần cơ chế retry an toàn về mặt thời hạn, xử lý lỗi, ghi log có thể kiểm toán, giám sát để bạn biết khi nào hệ thống gặp sự cố, và bảo trì liên tục mỗi khi Apple thay đổi payload hoặc các trường dữ liệu. Không điều nào trong số đó là sản phẩm của bạn. Tất cả đều là hạ tầng mà bạn sẽ phải sở hữu vô thời hạn cho một quy trình chẳng liên quan gì đến những gì ứng dụng của bạn làm. (Chúng tôi phân tích sâu hơn về lớp thông báo trong Thiết Lập App Store Server Notifications V2.)

Đó là phép tính mà hầu hết các nhóm cuối cùng đều đưa ra: cơ chế vận hành thì có thể tìm hiểu được, nhưng việc xây dựng và duy trì một hệ thống phản hồi tuân thủ, an toàn về thời hạn là một chi phí thường trực mà không mang lại lợi ích gì thêm cho chính ứng dụng. Đây chính xác là loại công việc hạ tầng không tạo khác biệt mà một dịch vụ được quản lý sinh ra để giải quyết.

Đó là những gì RefundSensor làm. Nó kết nối vào thiết lập App Store Connect của bạn chỉ bằng một webhook URL không cần SDK, không cần thay đổi code, không cần gửi lại ứng dụng để duyệt sau đó tự động trả lời mọi CONSUMPTION_REQUEST trong khung thời gian của Apple, ánh xạ các trường từ dữ liệu của bạn, xử lý retry và giám sát, luôn cập nhật theo các thay đổi của Apple, và ghi lại mọi kết quả trong một dashboard duy nhất. Bạn nhận được kết quả của một hệ thống phản hồi được xây dựng tốt mà không cần tự xây dựng hay duy trì nó. Đối với các nhóm đang tìm kiếm phần mềm tự động hóa hoàn tiền Apple, đây là một giải pháp thay thế được quản lý cho việc tự duy trì quy trình này nội bộ.

Việc phản hồi có thực sự giúp giảm số lượng hoàn tiền không?

Có, mặc dù kết quả sẽ khác nhau và Apple luôn là bên quyết định. Việc gửi dữ liệu consumption chính xác cung cấp cho hệ thống của Apple nhiều bối cảnh hơn, và các nhà phát triển phản hồi một cách nhất quán nhìn chung sẽ thấy ít khoản hoàn tiền được chấp thuận hơn so với những nhà phát triển bỏ mặc các yêu cầu không được trả lời. Việc chọn đề xuất "prefer decline", khi bằng chứng của bạn thực sự ủng hộ điều đó, là một yếu tố đầu vào nữa mà Apple xem xét. Điều này có thể đặc biệt quan trọng khi quản lý quy trình hoàn tiền subscription ở quy mô lớn.

Tự động hóa có thể và không thể làm được gì

Hãy thành thật với bản thân về giới hạn của nó:

  • Nó không thể đảm bảo rằng bất kỳ khoản hoàn tiền cụ thể nào sẽ bị từ chối. Apple luôn là bên đưa ra quyết định cuối cùng, mọi lúc.

  • Nó không thể tranh chấp các khoản hoàn tiền không bao giờ tạo ra CONSUMPTION_REQUEST không phải khoản hoàn tiền nào cũng tạo ra thông báo này.

  • Nó có thể đảm bảo mọi yêu cầu đủ điều kiện đều được trả lời trong khung thời gian, với dữ liệu nhất quán và chính xác, để bạn không bao giờ mất một khoản hoàn tiền chỉ vì không ai nhìn thấy thông báo.

Điểm cuối cùng đó chính là nơi tạo ra giá trị thực sự. Bạn không phải đang lấn át quyết định của Apple bạn chỉ đang đảm bảo rằng mình luôn có cơ hội được lên tiếng.

Để biết chi tiết cụ thể, hãy xem các tài liệu chính thức của Apple là nguồn tham khảo cuối cùng:

Ngành công nghiệp này đã mất 15 năm để các nhà phát triển có được tiếng nói trong vấn đề hoàn tiền. Hãy tận dụng nó mọi lúc. RefundSensor tự động phản hồi các thông báo CONSUMPTION_REQUEST của Apple trong khung thời gian quy định và theo dõi mọi kết quả, cho cả Apple và Google Play.Bắt đầu miễn phí

Câu hỏi thường gặp

Đây là một App Store Server Notification mà Apple gửi đến server của bạn khi khách hàng yêu cầu hoàn tiền cho một giao dịch mua trong ứng dụng hoặc gói đăng ký đủ điều kiện. Đây là tín hiệu để bạn phản hồi bằng dữ liệu consumption mà Apple sẽ cân nhắc khi đưa ra quyết định hoàn tiền.

Khoảng 12 giờ trong môi trường production. Nếu bạn không phản hồi kịp thời, Apple sẽ tự quyết định mà không có ý kiến của bạn, và các yêu cầu không được phản hồi thường mặc định được chấp thuận.

Không. Bạn có thể gửi một refundPreference đề xuất từ chối, nhưng Apple luôn là bên đưa ra quyết định cuối cùng. Tự động hóa giúp cải thiện cơ hội của bạn bằng cách đảm bảo dữ liệu chính xác luôn được gửi đi, chứ không cho bạn quyền phủ quyết.

Có. Bạn phải thu thập sự đồng ý hợp lệ trong ứng dụng của mình và đặt customerConsented thành true. Apple không thu thập điều này thay bạn, và việc gửi dữ liệu khi chưa có sự đồng ý sẽ tạo ra rủi ro về tuân thủ quyền riêng tư mà bạn phải chịu trách nhiệm.

Không. Việc phản hồi CONSUMPTION_REQUEST diễn ra ở phía server thông qua App Store Server Notifications và Consumption API. Với RefundSensor, bạn chỉ cần dán một webhook URL vào App Store Connect không cần SDK, không cần thay đổi code, không cần gửi lại ứng dụng để duyệt.

Apple sẽ tiếp tục xử lý mà không có dữ liệu của bạn. Bạn mất đi cơ hội duy nhất để cung cấp bối cảnh, và các yêu cầu hoàn tiền kể cả những yêu cầu không chính đáng sẽ có nhiều khả năng được chấp thuận hơn.

#apple refund automation#consumption request#send consumption information#app store server notifications#apple refund api#subscription refund
Refund SensorRefund Sensor TeamRefund defense for App Store and Google Play developers