Chargeback đầu tiên tôi từng bỏ lỡ xảy ra vào lúc 11:40 tối thứ Bảy. Tôi chỉ biết được điều đó vì đã lục lại log Pub/Sub vào thứ Hai và phát hiện nó nằm im trong một topic mà không ai tiêu thụ (consume).
Đó là trước ngày 3 tháng 8 năm 2026. Thời điểm đó, thua một vụ chargeback chỉ khiến bạn mất đơn hàng đó và không mất thêm gì nhiều.
Google Play hiện chuyển chi phí chargeback sang cho nhà phát triển đối với các đơn hàng được đặt sau ngày đó. Bạn sẽ phải chịu khoản tiền bằng giá trị đơn hàng trừ đi phí dịch vụ của họ, cộng thêm một khoản phí mạng thẻ (card-network fee) từ $15 đến $25 mỗi vụ. Đổi lại, họ cũng cho bạn thứ gì đó: Review Refund API, và khoảng 24 giờ để nộp bằng chứng.
Vậy câu hỏi không phải là liệu bạn có xử lý chargeback hay không. Mà là thứ gì sẽ xử lý chúng vào lúc nửa đêm. Phần thiết lập được trình bày tại giải pháp phòng vệ chargeback Google Play. Đây là bản đầy đủ: bốn phương án, trong đó có hai phương án tôi sẽ khuyên hầu hết các nhóm không nên chọn.
Những điểm chính
Việc xử lý chargeback Google Play chỉ có một điểm nhập duy nhất: ReviewRefund API, trong vòng 24 giờ kể từ khi nhận Pending Refund Review Notification.
Google chỉ ghi nhận lệnh gọi đầu tiên của bạn và bỏ qua tất cả các lệnh sau đó, dù vẫn trả về OK. Chỉ có một cơ hội duy nhất, không thể sửa lại.
Chỉ chargeback mới có thể tranh chấp. Hoàn tiền qua hỗ trợ, hoàn tiền Play trong 48 giờ và các bản thử nghiệm chưa được xác nhận (unacknowledged trials) đều được quyết định mà không có sự tham gia của bạn.
Bốn phương án thay thế thực tế: tự xây dựng, sử dụng nền tảng subscription bạn đang dùng, mua phần mềm, hoặc chấp nhận chịu lỗ.
Bài toán chi phí đã thay đổi từ ngày 3 tháng 8 năm 2026. Bỏ lỡ một khoảng thời gian phản hồi với một gói hàng năm $99 sẽ khiến bạn mất giá trị đơn hàng đó cộng thêm một khoản phí mạng thẻ.
Việc xử lý thủ công thực tế trông như thế nào
Công bằng mà nói, "thủ công" bao gồm một dải khá rộng. Ở một đầu, đó là một hộp thư chung và ai đó kiểm tra Play Console khi họ nhớ ra. Ở đầu khác, đó là một lịch trực, một kênh Slack, một bảng tính theo dõi các đơn hàng đang tranh chấp.
Phiên bản thứ hai tốt hơn. Nhưng nó vẫn thất bại, vì những lý do không liên quan đến mức độ nỗ lực.
Thứ nhất, bạn không thể nhìn thấy đồng hồ đang chạy. 24 giờ bắt đầu tính từ khi một PendingRefundReviewNotification đến được topic Pub/Sub của bạn. Chưa bao giờ bật real-time developer notifications? Sẽ không có gì báo cho bạn biết một đợt review đang mở, và Play Console cũng không hiển thị badge nào cho việc đó.
Thứ hai, và điều này khiến nhiều người bất ngờ: Google chỉ ghi nhận lệnh gọi ReviewRefund đầu tiên của bạn và bỏ qua mọi lệnh gọi sau đó, nhưng vẫn trả về OK. Trông như thể mọi thứ đã thành công. Việc ai đó gõ phản hồi vào một script lúc 9 giờ sáng, dựa trên dữ liệu được kéo ra bằng tay, chính là cách bạn điền sai một trường dữ liệu mà không thể hoàn tác.
Cố gắng hơn nữa cũng không giải quyết được cả hai vấn đề này.
Quy trình chargeback của Google Play
Đáng để trình bày rõ, vì khoảng thời gian cho phép ngắn hơn nhiều người nghĩ.
Khách hàng tranh chấp giao dịch với ngân hàng của họ. Không phải với bạn, cũng không phải với Google.
Google đánh dấu đơn hàng để review và gửi một PendingRefundReviewNotification qua RTDN, mang theo một pendingRefundToken, orderId, một refundReason có giá trị 7 (tức CHARGEBACK) và obfuscatedAccountId của bạn nếu bạn đã đặt nó tại thời điểm mua.
Bạn có khoảng 24 giờ để gọi ReviewRefund cùng với một preference và bất kỳ bằng chứng nào bạn có thể thu thập được.
Google sử dụng những thông tin đó để tranh luận với ngân hàng.
Nếu thua, và với các đơn hàng được đặt sau ngày 3 tháng 8 năm 2026, chi phí sẽ do bạn chịu.
Có một điểm bất đối xứng đáng để suy ngẫm. Apple hỏi ý kiến về các khoản hoàn tiền thông thường qua CONSUMPTION_REQUEST. Google Play chỉ mở review cho chargeback. Mọi trường hợp khác đều được quyết định mà không có bạn, và bạn chỉ biết được qua một voided purchase. Cơ chế đầy đủ: Giải thích chi tiết về chargeback Google Play.
Phương án 1: Tự xây dựng handler
Một topic Pub/Sub. RTDN được bật trong mục Monetize, sau đó là Monetization setup. Một push endpoint xác thực tin nhắn trước khi tin tưởng nó. Sau đó giải mã trường data dạng base64, phân nhánh theo một trong năm notification object xuất hiện, khớp đơn hàng với người dùng, thu thập bằng chứng, và gọi ReviewRefund với một OAuth token có phạm vi hạn chế (scoped).
Việc xây dựng không phải là phần tốn kém. Chỉ mất hai tuần, nếu bạn đã quen với việc dựng webhook.
Năm thứ hai mới là phần tốn kém. Google thay đổi một trường dữ liệu. Một OAuth refresh token hết hạn âm thầm vào một ngày Chủ Nhật. Handler của bạn ngừng hoạt động đúng vào đêm có một vụ tranh chấp $200 xuất hiện, và chuyện luôn diễn ra kiểu đó. Bạn sẽ cần observability, khả năng xử lý replay, và các bài test cho những dạng notification mà bạn chưa từng gặp.
Nếu bạn đang vận hành một backend và hoàn tiền là một khoản doanh thu đáng kể, hãy tự xây dựng. Tôi thà bạn làm vậy. Nhưng nếu bạn là một người đơn lẻ đang tự ra sản phẩm, đây là cách tiêu tốn thời gian trong tháng một cách không đáng.
Phương án 2: Sử dụng nền tảng subscription bạn đang trả tiền
Hãy kiểm tra điều này trước khi viết bất kỳ dòng code nào. RevenueCat đã bổ sung Review Refund API của Google trong mục Refund Control, và Adapty có Refund Saver cho phía Apple.
Điểm hấp dẫn: các receipt, entitlement và dữ liệu khớp khách hàng của bạn đã sẵn có ở đó, nên bằng chứng dễ lấy hơn và việc khớp tài khoản đã được giải quyết.
Giới hạn: phản hồi hoàn tiền chỉ là một tính năng đối với họ, không phải là sản phẩm chính. Hãy kỳ vọng một preference và vài cờ (flag) đơn giản, không phải 1,000 usage event kèm địa chỉ IP. Với nhiều ứng dụng, như vậy là đủ. Nhưng với các tranh chấp liên quan nhiều đến gian lận, như vậy là chưa đủ.
Phương án 3: Phần mềm quản lý chargeback Google Play chuyên dụng
Danh mục này gần như không tồn tại trước ngày 3 tháng 8, điều đó cho thấy động lực này mới xuất hiện gần đây đến mức nào.
Hình thức hoạt động khá nhất quán. Dịch vụ sẽ đăng ký nhận RTDN của bạn, nộp một đề xuất từ chối (decline recommendation) kèm bằng chứng giao hàng và mức độ sử dụng trong khoảng thời gian cho phép, và theo dõi kết quả của từng vụ.
Refund Sensor làm điều đó cho cả Google Play và App Store từ một tài khoản duy nhất. Đăng nhập bằng Google, cấp hai quyền Play Console (xem dữ liệu tài chính, quản lý đơn hàng và subscription) và nó sẽ tự tạo topic Pub/Sub. Không cần SDK, không cần thay đổi code, không cần nộp lại bản build.
Đánh đổi: thêm một nhà cung cấp, thêm một khoản chi hàng tháng. Thứ bạn nhận lại là bạn không còn phải là người luôn phải thức canh.
Phương án 4: Chấp nhận chịu lỗ
Đây là lựa chọn hợp lý với một số ứng dụng, và tôi sẽ không phủ nhận điều đó. Bán một sản phẩm tiêu dùng (consumable) $1.99, gặp bốn vụ chargeback một năm, thì hai tuần công sức kỹ thuật sẽ không bao giờ đáng để bỏ ra.
Nhưng hãy làm phép tính trước. Một vụ chargeback thua trên một gói hàng năm $99 sẽ khiến bạn mất giá trị đơn hàng trừ đi phí dịch vụ của Google, cộng thêm một khoản phí mạng thẻ từ $15 đến $25. Hai vụ như vậy trong một quý sẽ làm thay đổi câu trả lời.
Cách tự động hóa việc xử lý chargeback Google Play
Nếu bạn chọn phương án một, đây là trình tự xây dựng. Thứ tự thực hiện quan trọng hơn nhiều người nghĩ.
Bật RTDN trong Play Console, tạo topic Pub/Sub. Nhấn Send Test Message trước khi tin tưởng đường truyền này.
Giải mã trường data và phân nhánh theo notification object nào vừa đến. Mỗi tin nhắn chỉ chứa một object. Khi nhận pendingRefundReviewNotification, lưu lại pendingRefundToken và bắt đầu một bộ đếm thời gian. Không phải một email. Một bộ đếm thời gian.
Khớp orderId với một người dùng. obfuscatedAccountId là con đường nhanh nhất, và riêng điều đó đã là lý do để bắt đầu thiết lập nó từ lúc mua hàng.
Thu thập bằng chứng: sampleContentProvided, consumptionPercentageMilliunits (45200 nghĩa là 45.2%), và tối đa 1,000 consumptionUsageEvents kèm timestamp và địa chỉ IP.
Gọi orders.reviewrefund một lần duy nhất, với một refundPreference là APPROVE, DECLINE hoặc NEUTRAL. Ghi log lại lệnh gọi, payload và response.
Riêng biệt, xử lý voidedPurchaseNotification để gỡ quyền truy cập, và chạy Voided Purchases API mỗi đêm để đối soát. API này bị giới hạn ở mức 6,000 lệnh gọi mỗi ngày.
Bước cuối cùng đó là bước mà hầu như ai cũng bỏ qua. Tôi đã bỏ qua nó trong nhiều tháng. Notification có thể bị mất khi xảy ra sự cố, và pull API là cách để bạn tìm ra những gì đã xảy ra trong lúc hệ thống gặp trục trặc. Voided Purchases API so với real-time developer notifications giải thích rõ feed nào làm việc gì.
Phòng ngừa chargeback Google Play
Rẻ hơn tất cả các phương án trên, và nó có hiệu quả với cả những tranh chấp bạn không bao giờ ngờ tới.
Một khách hàng liên hệ được với bộ phận hỗ trợ của bạn sẽ không cần liên hệ với ngân hàng của họ. Một đường liên hệ rõ ràng trong ứng dụng, cộng với việc phản hồi trong vòng một ngày, sẽ loại bỏ một tỷ lệ đáng kinh ngạc các tranh chấp trước khi chúng xảy ra.
Sau đó, hãy làm cho việc gia hạn trở nên rõ ràng: giá, kỳ hạn và ngày gia hạn nằm trên cùng màn hình với nút mua. Sự bất ngờ là nguyên nhân gây ra nhiều tranh chấp hơn bất cứ điều gì khác mà tôi từng thấy.
Còn hai điều nữa chưa được chú ý đúng mức. Theo dõi các giao dịch unacknowledged purchases, vì các bản thử nghiệm chuyển đổi mà không ai để ý sẽ biến thành chargeback một tháng sau đó. Và sử dụng voidedReason như một tín hiệu gian lận. Nó có chín giá trị, bao gồm fraud, friendly_fraud và chargeback, và những tài khoản đó thường lặp lại hành vi này. Hãy đánh dấu (flag) họ trước khi cấp thêm một bản thử nghiệm khác.
Hãy giữ tỷ lệ chargeback của bạn dưới ngưỡng của Google. Các vấn đề kéo dài sẽ ảnh hưởng đến uy tín tài khoản, điều này còn tệ hơn bất kỳ khoản hoàn tiền đơn lẻ nào.
Nguồn tham khảo
Câu hỏi thường gặp
Hoàn tiền được xử lý qua Google, do Google hoặc chính bạn quyết định trong Play Console. Chargeback là khi khách hàng liên hệ với ngân hàng của họ, khiến vụ việc chịu sự chi phối của các quy tắc mạng thẻ (card-network). Chỉ chargeback mới mở ra một đợt review mà bạn có thể phản hồi, và chỉ chi phí của chargeback mới được chuyển sang cho bạn.
Khoảng 24 giờ tính từ PendingRefundReviewNotification. Thời gian bắt đầu tính từ lúc thông báo được gửi đến, không phải từ lúc bạn nhận thấy nó.
Google sẽ tranh luận về chargeback mà không có bằng chứng từ bạn, đây là vị thế yếu nhất có thể có. Với các đơn hàng được đặt sau ngày 3 tháng 8 năm 2026, nếu thua, bạn sẽ mất giá trị đơn hàng trừ đi phí dịch vụ, cộng thêm một khoản phí mạng thẻ (network fee).
Không. Google chỉ ghi nhận lệnh gọi ReviewRefund đầu tiên của bạn và bỏ qua tất cả các lệnh gọi sau đó, dù vẫn trả về OK. Hãy kiểm thử với một giao dịch mua thử trước khi đưa vào production.
Bất kỳ phần mềm nào có thể tự nộp phản hồi mà không cần bạn phải thức canh. Nếu bạn đang vận hành một backend, tự xây dựng là một dự án hợp lý. Nếu không, phần mềm quản lý hoàn tiền Google Play kết nối qua quyền Play Console sẽ tốt hơn việc tự viết một Pub/Sub consumer chỉ để xử lý một trường hợp hiếm gặp.
Không. Bạn đang đưa ra đề xuất thông qua chính Play Developer API của Google, được hỗ trợ bởi bằng chứng giao hàng và sử dụng. Đó chính là kênh mà Google xây dựng cho mục đích này.



