Hoàn tiền đăng ký không hoạt động giống hoàn tiền mua một lần, và cửa hàng bạn đang dùng quyết định bạn có bao nhiêu tiếng nói
Một khoản hoàn tiền đăng ký đảo ngược cả một kỳ thanh toán, không phải một giao dịch bán đơn lẻ. Trên App Store, Apple quyết định và máy chủ của bạn chỉ biết kết quả. Trên Google Play bạn tự chọn hoàn tiền toàn phần hay theo tỷ lệ. Đây là cách mỗi cửa hàng xử lý hoàn tiền đăng ký, và một lần hoàn tiền khiến bạn tốn bao nhiêu.

Điểm chính
- Hoàn tiền đăng ký không giống hoàn tiền mua một lần. Đơn vị bị đảo ngược là một kỳ thanh toán, và ở cả hai cửa hàng việc hoàn tiền một đơn đăng ký sẽ hủy đăng ký và cắt quyền truy cập.
- Trên App Store, Apple quyết định mọi khoản hoàn tiền đăng ký. Khách hàng yêu cầu với Apple tại reportaproblem.apple.com, Apple ra phán quyết, và máy chủ của bạn chỉ biết kết quả qua thông báo REFUND, REFUND_DECLINED hoặc REFUND_REVERSED.
- Khi Apple chấp thuận hoàn tiền đăng ký, giao dịch nhận một revocationDate và autoRenewStatus của đăng ký được đặt thành false, nên nó ngừng gia hạn và khách hàng mất quyền truy cập.
- Apple đo lường một đăng ký tự động gia hạn theo thời gian đã trôi qua, không theo các chỉ số sử dụng của bạn. Người dùng đã đi được sáu tháng của gói hằng năm đã tiêu thụ khoảng 50 phần trăm, và GRANT_PRORATED là tùy chọn hoàn tiền duy nhất bạn có thể bày tỏ cho nó.
- Trên Google Play bạn tự phát hành khoản hoàn tiền. purchases.subscriptionsv2.revoke nhận hoặc fullRefund, trả lại toàn bộ kỳ hiện tại, hoặc proratedRefund, chỉ trả lại thời gian quyền lợi chưa sử dụng.
- Đơn hàng nào bạn hoàn tiền trên Google Play sẽ thay đổi kết quả. Hoàn tiền đơn gần nhất và đăng ký bị xóa ngay lập tức cùng với việc hủy các lần gia hạn tương lai. Hoàn tiền một đơn cũ hơn và đăng ký vẫn hoạt động.
- Các giới hạn của Google Play rất chặt. Đơn hàng cũ hơn ba năm không thể hoàn tiền, hoàn tiền một phần chỉ áp dụng cho đơn đặt sau March 2018, không áp dụng cho ứng dụng trả phí, và không khoản hoàn tiền nào có thể đảo ngược sau khi đã phát hành.
Hoàn tiền một đăng ký và hoàn tiền một giao dịch mua trong ứng dụng cảm giác như cùng một nút bấm. Không phải vậy. Một giao dịch mua một lần là một khoản phí bạn trả lại. Một đăng ký là một khoản phí định kỳ gắn với một quyền lợi đang hoạt động, nên hoàn tiền đăng ký phải trả lời hai câu hỏi mà hoàn tiền một lần không bao giờ hỏi: bạn trả lại bao nhiêu phần của kỳ hiện tại, và đăng ký có tiếp tục chạy không. App Store và Google Play trả lời hai câu hỏi đó theo cách ngược nhau, và khoảng cách đó quyết định bạn có bao nhiêu quyền kiểm soát và bao nhiêu tiền rời khỏi tài khoản của bạn.
Đây là bản đồ ngắn gọn. Trên App Store, Apple nắm quyền quyết định và bạn biết sau khi mọi việc đã rồi. Trên Google Play, bạn nắm các nút điều khiển và tự chọn toàn phần hay theo tỷ lệ. Bài này đi qua cả hai cửa hàng, các trường và thông báo chính xác mà mỗi bên sử dụng, đơn hàng nào bạn chạm vào khi một đăng ký đã tính phí nhiều lần, và một khoản hoàn tiền đăng ký thực sự tốn bao nhiêu khi tính cả phần điện toán bạn đã chi.
Hoàn tiền đăng ký khác hoàn tiền một lần như thế nào
Cả hai cửa hàng đều coi một khoản hoàn tiền là việc đảo ngược một đơn hàng cụ thể. Với một giao dịch mua một lần chỉ có một đơn hàng, nên không có gì để chọn. Một đăng ký là một chuỗi đơn hàng, mỗi kỳ thanh toán một đơn, với một quyền lợi hoặc đang hoạt động hoặc không. Chính cấu trúc đó khiến hoàn tiền đăng ký mang những lựa chọn mà hoàn tiền một lần không có.
Đơn vị bị đảo ngược là một kỳ thanh toán
Khi bạn hoàn tiền một đăng ký, bạn không trả lại các khoản thanh toán của cả đời. Bạn tác động lên một đơn hàng trong chuỗi, thường là đơn gần nhất, tức một kỳ thanh toán. Hoàn tiền toàn phần trả lại cả kỳ đó. Hoàn tiền theo tỷ lệ chỉ trả lại phần của kỳ mà khách hàng chưa sử dụng. Dù thế nào, giao dịch bạn đảo ngược là giá của một kỳ, không phải toàn bộ lịch sử của khách hàng với ứng dụng.
Khác biệt thực sự là ai quyết định
Sự phân chia rõ nét hơn là thẩm quyền. Trên App Store, Apple quyết định liệu một khoản hoàn tiền đăng ký có xảy ra hay không, và bạn nhiều nhất chỉ cung cấp bối cảnh. Trên Google Play, bạn quyết định, và API làm đúng những gì bạn bảo. Kết quả với khách hàng thì như nhau, nhưng vị trí của nhà phát triển hoàn toàn khác, và điều đó thay đổi những gì bạn xây dựng để xử lý mỗi bên.
App Store xử lý một khoản hoàn tiền đăng ký như thế nào
Ở phía Apple bạn là một khán giả với một chiếc micro nhỏ. Khách hàng nói chuyện với Apple, Apple ra quyết định, và máy chủ của bạn đọc kết quả.
Khách hàng yêu cầu Apple, và Apple ra phán quyết
Một khách hàng App Store yêu cầu hoàn tiền đăng ký tại reportaproblem.apple.com, không phải với bạn. Apple xem xét yêu cầu dựa trên các tín hiệu của riêng mình và quyết định. Bạn không phê duyệt nó, và không có nút nào trên bảng điều khiển Apple cho phép bạn phát hành một khoản hoàn tiền đăng ký theo cách Google Play làm. Apple có tối đa 90 days kể từ khi mua để chấp nhận một yêu cầu đưa vào xem xét, và một khi ra phán quyết, quyết định thuộc về Apple.
Máy chủ của bạn thấy gì khi khoản hoàn tiền đến
Bạn biết kết quả qua App Store Server Notifications V2. Một khoản hoàn tiền được chấp thuận đến dưới dạng thông báo REFUND, và giao dịch giờ mang một revocationDate đánh dấu thời điểm quyền truy cập nên kết thúc. autoRenewStatus của đăng ký được đặt thành false, nên nó ngừng gia hạn và khách hàng mất quyền lợi. Nếu Apple từ chối yêu cầu bạn nhận REFUND_DECLINED, và nếu sau đó Apple hủy một khoản hoàn tiền đã cấp bạn nhận REFUND_REVERSED và đăng ký quay trở lại. Nhiệm vụ của bạn là đọc các thông báo này và chuyển đổi quyền truy cập, không phải bỏ phiếu.
| Thông báo | Nó có nghĩa là gì | Bạn làm gì |
|---|---|---|
| REFUND | Apple đã chấp thuận hoàn tiền; giao dịch nhận một revocationDate | Thu hồi quyền truy cập, coi autoRenewStatus là false |
| REFUND_DECLINED | Apple từ chối yêu cầu hoàn tiền của khách hàng | Không có gì thay đổi; đăng ký vẫn giữ nguyên |
| REFUND_REVERSED | Apple hủy một khoản hoàn tiền đã cấp | Khôi phục quyền truy cập và giao dịch bán |
Apple đo lường một đăng ký theo thời gian, không theo các chỉ số của bạn
Với một mặt hàng tiêu hao, bạn có thể cho Apple biết đã dùng bao nhiêu qua dữ liệu tiêu thụ. Với một đăng ký tự động gia hạn, Apple tự tính mức tiêu thụ từ thời gian đã trôi qua. Ví dụ của chính Apple là một khách hàng đã đi được sáu tháng của một đăng ký hằng năm, người đã tiêu thụ khoảng 50 phần trăm. Vậy nên các chỉ số sử dụng của bạn không định con số cho một đăng ký. Đòn bẩy duy nhất bạn có thể kéo là refundPreference, và với một đăng ký giá trị liên quan là GRANT_PRORATED, nghĩa là bạn muốn Apple chỉ trả lại phần chưa sử dụng. Đó là một tùy chọn, không phải một quyết định. Apple vẫn ra phán quyết.
Google Play xử lý một khoản hoàn tiền đăng ký như thế nào
Google Play đặt quyết định vào tay bạn. Có một màn hình Play Console và một tập các phương thức API cho phép bạn hoàn tiền một đăng ký trực tiếp, chọn bao nhiêu, và quyết định quyền truy cập có kết thúc không. Đây là tư thế ngược lại với Apple, và đi kèm những lựa chọn bạn phải làm cho đúng.
Toàn phần hay theo tỷ lệ, và đó là quyết định của bạn
Cách hiện hành để hoàn tiền và thu hồi một đăng ký là purchases.subscriptionsv2.revoke, được gọi với một revocationContext. Truyền fullRefund và Google Play chấm dứt đăng ký và trả lại toàn bộ số tiền của kỳ thanh toán hiện tại. Truyền proratedRefund và Google Play chấm dứt đăng ký và chỉ trả lại thời gian quyền lợi còn lại, chưa sử dụng. Phương thức cũ hơn chỉ có thể hoàn tiền toàn phần, đó là lý do dùng cái mới hơn. Một lệnh thu hồi theo tỷ lệ là một body hai dòng, một revocationContext bao lấy proratedRefund, và bạn thay bằng fullRefund cho cả kỳ. Cả hai lệnh thu hồi đều kích hoạt một thông báo nhà phát triển theo thời gian thực SUBSCRIPTION_REVOKED, đó là tín hiệu để bạn cắt quyền truy cập.
Đơn hàng nào bạn hoàn tiền sẽ thay đổi điều xảy ra
Google Play cũng cho phép bạn hoàn tiền một đơn hàng mà không thu hồi, qua orders.refund, và ở đây có một quy tắc tinh tế. Nếu bạn hoàn tiền đơn gần nhất trong một đăng ký, đơn đó được hoàn tiền, đăng ký bị xóa ngay lập tức, và các lần lặp lại tương lai bị hủy. Nếu bạn hoàn tiền một đơn cũ hơn trong chuỗi, đơn đó được hoàn tiền nhưng đăng ký vẫn hoạt động. Trên orders.refund tham số revoke chỉ thu hồi khi đơn hàng là đơn gần nhất, nên để kết thúc quyền truy cập trên một đăng ký đang hoạt động bạn dùng purchases.subscriptionsv2.revoke thay thế.
| Hành động | Đơn hàng được hoàn tiền | Điều gì xảy ra với đăng ký |
|---|---|---|
| Hoàn tiền đơn gần nhất | Kỳ thanh toán mới nhất | Xóa ngay lập tức, hủy các lần gia hạn tương lai |
| Hoàn tiền một đơn cũ hơn | Một kỳ thanh toán trong quá khứ | Vẫn hoạt động, tiếp tục gia hạn |
| subscriptionsv2.revoke, toàn phần hay theo tỷ lệ | Kỳ hiện tại | Chấm dứt ngay bây giờ, gửi SUBSCRIPTION_REVOKED |

Những giới hạn khiến nhà phát triển vấp ngã
Vài góc cạnh gai góc bắt được người ta, và không cái nào nằm trên con đường suôn sẻ.
- Đơn hàng cũ hơn ba năm hoàn toàn không thể hoàn tiền.
- Hoàn tiền một phần chỉ áp dụng cho đơn đặt sau March 2018, và không bao giờ cho các giao dịch mua ứng dụng trả phí.
- Bạn có thể chồng nhiều khoản hoàn tiền một phần trên một đơn hàng, nhưng không đến hoặc vượt tổng giá trị đơn hàng.
- Một khoản hoàn tiền không thể đảo ngược sau khi đã phát hành.
Google Play thường trả về quyết định hoàn tiền trong vòng một ngày, dù có thể mất tới bốn ngày. Hãy tính đến độ trễ đó khi một khoản hoàn tiền cần phản ánh vào các kiểm soát truy cập của riêng bạn.
Một khoản hoàn tiền đăng ký thực sự khiến bạn tốn bao nhiêu
Khoản phí được hoàn lại không bao giờ là toàn bộ hóa đơn. Khoảnh khắc một đơn đăng ký được giao, bạn đã chi tiền thật cho nó: điện toán, các lệnh gọi API mô hình, lưu trữ, và mọi khoản chi trả gắn với kỳ đó. Một khoản hoàn tiền trả lại giao dịch bán. Nó không trả lại những gì bạn đã chi để phục vụ nó. Trên một đăng ký, hình dạng của khoản lỗ phụ thuộc vào khoản hoàn tiền nào bạn phát hành.
Toàn phần so với theo tỷ lệ là một quyết định tiền bạc
Một khoản hoàn tiền toàn phần trên Google Play trả lại cả kỳ hiện tại, nên bạn mất toàn bộ doanh thu của kỳ trong khi vẫn gánh mọi chi phí đã phát sinh trong kỳ đó. Một khoản hoàn tiền theo tỷ lệ chỉ trả lại phần chưa sử dụng, nên bạn giữ được doanh thu cho phần khách hàng thực sự đã có. Nếu một khách hàng đã đi được 60 phần trăm của một kỳ hằng tháng trên gói 10 đô la, hoàn tiền toàn phần khiến bạn tốn trọn 10 đô la, và hoàn tiền theo tỷ lệ khiến bạn tốn khoảng 4 đô la, tức 40 phần trăm chưa sử dụng. Apple áp dụng cùng logic thời gian đã trôi qua ở phía họ khi định cỡ một khoản hoàn tiền đăng ký.
| Loại hoàn tiền | Khách hàng nhận lại gì | Bạn giữ được gì |
|---|---|---|
| Hoàn tiền toàn phần | Cả kỳ hiện tại, 10.00 | Không gì từ kỳ này |
| Hoàn tiền theo tỷ lệ | 40 phần trăm chưa sử dụng, khoảng 4.00 | 60 phần trăm đã sử dụng, khoảng 6.00 |
Những chi phí không bao giờ quay lại
Dù bạn phát hành khoản hoàn tiền nào, các chi phí phía sau của kỳ đó đã mất. Một lệnh gọi API mô hình bạn đã trả tiền, một video bạn đã kết xuất, dung lượng lưu trữ bạn đã cấp phát, một khoản chi trả cho nhà sáng tạo bạn đã gửi, không cái nào đảo ngược khi khoản hoàn tiền đăng ký được xử lý. Định cỡ khoản hoàn tiền theo những gì khách hàng thực sự đã dùng, không bao giờ theo họ đã đăng ký cách đây bao lâu, vì thời gian đã trôi qua không phải là một chi phí và không cửa hàng nào coi nó như vậy. Và sau August 3, 2026, nếu một khoản phí đăng ký Google Play kết thúc bằng một chargeback ngân hàng thay vì một khoản hoàn tiền bạn phát hành, bạn cũng phải gánh phí chargeback của ngân hàng, thứ mà một khoản hoàn tiền bạn cấp trước sẽ tránh được.
Cách xử lý hoàn tiền đăng ký mà không cần người theo dõi
Không việc nào trong số này nên chờ ai đó đọc một bảng điều khiển. Thông báo đến vào bất cứ giờ nào, và quyền truy cập nên chuyển đổi ngay khoảnh khắc một khoản hoàn tiền đến, không phải sáng hôm sau.
Đọc kết quả và thu hồi quyền truy cập trên cả hai cửa hàng
Trên App Store, lắng nghe REFUND, REFUND_DECLINED và REFUND_REVERSED, và dùng revocationDate cùng autoRenewStatus để kết thúc hoặc khôi phục quyền truy cập tự động. Trên Google Play, lắng nghe SUBSCRIPTION_REVOKED và các tín hiệu mua đã hủy rồi làm điều tương tự. Đây là hệ thống mà RefundHalt vận hành cho bạn: thông báo vào, tài khoản được khớp, quyền truy cập được chuyển đổi, không có ai trong vòng lặp.
Giữ sẵn bằng chứng trước khi có tranh chấp
Những khung thời gian hẹp thực sự cần đầu vào của bạn, CONSUMPTION_REQUEST 12 giờ của Apple trên các mặt hàng tiêu hao và đợt xem xét chargeback 24 giờ của Google Play, chỉ hữu ích nếu bằng chứng đã tồn tại sẵn. Gắn một mã định danh tài khoản vào mỗi giao dịch mua, một appAccountToken UUID trên Apple và một setObfuscatedAccountId đã băm dài 64 characters hoặc ngắn hơn trên Google Play, và ghi lại những gì mỗi kỳ trả phí đã cung cấp. Rồi khi một token đến, hồ sơ đã được dựng sẵn, và trả lời trong khung thời gian là việc của một cỗ máy, không phải một cuộc chạy đua.
Câu hỏi thường gặp
- Hoàn tiền một đăng ký có khác hoàn tiền một giao dịch mua một lần không?
- Có. Một giao dịch mua một lần là một đơn hàng đơn lẻ bạn trả lại. Một đăng ký là một chuỗi đơn hàng với một quyền lợi đang hoạt động, nên hoàn tiền đăng ký tác động lên một kỳ thanh toán và cũng quyết định liệu đăng ký có tiếp tục chạy hay không. Trên cả App Store và Google Play, việc hoàn tiền một đơn đăng ký sẽ hủy đăng ký và kết thúc quyền truy cập, và bạn thường có thể chọn giữa trả lại cả kỳ hoặc chỉ phần chưa sử dụng.
- Nhà phát triển có thể tự phát hành một khoản hoàn tiền đăng ký App Store không?
- Không. Apple quyết định các khoản hoàn tiền đăng ký App Store. Khách hàng yêu cầu một khoản tại reportaproblem.apple.com, Apple ra phán quyết, và bạn biết kết quả qua một thông báo REFUND, REFUND_DECLINED hoặc REFUND_REVERSED. Đầu vào duy nhất bạn có thể cung cấp là một refundPreference, chẳng hạn GRANT_PRORATED, và Apple coi đó là một tùy chọn, không phải một quyết định.
- Làm thế nào để phát hành một khoản hoàn tiền đăng ký theo tỷ lệ trên Google Play?
- Gọi purchases.subscriptionsv2.revoke với revocationContext đặt thành proratedRefund. Google Play chấm dứt đăng ký và chỉ trả lại thời gian quyền lợi còn lại, chưa sử dụng, rồi gửi một thông báo SUBSCRIPTION_REVOKED. Truyền fullRefund thay vào đó để trả lại cả kỳ hiện tại. Phương thức thu hồi cũ hơn chỉ có thể hoàn tiền toàn phần.
- Tại sao khoản hoàn tiền Google Play của tôi không hủy đăng ký?
- Vì bạn đã hoàn tiền một đơn cũ hơn trong chuỗi. Trên Google Play, hoàn tiền đơn gần nhất sẽ xóa đăng ký ngay lập tức và hủy các lần gia hạn tương lai, nhưng hoàn tiền một đơn cũ hơn sẽ hoàn tiền kỳ đó trong khi đăng ký vẫn hoạt động. Tham số revoke trên orders.refund chỉ thu hồi khi đơn hàng là đơn gần nhất, nên để kết thúc một đăng ký đang hoạt động hãy dùng purchases.subscriptionsv2.revoke.
- Bạn có thể hoàn tiền một đơn đăng ký từ bao lâu về trước?
- Trên Google Play, đơn hàng cũ hơn ba năm không thể hoàn tiền. Hoàn tiền một phần chỉ áp dụng cho đơn đặt sau March 2018 và không bao giờ cho ứng dụng trả phí, và không khoản hoàn tiền nào có thể đảo ngược sau khi đã phát hành. Trên App Store, Apple chấp nhận yêu cầu hoàn tiền của khách hàng trong tối đa 90 days kể từ khi mua và tự quyết định từng trường hợp.
Nguồn và tài liệu đọc thêm
- Android Developers: Manage subscriptions and one-time purchases
- Play Console Help: Manage your app's orders and issue refunds
- Google Play Developer API: orders.refund
- Google Play Developer API: purchases.subscriptionsv2.revoke
- Google Play Help: Refund policies for apps, games, and in-app purchases
- Apple Developer: Handling refund notifications
- Apple Developer WWDC21: Support customers and handle refunds
RefundHalt
Chế độ tự động xử lý hoàn tiền cho App Store và Google Play
Đọc tiếp
Sự khác biệt giữa chargeback và hoàn tiền nằm ở chỗ ai quyết định, và chỉ một trong hai là quyết định cuối cùng
Một khoản hoàn tiền trên App Store hay Google Play do cửa hàng cấp, và cửa hàng quyết định điều đó. Chargeback là ngân hàng của khách hàng rút tiền về, và ngân hàng quyết định, không có kháng nghị. Với các nhà phát triển ứng dụng, khoảng cách giữa chúng giờ đây là tiền, bởi vì từ ngày 3 tháng 8 năm 2026 Google Play đặt chi phí chargeback lên vai bạn.
Kể từ August 3, chi phí chargeback của Google Play đã chuyển sang phía nhà phát triển, và đây là những gì mỗi tranh chấp giờ lấy đi của bạn
Google Play âm thầm ngừng gánh chargeback. Với các đơn hàng đặt vào hoặc sau ngày August 3, 2026, bạn phải hoàn lại giá mua trừ đi phí dịch vụ của Play cộng với một khoản phí ngân hàng trên mỗi đơn hàng bị tranh chấp. Đây là những gì đã thay đổi, một chargeback giờ tốn của bạn bao nhiêu, và cửa sổ 24 giờ nơi bạn được phản bác.