Hỏi hầu hết các đội ngũ rằng họ có theo dõi hoàn tiền của Apple không, họ sẽ nói có. Hỏi họ lưu những gì thì hóa ra chỉ là một dòng cho mỗi lần hoàn tiền, được ghi lại sau khi mọi việc đã xong, kèm ngày và số tiền.
Đó là nhật ký, không phải theo dõi. Nó cho bạn biết một khoản hoàn tiền đã xảy ra. Nó không cho bạn biết Apple có hỏi bạn điều gì trong quá trình đó không, có ai trả lời không, câu trả lời có được gửi thành công không, hay quyền truy cập của khách hàng đó có khớp với thực tế không.
Khoảng trống này quan trọng vì một số phần của quy trình có thời hạn. Apple cho bạn khung thời gian 12 giờ cho một bước, và khi nó trôi qua thì không thể mở lại. Nếu bạn muốn nhìn bức tranh tổng thể thay vì cơ chế theo dõi, hướng dẫn của chúng tôi về cách quản lý hoàn tiền App Store mà không mất doanh thu ứng dụng di động sẽ đề cập đến điều đó. Bài này tập trung vào việc cần ghi lại những gì, và khi nào cần hành động.
Điểm chính
• Apple đưa ra quyết định hoàn tiền cuối cùng. Nhà phát triển không phê duyệt hay từ chối yêu cầu.
• Một yêu cầu hoàn tiền đi qua nhiều trạng thái riêng biệt. Chỉ lưu trạng thái cuối cùng sẽ làm mất phần lớn thông tin hữu ích.
• Một số quy trình hoàn tiền cho bạn cơ hội gửi thông tin tiêu thụ (consumption information), với sự đồng ý của khách hàng, trong vòng 12 giờ.
• Gửi phản hồi và phản hồi được chấp nhận là hai việc khác nhau. Hãy theo dõi kết quả, không phải nỗ lực.
• Kết quả hoàn tiền phải đến được logic cấp quyền (entitlement) và hồ sơ doanh thu của bạn, nếu không việc theo dõi vẫn chưa hoàn tất.
• Tự động hóa chủ yếu giúp tránh bỏ lỡ sự kiện và hết hạn khung thời gian. Nó không ảnh hưởng đến quyết định của Apple.
Theo dõi yêu cầu hoàn tiền của Apple là gì?
Theo dõi yêu cầu hoàn tiền của Apple nghĩa là bám theo một yêu cầu hoàn tiền qua mọi trạng thái nó đi qua ở phía bạn, từ thông báo đầu tiên cho đến lần cập nhật entitlement khép lại nó. Đó không phải bản ghi các khoản hoàn tiền. Đó là bản ghi của một quy trình.
Các trạng thái này quan trọng vì chúng thực sự là những sự kiện khác nhau, và các đội ngũ thường gộp chúng thành một:
Trạng thái | Điều nó cho bạn biết |
Đã nhận yêu cầu | Một yêu cầu hoàn tiền tồn tại và Apple đã thông báo cho bạn |
Đang mở cơ hội phản hồi | Apple đang yêu cầu thông tin, và đồng hồ đang chạy |
Đã gửi phản hồi | Bạn đã gửi lại thông tin |
Phản hồi được chấp nhận | Apple đã thực sự tiếp nhận — không giống với việc bạn đã gửi |
Hoàn tiền được chấp thuận | Apple đã chấp thuận hoàn tiền |
Hoàn tiền bị từ chối | Apple không chấp thuận |
Hoàn tiền bị đảo ngược | Apple hủy bỏ một khoản hoàn tiền đã chấp thuận trước đó |
Đã cập nhật entitlement | Ứng dụng của bạn giờ phản ánh đúng kết quả |
Chỉ dòng cuối cùng liên quan đến sản phẩm của bạn. Mọi thứ phía trên quyết định bạn có làm đúng dòng đó hay không. Một đội chỉ lưu “hoàn tiền được chấp thuận” không thể giải thích vì sao khách hàng vẫn còn quyền truy cập, hay có ai đã trả lời khi Apple hỏi không.
Nhà phát triển theo dõi yêu cầu hoàn tiền của Apple như thế nào?
Nhà phát triển theo dõi hoạt động hoàn tiền của Apple thông qua hệ thống thông báo phía server của Apple và hồ sơ giao dịch của chính họ. Đường đi cụ thể tùy vào loại sự kiện và việc Apple có yêu cầu thông tin hay không. Sự kiện được gửi đến URL bạn cấu hình qua App Store Server Notifications, dưới dạng payload có chữ ký mà backend của bạn xác minh và xử lý.
Có hai loại sự kiện liên quan đến hoàn tiền đáng để tách riêng trong handler của bạn. Một loại yêu cầu bạn cung cấp điều gì đó. Các loại còn lại cho bạn biết điều gì đã xảy ra.
Loại yêu cầu là thông báo Apple CONSUMPTION_REQUEST. Nó có nghĩa Apple muốn thông tin về một giao dịch mua trong khi đánh giá yêu cầu hoàn tiền. Đó không phải là hoàn tiền, và nên viết handler sao cho không giả định thông báo này luôn xuất hiện.
Loại thông báo kết quả bao gồm: REFUND khi được chấp thuận, REFUND_DECLINED khi bị từ chối, và REFUND_REVERSED khi Apple hủy bỏ một khoản hoàn tiền đã chấp thuận trước đó. Loại thứ ba là loại hầu hết handler bỏ quên.
Bên dưới cả hai là kho giao dịch của chính bạn, thứ giúp mọi dữ liệu trên trở nên có nghĩa. Thông báo tham chiếu đến các định danh của Apple, nên nếu không có hồ sơ mua hàng để đối chiếu, bạn có một sự kiện không thể gắn vào bất cứ thứ gì.
Nhà phát triển nên theo dõi những thông tin gì?
Hãy tách theo nguồn thông tin, vì chỉ một phía trong số này là có tính xác thực.
Từ Apple, trong payload giao dịch: transaction identifier và original transaction identifier, product identifier, ngày mua, và với các giao dịch được hoàn tiền là ngày thu hồi (revocation date) và lý do thu hồi (revocation reason). Trường lý do phân biệt các khoản hoàn tiền do sự cố trong ứng dụng với các khoản hoàn tiền vì lý do khác, hữu ích hơn vẻ ngoài của nó.
Account token nằm ở giữa. Bạn tạo và gắn nó khi mua hàng, Apple trả lại trong payload, và đó là thứ cho phép bạn đi từ giao dịch ngược về một người dùng cụ thể.
Mọi thứ còn lại do bạn duy trì: định danh người dùng nội bộ, loại thông báo và thời điểm nhận, có cần phản hồi không, bạn đã gửi gì và nhận lại gì, trạng thái gói đăng ký lúc đó, trạng thái entitlement sau khi xử lý, và kỳ báo cáo mà khoản hoàn tiền rơi vào.
Hai mốc thời gian âm thầm là những trường hữu ích nhất trong bộ này. Khoảng cách giữa sự kiện của Apple và hành động của bạn là thước đo trung thực duy nhất cho việc theo dõi của bạn có hiệu quả hay không.
Cách theo dõi hoàn tiền App Store từng bước
1. Nhận sự kiện liên quan đến hoàn tiền
Sự kiện đến endpoint server bạn đã cấu hình. Nếu nó bị cấu hình sai hoặc gặp lỗi, hoàn tiền vẫn diễn ra và bạn đơn giản là không bao giờ biết, không có lỗi nào ở phía bạn.
2. Xác thực thông báo
Xác minh chữ ký dựa trên chuỗi chứng chỉ của Apple và xác nhận bundle ID trước khi xử lý payload. Một endpoint tin tưởng mọi thứ nó nhận được là endpoint mà người khác có thể ghi vào.
3. Xác định giao dịch liên quan
Đối chiếu các định danh trong payload đã giải mã với hồ sơ mua hàng của bạn, rồi truy ra tài khoản người dùng. Nếu bạn đã gắn account token khi mua hàng, đây là một phép tra cứu chứ không phải một cuộc điều tra.
4. Kiểm tra xem Apple có yêu cầu thông tin không
Phân nhánh theo loại thông báo. Consumption request cần một đường phản hồi. Thông báo kết quả cần cập nhật trạng thái. Xử lý chúng như nhau là cách khung thời gian phản hồi bị bỏ lỡ.
5. Thu thập thông tin tiêu thụ được hỗ trợ
Lấy giá trị từ hồ sơ của chính bạn: giao dịch mua đã được giao chưa, có cung cấp nội dung mẫu không, đã tiêu thụ bao nhiêu. Tài liệu Send Consumption Information của Apple nêu rõ các trường và giá trị hợp lệ. Trước tất cả, hãy kiểm tra sự đồng ý — Apple yêu cầu sự đồng ý hợp lệ của khách hàng để chia sẻ dữ liệu, việc xin đồng ý là trách nhiệm của nhà phát triển, và các yêu cầu không có sự đồng ý sẽ bị từ chối ngay.
6. Gửi trong khung thời gian được quy định
Tài liệu hiện tại của Apple yêu cầu phản hồi trong vòng 12 giờ kể từ thông báo. Gửi giá trị chính xác, và xác nhận lời gọi đã thành công thay vì giả định như vậy.
7. Theo dõi kết quả cuối cùng
Ghi lại thông báo kết quả nào đã đến và khi nào. Nếu pipeline của bạn làm rơi sự kiện trong một lần gián đoạn, server API của Apple cung cấp lịch sử hoàn tiền mà bạn có thể dùng để khôi phục những gì đã bỏ lỡ — nên chạy như một bước đối soát định kỳ thay vì chỉ tin vào thông báo.
8. Cập nhật entitlement và quyền truy cập
Thu hồi khi hoàn tiền được chấp thuận, khôi phục khi bị đảo ngược, và xử lý trường hợp tính theo tỷ lệ khi chỉ một phần giao dịch bị thu hồi. Điều khiển việc này từ sự kiện phía server để trạng thái luôn đúng dù khách hàng có mở lại ứng dụng hay không.
9. Đối soát với hồ sơ doanh thu
Gắn khoản hoàn tiền vào đúng kỳ và đúng sản phẩm. Không có bước này, đội kỹ thuật và tài chính sẽ nắm hai phiên bản khác nhau của cùng một tháng.
Cách phản hồi yêu cầu hoàn tiền của Apple
Bạn phản hồi bằng cách gửi thông tin tiêu thụ khi Apple yêu cầu, có sự đồng ý, trong khung thời gian. Bạn không phản hồi bằng cách chấp thuận hay từ chối bất cứ điều gì, vì nhà phát triển không có quyền đó. Apple là bên đưa ra quyết định.
Những gì bạn gửi nên mô tả điều thực sự xảy ra với giao dịch mua, lấy từ hồ sơ của bạn. Không phải ước tính, cũng không phải con số được tô vẽ theo hướng kết quả bạn mong muốn — ngoài việc không trung thực, đó là dữ liệu bạn đã xin đồng ý để chia sẻ một cách chính xác.
Đây là điểm vận hành mà hầu hết hệ thống theo dõi bỏ qua. Gửi phản hồi và phản hồi được chấp nhận là hai trạng thái khác nhau. Lời gọi có thể không qua được bước xác thực và trả về lỗi, và nếu không ai kiểm tra kết quả, một lần gửi thất bại trông giống hệt một lần gửi thành công trong log của bạn. Hãy lưu trạng thái phản hồi, không chỉ lưu việc bạn đã thử.
Điều gì xảy ra sau khi Apple quyết định về khoản hoàn tiền?
Apple gửi kết quả dưới dạng thông báo và đảo ngược khoản thanh toán ở phía họ. Sau đó, công việc chuyển sang bạn.
Điểm phân biệt cần ghi nhớ: hoàn tiền được Apple chấp thuận là một sự kiện, và hệ thống của bạn phản ánh đúng điều đó là một sự kiện khác. Phần của Apple hoàn tất bất kể bạn làm gì. Phần của bạn chỉ hoàn tất nếu thông báo đã đến, khớp với một giao dịch, truy ra được tài khoản, và cập nhật quyền truy cập của tài khoản đó.
Khi hai phần này lệch nhau, bạn có những khách hàng đã được hoàn tiền nhưng vẫn giữ mọi thứ họ đã trả. Không ai báo cáo, vì từ phía họ không có gì sai. Nó chỉ lộ ra khi đối soát nhiều tháng sau, nếu có.
Gói đăng ký cần đặc biệt cẩn trọng, vì một kỳ được hoàn tiền thường kết thúc gói đăng ký thay vì để nó tiếp tục chạy, và trạng thái của bạn phải thể hiện điều đó. Bộ phận hỗ trợ cũng cần hồ sơ này, để nhân viên có thể thấy chuyện gì đã xảy ra mà không cần nhờ ai kiểm tra dashboard.
Vì sao theo dõi hoàn tiền Apple thủ công trở nên khó khăn
Không phải do bất cẩn. Công việc này đơn giản không khớp với thời gian con người có mặt.
Yêu cầu hoàn tiền đến bất cứ khi nào khách hàng gửi, và mọi khung thời gian phản hồi vẫn chạy qua đêm và cuối tuần. Mỗi sự kiện cần một lần tra cứu, một lần khớp tài khoản, một lần kiểm tra sự đồng ý, một con số sử dụng, một lần gửi, và một lần cập nhật entitlement. Những việc nhỏ, nhưng bị giới hạn thời gian và lặp đi lặp lại, và vô hình khi mọi thứ diễn ra suôn sẻ.
Rồi quy mô làm thay đổi bản chất vấn đề. Nhiều ứng dụng, dữ liệu giao dịch ở một hệ thống và dữ liệu tài khoản ở hệ thống khác. Dữ liệu hoàn tiền lịch sử vẫn mỏng vì không ai bổ sung ngược, sai lệch entitlement tích tụ mà không được đánh dấu, và tài chính phát hiện chênh lệch khi khóa sổ quý — quá xa thời điểm mà khung thời gian phản hồi còn có ý nghĩa.
Theo dõi hoàn tiền Apple có thể tự động hóa không?
Có, và phần lớn nên được tự động hóa, vì gần như mọi bước đều có tính xác định.
Tự động hóa có thể giám sát và xác minh sự kiện hoàn tiền, ghi lại từng yêu cầu khi nó đến, truy giao dịch ra tài khoản, phân nhánh theo loại thông báo, tổng hợp dữ liệu tiêu thụ từ hồ sơ của bạn, theo dõi khung thời gian phản hồi và kết quả gửi, cập nhật trạng thái entitlement, và giữ lịch sử hoàn tiền luôn có thể truy vấn.
Điều nó không thể làm là tác động đến Apple. Tự động hóa không làm hoàn tiền ít xảy ra hơn và không thể đẩy quyết định theo hướng nào. Điều thay đổi là phía bạn trong quy trình có diễn ra nhất quán, và trong khung thời gian, hay không.
RefundSensor hỗ trợ quản lý hoàn tiền Apple như thế nào
Quản lý hoàn tiền App Store là danh mục mà công việc này thuộc về, và RefundSensor được xây dựng cho phía nhà phát triển: giám sát quy trình hoàn tiền của Apple, tự động hóa các bước phản hồi được hỗ trợ, và giữ sự kiện, kết quả và hồ sơ hoàn tiền ở một nơi thay vì rải rác trên nhiều dashboard.
Trên thực tế, phản hồi diễn ra trong khung thời gian của cửa hàng mà không cần ai canh thông báo, và hồ sơ hoàn tiền vẫn chính xác khi khối lượng tăng lên.
Nó không thay đổi quyết định của Apple, và không phần mềm quản lý hoàn tiền Apple nào làm được điều đó. Điều nó thay đổi là mỗi yêu cầu để lại bao nhiêu công việc thủ công.
Những quy tắc này được ghi ở đâu
Ba nguồn của Apple đứng sau các nhận định kỹ thuật ở trên. Hãy đọc trực tiếp, và kiểm tra lại định kỳ — lĩnh vực này đã thay đổi hơn một lần.
Yêu cầu hoàn tiền cho ứng dụng hoặc nội dung — quy trình dành cho khách hàng. Hữu ích để hiểu yêu cầu bắt nguồn từ đâu, thời gian cập nhật 24 đến 48 giờ mà khách hàng được thông báo, và lưu ý của Apple rằng điều kiện đủ khác nhau tùy quốc gia hoặc khu vực.
Send Consumption Information — quy trình phản hồi của nhà phát triển: yêu cầu về sự đồng ý, khung thời gian 12 giờ, và các trường của request. Hãy đọc trước khi xây dựng bất kỳ xử lý phản hồi nào.
App Store Server Notifications — cách sự kiện hoàn tiền đến backend của bạn, định dạng payload có chữ ký, và các loại thông báo, bao gồm CONSUMPTION_REQUEST, REFUND, REFUND_DECLINED và REFUND_REVERSED.
Nếu sự kiện hoàn tiền vẫn đang được theo dõi bằng tay
Theo dõi thủ công vẫn trụ được cho đến ngày một thông báo đến lúc 2 giờ sáng và khung thời gian đóng lại trước khi có ai mở dashboard. Thất bại diễn ra âm thầm, và đó chính là điều khiến nó tốn kém.
Nếu đó là tình trạng của bạn, RefundSensor đảm nhận phía nhà phát triển trong quy trình hoàn tiền của Apple giám sát sự kiện, giữ phản hồi trong khung thời gian, và đảm bảo kết quả đến được hồ sơ và logic entitlement của bạn.
Câu hỏi thường gặp
Thông qua App Store Server Notifications và hồ sơ giao dịch của chính bạn. Sự kiện đến một endpoint server đã cấu hình dưới dạng payload có chữ ký. Bạn xác minh chúng, truy giao dịch ra khách hàng, ghi lại sự kiện, phản hồi nếu Apple yêu cầu thông tin, và lưu kết quả khi nó đến.
Là bám theo một yêu cầu hoàn tiền qua từng trạng thái nó đi qua ở phía nhà phát triển: đã nhận yêu cầu, cơ hội phản hồi, phản hồi đã gửi và được chấp nhận, kết quả từ Apple, và lần cập nhật entitlement khép lại quy trình. Chỉ lưu kết quả cuối cùng sẽ làm mất thông tin bạn cần để giải thích chuyện gì đã xảy ra.
Có. Apple gửi kết quả dưới dạng thông báo server. REFUND nghĩa là được chấp thuận, REFUNDDECLINED nghĩa là bị từ chối, và REFUNDREVERSED nghĩa là một khoản hoàn tiền đã chấp thuận trước đó bị hủy bỏ. Các giao dịch được hoàn tiền cũng mang ngày thu hồi và mã lý do trong payload giao dịch.
Bằng cách gửi thông tin tiêu thụ khi Apple yêu cầu, khi đã có sự đồng ý hợp lệ của khách hàng, dùng các giá trị chính xác từ hồ sơ của chính bạn. Bạn không thể chấp thuận hay từ chối hoàn tiền. Phản hồi của bạn chỉ là một đầu vào trong quá trình xem xét của Apple, và bạn nên xác nhận việc gửi đã thành công thay vì giả định như vậy.
Là một App Store Server Notification báo cho server của bạn rằng Apple muốn thông tin về một giao dịch mua trong khi đánh giá yêu cầu hoàn tiền. Đây không phải thông báo hoàn tiền và cũng không phải quyết định. Việc phản hồi cần có sự đồng ý của khách hàng, và Apple yêu cầu phản hồi trong vòng 12 giờ.
Tài liệu hiện tại của Apple yêu cầu phản hồi trong vòng 12 giờ kể từ thông báo. Yêu cầu có thể đến vào bất kỳ giờ nào, nên đây là bước phù hợp nhất để tự động hóa. Hãy xác nhận yêu cầu hiện hành trên trang của Apple thay vì dựa vào một tích hợp cũ.
Không có gì, trừ khi bạn thay đổi nó. Việc Apple đảo ngược khoản thanh toán không làm thay đổi cơ sở dữ liệu của bạn. Backend của bạn nên thu hồi entitlement khi hoàn tiền được chấp thuận, khôi phục nếu Apple đảo ngược khoản hoàn tiền, và xử lý trường hợp chỉ một phần giao dịch bị thu hồi.
Các phần mang tính cơ học thì có. Xác minh thông báo, khớp giao dịch với tài khoản, theo dõi khung thời gian phản hồi và kết quả gửi, cập nhật entitlement, và duy trì lịch sử hoàn tiền đều có tính xác định. Phần vẫn cần con người là thiết kế luồng xin đồng ý và đọc ra điều mà các mẫu hình hoàn tiền nói về sản phẩm.





