Khách hàng bị tính phí hai lần cho cùng một gói đăng ký thường đã trả tiền trên hai nền tảng, và bạn chỉ có quyền hoàn một trong hai khoản
Khi khách hàng bị tính phí hai lần cho cùng một gói đăng ký, thường là một gói mua qua App Store và gói còn lại qua Google Play hoặc website của bạn. Bài viết này cho biết ai có thể hoàn tiền cho từng bên, bạn mất bao nhiêu, và cách chặn khoản phí thứ hai.

Điểm chính
- Khách hàng bị tính phí hai lần cho cùng một gói đăng ký thường đã mua qua hai cửa hàng khác nhau, chẳng hạn App Store và Google Play. Mỗi cửa hàng tự tính phí và tự hoàn tiền cho giao dịch của mình.
- Nhà phát triển không thể hoàn tiền cho giao dịch mua trên App Store. Apple là bên quyết định, qua reportaproblem.apple.com hoặc qua bảng hoàn tiền mà ứng dụng có thể mở bằng beginRefundRequest của StoreKit. Apple cho biết việc chấp thuận hoặc từ chối mất tối đa 48 giờ.
- Trên Google Play, nhà phát triển có thể hoàn tiền một đơn hàng từ Order management trong Play Console hoặc qua API orders.refund. API này không hoàn tiền được cho đơn hàng cũ hơn 3 năm.
- Hoàn tiền đơn hàng gần nhất của một gói đăng ký Google Play sẽ gỡ gói đăng ký ngay lập tức và hủy các kỳ gia hạn sau. Hoàn tiền một đơn hàng cũ hơn thì gói đăng ký vẫn hoạt động.
- Apple gửi CONSUMPTION_REQUEST cho yêu cầu hoàn tiền ở mọi loại sản phẩm, kể cả gói đăng ký tự động gia hạn. Nhà phát triển có 12 giờ để phản hồi bằng Send Consumption Information nếu khách hàng đã đồng ý.
- Với đơn hàng Google Play đặt sau ngày 3 tháng 8 năm 2026, một khoản chargeback khiến nhà phát triển mất giá mua, trừ phí dịch vụ của Play, cộng thêm phí chargeback của ngân hàng.
- Gắn appAccountToken cho giao dịch mua trên Apple và ID tài khoản đã được làm mờ cho giao dịch mua trên Google Play giúp máy chủ của bạn nhận ra một khách hàng đứng sau hai gói đăng ký trước khi khoản phí thứ hai xảy ra.
Không có gì trong hệ thống thanh toán của Apple hay Google ngăn một người trả tiền cho cả hai bên để dùng gói đăng ký của bạn trong cùng một tháng. Khi khách hàng bị tính phí hai lần cho cùng một gói đăng ký, gần như luôn là chuyện đó. Họ đăng ký trên iPhone, rồi đăng ký lại trên máy tính bảng Android hoặc trên website của bạn, và ứng dụng của bạn không nhận ra gói đầu tiên. Khách thấy hai khoản phí và viết thư cho bạn. Vấn đề là bạn chỉ tự hoàn tiền được một khoản, và chỉ khi khoản đó không mua qua Apple. Dưới đây là cách từng bên vận hành, khoản trùng lặp khiến bạn tốn bao nhiêu, và cách đảm bảo chuyện này không lặp lại.
Vì sao khách hàng bị tính phí hai lần cho cùng một gói đăng ký
Mỗi cửa hàng sở hữu giao dịch của riêng mình. Apple tính phí gói đăng ký App Store, Google tính phí gói Google Play, và đơn vị xử lý thanh toán của bạn tính phí gói trên web. Không bên nào biết các bên kia tồn tại. Máy chủ của bạn là nơi duy nhất hai giao dịch có thể gặp nhau, và chỉ khi cả hai mang một ID gắn chúng với cùng một tài khoản.
Những con đường thường dẫn đến việc bị tính phí hai lần trông như sau:
- Khách đổi điện thoại, từ iOS sang Android hoặc ngược lại, và đăng ký lại vì ứng dụng mới hiển thị paywall.
- Khách đăng ký trên website của bạn, cài ứng dụng nhưng chưa đăng nhập, nên ứng dụng bán thêm cho họ một gói đăng ký qua cửa hàng.
- Khách gỡ ứng dụng và nghĩ rằng gói đã kết thúc. Trang trợ giúp của Google nói rằng gỡ ứng dụng không hủy gói đăng ký Google Play của ứng dụng đó, còn gói App Store sẽ tiếp tục gia hạn cho đến khi bị hủy trong tài khoản Apple.
“Ứng dụng và website của bạn rõ ràng không kết nối với nhau”
Đó là lời phàn nàn bạn sẽ đọc trong email hỗ trợ, và từ góc nhìn của khách, lời đó có lý. Họ trả tiền cho một sản phẩm. Bị yêu cầu trả thêm lần nữa giống như một cái bẫy, dù đó là sơ suất của cả hai bên. Cách nhanh nhất để xoa dịu là nói rõ khoản nào bạn hoàn được và khoản nào họ cần gửi yêu cầu đến Apple.
Ai có thể hoàn tiền cho từng khoản phí
Đây là chỗ phần lớn thư trả lời hỗ trợ đi sai hướng. Bạn chỉ có thể hứa những gì mình kiểm soát.
| Nơi mua gói trùng lặp | Ai quyết định hoàn tiền | Cách gói ngừng gia hạn | Vai trò của bạn |
|---|---|---|---|
| App Store | Chỉ Apple, qua reportaproblem.apple.com hoặc bảng hoàn tiền trong ứng dụng của bạn | Khách tự hủy trong tài khoản Apple | CONSUMPTION_REQUEST, trả lời trong 12 giờ nếu khách đã đồng ý |
| Google Play, trong vòng 48 giờ sau khi mua | Khách có thể yêu cầu Google, hoặc bạn tự hoàn tiền | Hoàn tiền đơn hàng gần nhất sẽ hủy các kỳ gia hạn sau | Không có, với hoàn tiền tự phục vụ của Google |
| Google Play, sau 48 giờ | Bạn, từ Play Console hoặc orders.refund | Hoàn tiền đơn hàng gần nhất sẽ hủy các kỳ gia hạn sau | Bạn quyết định |
| Website của bạn | Bạn, qua đơn vị xử lý thanh toán | Bạn hủy ở phía mình | Bạn quyết định |
Nhà phát triển có thể hoàn tiền gói đăng ký App Store không?
Không. Apple xử lý mọi khoản hoàn tiền trên App Store. Điều bạn làm được là rút ngắn quy trình. beginRefundRequest của StoreKit mở bảng hoàn tiền của Apple ngay trong ứng dụng, với thông tin giao dịch và danh sách lý do đã được điền sẵn. Tài liệu của Apple cho biết App Store mất tối đa 48 giờ để chấp thuận hoặc từ chối yêu cầu. Bên ngoài ứng dụng, khách đăng nhập tại reportaproblem.apple.com, chọn “Request a refund”, chọn lý do và chọn gói đăng ký.
Tự hoàn tiền phía Google Play
Trên Google Play, bạn nắm quyền kiểm soát. Trong Play Console, mở Order management, chọn đơn hàng và hoàn tiền. Trang trợ giúp Play Console nói rõ về gói đăng ký: hoàn tiền đơn hàng gần nhất thì gói đăng ký bị gỡ ngay lập tức, các kỳ gia hạn sau bị hủy. Hoàn tiền một đơn hàng cũ hơn thì gói đăng ký vẫn hoạt động. Nếu bạn tự động hóa việc này, API orders.refund làm đúng việc đó, nhận cờ revoke để chấm dứt quyền truy cập ngay, và từ chối đơn hàng cũ hơn 3 năm.
Gói đăng ký trùng lặp khiến bạn tốn bao nhiêu
Khoản trùng lặp ngay từ đầu đã không phải doanh thu bạn được giữ. Câu hỏi về tiền là bạn tốn thêm bao nhiêu ngoài khoản hoàn tiền.
Trường hợp gọn gàng
Giả sử một khách trả $9.99 mỗi tháng trên cả App Store và Google Play trong ba tháng rồi mới nhận ra. Đó là $29.97 tiền phí trùng lặp. Nếu bạn tự hoàn tiền ba đơn hàng Google Play, bạn trả lại $29.97 và vấn đề kết thúc ngay trong ngày. Nếu khách lại gửi yêu cầu phía App Store đến Apple, Apple quyết định hoàn bao nhiêu và bạn chỉ biết qua thông báo máy chủ. Dù theo cách nào, doanh thu của một nền tảng trong ba tháng đó cũng bị trả lại.
Trường hợp tốn kém
Thiệt hại thực sự đến khi khách bỏ cuộc với bộ phận hỗ trợ và gọi cho ngân hàng. Chargeback là kết quả cuối cùng khi ngân hàng đã quyết định. Google Play cho bạn một cơ hội phản biện, là bước xem xét chargeback mà bạn phải trả lời trong 24 giờ qua orders.reviewrefund. Với đơn hàng Google Play đặt sau ngày 3 tháng 8 năm 2026, một chargeback thua sẽ khiến bạn mất giá mua, trừ phí dịch vụ của Play, cộng thêm phí chargeback của ngân hàng. Một khoản hoàn $29.97 mà bạn có thể xử lý trong một phút trở thành $29.97 cộng một khoản phí bạn không kiểm soát được.
Chi phí bạn vẫn phải trả trong lúc đó
Khi cả hai gói còn hoạt động, backend của bạn phục vụ một người nhưng thấy hai gói đăng ký. Nếu bạn tính số chỗ, đồng bộ dữ liệu hoặc gọi API trả phí của bên thứ ba theo từng gói đăng ký, bạn có thể đang trả gấp đôi cho tài nguyên tính toán, lưu trữ và lệnh gọi API cho một khách hàng duy nhất. Gộp hai bản ghi lại sẽ chấm dứt chuyện đó.

Cách xử lý việc tính phí hai lần ở bộ phận hỗ trợ
Trả lời nhanh và gói gọn trong một tin nhắn. Mỗi lượt qua lại thêm vào đều làm tăng khả năng khách khiếu nại qua ngân hàng.
- Tra cả hai giao dịch theo tài khoản của khách, không theo địa chỉ email họ dùng để viết thư.
- Hỏi họ muốn giữ gói nào. Thường là gói trên thiết bị họ đang dùng.
- Nếu gói trùng lặp nằm trên Google Play hoặc website của bạn, hãy tự hoàn tiền và báo cho họ là đã xong.
- Nếu gói trùng lặp nằm trên App Store, hãy hướng họ đến reportaproblem.apple.com, hoặc nút hoàn tiền trong ứng dụng nếu bạn đã làm, và dặn họ hủy gói trong phần cài đặt tài khoản Apple.
- Nếu sau đó Apple gửi CONSUMPTION_REQUEST và khách đã đồng ý, hãy trả lời trong 12 giờ với dữ liệu sử dụng chính xác. Một gói trùng lặp chưa từng được dùng thì Apple dễ chấp thuận.
Cách chặn khoản phí thứ hai trước khi nó xảy ra
Phòng ngừa rẻ hơn bất kỳ khoản hoàn tiền nào, và công cụ đã có sẵn ở cả hai cửa hàng.
Gắn mọi giao dịch mua với ID tài khoản của bạn
Trên iOS, tạo một UUID cho mỗi tài khoản và truyền nó làm tùy chọn mua appAccountToken. Apple trả lại đúng giá trị đó trong giao dịch và trong thông tin gia hạn gói đăng ký. Nếu giao dịch diễn ra bên ngoài ứng dụng, endpoint Set App Account Token cho phép bạn gắn hoặc cập nhật token sau. Trên Android, truyền ID tài khoản đã băm, dài không quá 64 ký tự, vào setObfuscatedAccountId, tuyệt đối không truyền dữ liệu cá nhân nguyên bản.
Kiểm tra quyền sử dụng trước khi hiển thị paywall
Trước khi paywall xuất hiện, hãy hỏi máy chủ của chính bạn xem tài khoản đang đăng nhập đã có gói đang hoạt động trên bất kỳ nền tảng nào chưa. Hiển thị lời nhắc đăng nhập trước, rồi chỉ hiển thị paywall cho tài khoản chưa có gói nào đang hoạt động.
Theo dõi tài khoản có hai gói đang hoạt động
Chạy kiểm tra hằng ngày để tìm tài khoản có nhiều hơn một gói đăng ký đang hoạt động trên các cửa hàng. Phát hiện trong tuần đầu nghĩa là hoàn tiền một tháng thay vì ba tháng, và một email ngắn thay vì một chargeback.
RefundHalt theo dõi gói đăng ký App Store và Google Play theo chính ID tài khoản của bạn, nên một khách hàng trả tiền hai lần sẽ hiện ra là một người với hai gói, trước khi ngân hàng của họ phát hiện.
Câu hỏi thường gặp
- Vì sao khách hàng bị tính phí hai lần cho cùng một gói đăng ký?
- Thường là vì họ đã mua trên hai nền tảng, chẳng hạn App Store và Google Play, hoặc một cửa hàng và website của bạn. Mỗi cửa hàng tự tính phí gói đăng ký của mình và không biết về bên kia, nên cả hai cứ gia hạn cho đến khi một gói bị hủy.
- Tôi có thể hoàn tiền gói đăng ký App Store cho khách hàng không?
- Không. Chỉ Apple mới hoàn tiền được cho giao dịch mua trên App Store. Bạn có thể mở bảng hoàn tiền của Apple ngay trong ứng dụng bằng beginRefundRequest của StoreKit, hoặc hướng khách đến reportaproblem.apple.com. Apple cho biết việc chấp thuận hoặc từ chối yêu cầu mất tối đa 48 giờ.
- Làm sao để hoàn tiền một gói đăng ký Google Play bị trùng lặp?
- Hoàn tiền đơn hàng từ Order management trong Play Console, hoặc gọi API orders.refund. Hoàn tiền đơn hàng gần nhất sẽ gỡ gói đăng ký ngay lập tức và hủy các kỳ gia hạn sau. API không hoàn tiền được cho đơn hàng cũ hơn 3 năm.
- Hoàn tiền gói đăng ký có đồng thời hủy gói đó không?
- Trên Google Play, hoàn tiền đơn hàng gần nhất sẽ hủy các kỳ gia hạn sau, nhưng hoàn tiền một đơn hàng cũ hơn thì gói đăng ký vẫn hoạt động. Trên App Store, hoàn tiền là quyết định của Apple và khách tự hủy gói đăng ký trong tài khoản Apple.
- Làm sao để ngăn người dùng đăng ký hai lần trên iOS và Android?
- Gắn ID tài khoản của chính bạn vào mọi giao dịch mua, bằng appAccountToken trên Apple và ID tài khoản đã được làm mờ trên Google Play. Sau đó kiểm tra máy chủ xem đã có gói đang hoạt động trên bất kỳ nền tảng nào chưa trước khi hiển thị paywall, và yêu cầu người dùng đăng nhập trước.
Nguồn và tài liệu đọc thêm
- Apple Support: Request a refund for apps or content that you bought from Apple
- Apple Developer: beginRefundRequest(in:)
- Apple Developer: Send Consumption Information
- Apple Developer: appAccountToken
- Play Console Help: Manage your app's orders and issue refunds
- Google Play Developer API: orders.refund
- Google Play Help: Apps, games, and in-app purchases refund policies
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
Chế độ tự động xử lý hoàn tiền cho App Store và Google Play
Đọc tiếp
Nếu ứng dụng của bạn bị gỡ khỏi Google Play hoặc App Store, tiền hoàn vẫn có thể bị trừ vào khoản thanh toán của bạn
Ứng dụng bị gỡ khỏi Google Play hoặc App Store sẽ ngừng tạo doanh thu, nhưng các thỏa thuận của cửa hàng vẫn buộc bạn chịu trách nhiệm hoàn tiền và cho phép Apple và Google giữ lại khoản thanh toán của bạn. Dưới đây là nội dung từng thỏa thuận, điều gì xảy ra với người đăng ký và cái giá của một lần bị gỡ.
Xóa tài khoản ứng dụng không hủy gói đăng ký, và các yêu cầu hoàn tiền sau đó vẫn có thể đổ về bạn
Apple và Google Play bắt buộc bạn cho phép xóa tài khoản ứng dụng, nhưng xóa tài khoản không dừng việc tính phí ở cửa hàng nào cả. Bài viết này nêu yêu cầu của từng cửa hàng, vì sao một tài khoản đã bị xóa sạch có thể khiến bạn không còn gì để trả lời CONSUMPTION_REQUEST hay một đợt xem xét chargeback, và bạn nên giữ lại những gì.