Google Play의 지불 거절 심사는 반격할 24시간을 줍니다. 무엇을 보내야 하는지 알아봅시다
은행이 Google Play 결제를 취소하면 Google은 당신의 서버로 PendingRefundReviewNotification을 보내고 24시간 카운트다운을 시작합니다. ReviewRefund API를 통해 환불 선호와 실제 소비 증거로 응답하지 않으면 이 분쟁은 당신 없이 결정됩니다. 여기서 그 전체 흐름을 필드별로 살펴봅니다.

핵심 요약
- Google Play 지불 거절 심사는 고객의 은행이 결제를 취소하고 Google Play가 당신의 서버로 PendingRefundReviewNotification을 보낼 때 시작됩니다. 그 알림으로부터 24시간 안에 ReviewRefund API로 응답해야 합니다.
- 지불 거절 심사는 개발자에게 증거를 요구하는 유일한 Android 환불 흐름입니다. 48시간 셀프서비스 환불, 지원팀 환불, 무효화된 구매는 모두 당신 없이 결정됩니다.
- 응답은 orders.reviewrefund를 호출해서 하며, APPROVE, DECLINE 또는 NEUTRAL의 refundPreference와 함께 consumptionPercentageMilliunits 값과 선택적인 소비 사용 이벤트 목록이라는 증거를 첨부합니다.
- Google Play는 특정 알림에 대한 당신의 첫 ReviewRefund 호출만 기록합니다. 이후의 모든 호출은 무시되지만 여전히 OK를 반환하므로, 첫 응답이 완전하고 정확해야 합니다.
- 이 알림은 pendingRefundToken과 orderId를 담고 있으며, 보류 심사가 지원하는 유일한 환불 사유는 CHARGEBACK으로, 코드 7로 도착합니다.
- consumptionPercentageMilliunits는 밀리 단위로 측정되므로 100000은 고객이 구매한 것의 100%를 사용했음을 의미합니다. 이것이 제품이 완전히 전달되었음을 Google Play에 알리는 방법입니다.
- 2026년 8월 3일부터 개발자는 진 모든 분쟁에서 구매 가격에서 Play의 서비스 수수료를 뺀 금액에 은행의 지불 거절 수수료를 더한 만큼을 부담합니다. 그래서 응답하지 않은 지불 거절 심사는 당신 자신의 수익에 대한 직접적인 청구가 됩니다.
고객의 은행이 Google Play 결제를 취소할 때, Google Play는 그저 환불하고 넘어가지 않습니다. 당신의 서버로 PendingRefundReviewNotification을 보내고 24시간 카운트다운을 시작합니다. ReviewRefund API를 통해 그 알림에 환불 선호와 고객이 실제로 무엇을 사용했는지에 대한 증거로 응답하면, Google Play는 지불 거절에 이의를 제기하는 방식에 당신의 의견을 반영합니다. 침묵하면, 제품이 어떻게 소비되었는지 아는 유일한 당사자가 한마디도 하지 않은 채 분쟁이 마무리됩니다.
Google Play 지불 거절 심사는 당신에게 증거를 요구하는 유일한 Android 환불 흐름이며, Apple의 CONSUMPTION_REQUEST에 대응하는 직접적인 상대입니다. 이것은 예전보다 지금 더 중요합니다. 2026년 8월 3일부터 Google Play는 지불 거절 비용을 개발자에게 옮기므로, 당신이 응답하지 못한 분쟁은 Google이 아니라 당신의 계정에서 나갑니다. 여기서 이 알림이 무엇을 담고 있는지, 당신이 무엇을 돌려보내는지, 증거를 구성하는 필드, 그리고 침묵이 어디서 돈으로 바뀌는지를 정확히 살펴봅니다.
Google Play 지불 거절 심사가 실제로 무엇인가
지불 거절은 환불 요청이 아닙니다. 고객은 자신의 은행이나 카드 네트워크로 가서 결제에 이의를 제기하고, 은행은 자금을 되돌려 가져갑니다. Google Play는 이들 대부분을 자체적으로 처리합니다. 그중 일부에 대해서는 심사를 열고 먼저 당신에게 묻습니다. 주문이 전달되었는지, 그리고 고객이 그중 얼마나 소비했는지라는, Google이 갖고 있지 않은 정보를 당신이 쥐고 있기 때문입니다. 그 심사가 바로 ReviewRefund API 뒤에 있는 흐름입니다.
여기가 Android 환불 시스템에서 당신의 증거가 결과를 바꾸는 유일한 곳입니다. 다른 모든 Google Play 환불 경로는 당신 없이 진행됩니다. 고객은 구매 후 48시간 이내에 셀프서비스로 환불할 수 있고, 지원팀도 환불을 승인할 수 있으며, 확인되지 않은 구매는 자동 환불되고, 모두 Google이 결정합니다. 지불 거절 심사는 예외이며, 당신이 실제로 참여할 수 있는 유일한 환불 대화로 다룰 가치가 있습니다.
이것은 Apple 증거 창의 Android 버전입니다
두 개의 스토어, 개발자에게 증거를 요구하는 두 개의 흐름, 그것이 목록의 전부입니다. Apple은 CONSUMPTION_REQUEST를 보내고 Send Consumption Information으로 응답할 12시간을 줍니다. Google Play는 PendingRefundReviewNotification을 보내고 orders.reviewrefund로 응답할 24시간을 줍니다. 방식은 다르지만 교훈은 똑같습니다. 스토어가 고객이 무엇을 사용했는지 물을 때, 정확한 답이 판매를 지키느냐 돌려주느냐의 갈림길입니다.
실무에서 한 가지 차이가 중요합니다. Apple의 소비 페이로드는 다섯 개의 숫자 필드뿐이고 그 외에는 없습니다. Google Play의 증거는 더 풍부합니다. 소비 비율과 함께 개별 사용 이벤트 목록을 보낼 수 있으며, 각 이벤트에는 타임스탬프, 계정 식별자, 심지어 IP 주소와 대략적인 위치까지 담을 수 있습니다. Google Play는 전달을 설명할 여지를 더 많이 주며, 그것은 더 설득력 있게 만들 여지가 더 많다는 뜻입니다.
24시간 카운트다운과 알림이 당신에게 도달하는 방식
심사는 Real Time Developer Notification으로 당신의 Cloud Pub/Sub 주제에 도착합니다. 당신의 구독 및 구매 이벤트를 전달하는 것과 같은 채널입니다. 메시지는 base64로 인코딩된 페이로드이며 그 안에 pendingRefundReviewNotification 객체가 들어 있습니다. 카운트다운은 당신이 우연히 그것을 읽을 때가 아니라 그 알림이 게시될 때 시작되므로, 하루에 한 번만 폴링하는 소비자는 분쟁을 놓치는 소비자입니다.
PendingRefundReviewNotification, 필드별로
이 알림은 작습니다. 어떤 주문이 심사 중인지 알려 주고, 당신이 인용해서 돌려보내야 하는 토큰을 건네주며, 사유를 명시합니다. 여기 그것이 담고 있는 모든 필드가 있습니다.
| 필드 | 유형 | 의미 |
|---|---|---|
| version | string | 알림 버전, "1.0"에서 시작합니다 |
| pendingRefundToken | string | 이 심사를 식별하는 토큰. ReviewRefund 호출에서 돌려보냅니다 |
| orderId | string | 심사 중인 주문, 예를 들어 GPA.1234-5678-9012-34567 |
| refundReason | int | 환불이 요청된 이유. 보류 심사는 언제나 CHARGEBACK, 코드 7만 담습니다 |
| obfuscatedAccountId | string | 구매 시점에 설정한 계정 id, 설정했다면 |
| obfuscatedProfileId | string | 구매 시점에 설정한 프로필 id, 설정했다면 |
보류 심사를 여는 것은 지불 거절뿐입니다
보류 심사의 refundReason은 항상 CHARGEBACK이며, 정수 7로 전달됩니다. Google Play의 세계에는 다른 환불 사유도 존재하지만, 그것들은 이 흐름을 통해 당신에게 도달하지 않습니다. 당신에게 발언권이 없기 때문입니다. PendingRefundReviewNotification을 본다면, 은행이 결제를 취소했고 Google Play가 그것에 이의를 제기할지 결정하고 있다는 뜻입니다. 그것이 유일한 트리거입니다.
ReviewRefund API를 통해 당신이 돌려보내는 것
당신은 orders.reviewrefund로의 단일 POST로 응답합니다. 전체 경로는 POST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/orders/{orderId}:reviewrefund이며, https://www.googleapis.com/auth/androidpublisher 범위로 승인됩니다. 이는 당신의 Play Developer API 연동이 이미 사용하는 것과 같은 OAuth 범위입니다. 성공하면 빈 본문과 HTTP 200을 반환합니다.
본문이 당신의 주장이 담기는 곳입니다. 알림의 pendingRefundToken을 그대로 돌려보내고, 환불 선호를 밝히고, 소비 증거를 첨부합니다.
당신의 환불 선호는 권고이지 판결이 아닙니다
refundPreference 필드는 세 값 중 하나를 취하며, 그것은 Google Play에 대한 조언이지 최종 결정이 아닙니다. 결과는 여전히 Google이 쥐고 있습니다. 그러나 그것은 Google이 스스로 볼 수 없는 데이터로 뒷받침된 조언이므로 무게를 지닙니다.
| refundPreference | 의미 |
|---|---|
| APPROVE | Google Play가 전액 환불을 승인하기를 선호합니다 |
| DECLINE | Google Play가 환불을 거절하기를 선호합니다 |
| NEUTRAL | 선호가 없으며 Google Play에 맡깁니다 |
| REFUND_PREFERENCE_UNSPECIFIED | 기본 센티넬 값, 실제 응답에서는 사용하지 않습니다 |
DECLINE를 뒷받침하는 증거 필드
맨 DECLINE는 증명 없는 주장입니다. 소비 필드가 그 증명입니다. consumptionPercentageMilliunits는 밀리 단위의 정수여서 100000은 고객이 구매한 것의 100%를 소비했음을, 50000은 절반을 나타냅니다. consumptionUsageEvents는 선택적 배열이며, 각 이벤트는 obfuscatedAccountId, obfuscatedProfileId, consumptionTime, ipAddress, consumptionItemDescription, 그리고 대략적인 location을 담을 수 있습니다. sampleContentProvided는 유료 콘텐츠의 무료 샘플을 고객에게 제공한 경우를 위한 불리언입니다. 이것들은 함께 Google Play 자체의 스키마로 제품이 전달되고 사용되었음을 말해 줍니다.

당신의 첫 호출이 당신의 유일한 호출입니다
Google Play는 하나의 알림에 대해 당신이 하는 첫 ReviewRefund 호출을 기록하고 그 이후의 모든 호출을 무시하지만, 여전히 OK 상태를 반환합니다. 초안도 없고 수정도 없습니다. 만약 당신의 첫 응답이 파이프라인이 준비되지 않아서 증거 없이 서둘러 낸 NEUTRAL이라면, 그것이 기록에 남는 응답이 되고, 완전한 소비 이력을 담은 이후의 호출은 조용히 버려집니다. 무엇이든 보내기 전에 완전한 답을 만들어 두십시오.
이 심사가 당신에게 금전적으로 치르게 하는 것
여러 해 동안 진 Google Play 지불 거절은 개발자에게 판매액 정도만 잃게 했을 뿐 그 외에는 거의 없었습니다. Google Play가 하류 수수료를 부담했기 때문입니다. 그것은 2026년 8월 3일에 끝납니다. 그 날짜 이후에 이루어진 주문에 대해 Google Play는 지불 거절 비용을 개발자와 나누며, 개발자의 몫은 구매 가격에서 Play의 서비스 수수료를 뺀 금액에 금융 기관이 부과하는 관련 지불 거절 수수료를 더한 것입니다. Google Play는 서비스 수수료 부분을 계속 부담합니다. 은행 수수료는 당신 쪽 장부에 얹히는 새로운 무게입니다.
환불은 결코 진짜 숫자가 아닙니다
분쟁은 고객의 결제를 돌려주지만, 그 결제가 당신의 유일한 비용이었던 적은 없습니다. 생성된 동영상, 한 묶음의 모델 API 호출, 크리에이터 정산금, 당신이 마련한 스토리지, 그 모든 돈은 주문이 전달된 순간 당신의 계정을 떠났고, 그중 어느 것도 지불 거절과 함께 돌아오지 않습니다. 이제 그 위에 은행의 지불 거절 수수료를 더하십시오. 당신은 공급자 청구서를 지불하고, 판매를 환불하고, 분쟁 수수료를 부담합니다. 방어할 증거를 가지고 있던 하나의 주문에 대해 세 가지 비용을 치르는 것입니다.
Google이 맞서 싸우는 규모
Google Play는 2025년에 US$3.4B의 사기와 남용을 차단했으며 2026년 내내 사기 탐지를 추가하고 있다고 말합니다. 이 비용 분담 변경은 같은 노력의 일부입니다. 개발자에게 증거를 시스템에 공급할 이유를 주고, 시스템은 더 많은 부당한 분쟁에 이의를 제기합니다. ReviewRefund API는 당신의 증거가 그 안으로 들어가는 방법입니다. 빈 응답은 친절한 사기의 지불 거절이 당신의 돈으로 유지되도록 하는 한 표입니다.
알림이 도착하기 전에 준비하는 방법
24시간 창은 문제가 아닙니다. 문제는 당신이 필요로 하는 증거가 분쟁 이전에 존재해야 한다는 것, 즉 토큰이 나타난 후에 재구성하는 것이 아니라 구매와 소비 시점에 포착되어 있어야 한다는 것입니다. 알림이 도착할 때 데이터 수집을 시작하는 팀은 이미 진 것입니다.
구매 시점에 신원을 연결하십시오
모든 구매에서 setObfuscatedAccountId로 obfuscatedAccountId를 설정해, 알림의 계정 id가 당신 시스템의 사용자로 곧바로 매핑되도록 하십시오. 그것을 해시로 유지하고, 64자 이하로 하며, 결코 평문 이메일이나 다른 개인 데이터로 하지 마십시오. 평문 식별자는 구매를 차단당하게 하기 때문입니다. 그 연결이 없으면 pendingRefundToken을 실제 사용 이력에 이을 수 없고, 당신의 DECLINE 뒤에는 아무것도 없습니다.
소비가 일어나는 그대로 기록하십시오
유료 주문이 무엇을, 언제, 누구에게 전달했는지를, 필요할 때 consumptionPercentageMilliunits와 consumptionUsageEvents로 바꿀 수 있는 형태로 기록하십시오.
- 소비의 모든 단위에 타임스탬프를 찍어, 각 이벤트의 consumptionTime이 추정이 아니라 실제가 되도록 하십시오.
- 구매에 대비해 전달을 추적해, 추측하는 대신 자신 있게 소비 비율을 밝힐 수 있도록 하십시오.
- 계정과 프로필 식별자를 사용 기록 옆에 두어, 토큰이 도착하면 이벤트가 한 번의 쿼리로 조립되도록 하십시오.
- 가지고 있다면 요청 IP와 대략적인 위치를 포착하십시오. Google Play는 둘 다 이벤트 필드로 받아들이기 때문입니다.
창 안에서, 자동으로 응답하십시오
24시간 창은 기계에게는 여유롭지만, 깨어서 주의를 기울여야 하는 사람에게는 가혹합니다. 응답은 자동이어야 합니다. 알림이 들어오고, 계정이 조회되고, 소비가 조립되고, 하나의 ReviewRefund 호출이 나가는, 이 모든 것이 사람 없이 진행되어야 합니다. 그것이 바로 RefundHalt가 당신을 위해 운영하는 부분입니다. 우리는 PendingRefundReviewNotification을 대기하다가, 주문을 우리가 그 계정에 대해 이미 추적하는 사용 데이터와 맞추고, 창 안에서 환불 선호와 실제 소비 증거를 담아 orders.reviewrefund에 응답합니다. 토큰이 실이고, 증거가 사건입니다. 둘 다 준비해 두면 당신이 참여할 수 있는 유일한 환불 대화는 당신이 이길 수 있는 대화가 됩니다.
자주 묻는 질문
- Google Play 지불 거절 심사란 무엇인가요?
- Google Play 지불 거절 심사는 이의가 제기된 결제를 결정하기 전에 Google Play가 개발자에게 증거를 요청하는 데 사용하는 흐름입니다. 고객의 은행이 결제를 취소하면 Google Play는 당신의 서버로 PendingRefundReviewNotification을 보내고 ReviewRefund API로 응답할 24시간을 주며, 거기서 환불 선호와 고객이 얼마나 소비했는지에 대한 증거를 제공합니다. 이는 당신의 의견이 결과에 영향을 미치는 유일한 Android 환불 경로입니다.
- Google Play 지불 거절 알림에 응답할 시간은 얼마나 있나요?
- 24시간입니다. Google Play는 PendingRefundReviewNotification을 Real Time Developer Notification으로 보내며, 당신은 그 알림으로부터 24시간 이내에 ReviewRefund API를 호출해야 합니다. 카운트다운은 알림이 당신의 Cloud Pub/Sub 주제에 게시될 때 시작되므로, 당신의 소비자는 일정에 따라 폴링하는 대신 실시간으로 대기하고 있어야 합니다.
- orders.reviewrefund API로 무엇을 보낼 수 있나요?
- 알림의 pendingRefundToken, APPROVE, DECLINE 또는 NEUTRAL의 refundPreference, 그리고 소비 증거를 보냅니다. 증거 필드는 100000이 100% 소비를 의미하는 밀리 단위 정수 consumptionPercentageMilliunits, 이벤트별 타임스탬프, 계정 id, IP 주소, 설명, 위치를 담는 선택적 consumptionUsageEvents 배열, 그리고 sampleContentProvided 불리언입니다. 성공한 호출은 빈 본문과 HTTP 200을 반환합니다.
- ReviewRefund 응답을 보낸 후에 업데이트할 수 있나요?
- 아니요. Google Play는 특정 알림에 대한 당신의 첫 ReviewRefund 호출을 기록하고 이후의 모든 호출을 무시하지만, 여전히 OK 상태를 반환합니다. 초안이나 수정이 없으므로 첫 응답이 완전해야 합니다. 단 한 번의 호출을 하기 전에 환불 선호와 모든 소비 증거를 조립하십시오.
- 2026년 8월 3일 이후 진 Google Play 지불 거절은 얼마나 비용이 드나요?
- 2026년 8월 3일 이후에 이루어진 주문에 대해 개발자는 구매 가격에서 Play의 서비스 수수료를 뺀 금액에 금융 기관이 부과하는 지불 거절 수수료를 더한 만큼을 부담합니다. Google Play는 서비스 수수료 부분을 계속 부담합니다. 이는 당신이 주문을 전달하느라 이미 쓴 컴퓨팅, API 호출, 스토리지, 정산금에 더해지는 것이며, 그중 어느 것도 환불로 돌아오지 않습니다.
- 어떤 환불 사유가 보류 심사 알림을 유발하나요?
- CHARGEBACK뿐이며, 이는 알림 안에 refundReason 코드 7로 도착합니다. 48시간 셀프서비스 창, 지원팀 환불, 무효화된 구매 같은 다른 Google Play 환불은 개발자 없이 결정되며 보류 심사를 열지 않습니다. PendingRefundReviewNotification을 받는다면, 은행이 결제를 취소했고 Google Play가 그것에 이의를 제기할지 결정하고 있다는 뜻입니다.
출처 및 추가 자료
- Android Developers: Help Google dispute chargebacks
- Google Play Developer API: orders.reviewrefund
- Android Developers: Real-time developer notifications reference
- Play Console Help: Updates to refund protection and chargeback cost responsibility
- Google Play Help: Refund policies for apps, games, and in-app purchases
RefundHalt
App Store와 Google Play 환불 자동 처리
계속 읽기
모든 App Store 구매에 appAccountToken을 붙여라. 그러지 않으면 환불에 반박할 수 없다
고객이 환불을 요청하면 Apple은 당신의 서버에 CONSUMPTION_REQUEST를 보내지만, 그 거래에는 상대가 누구인지 전혀 담겨 있지 않습니다. appAccountToken은 구매를 당신의 사용자에게 연결하는 UUID입니다. 이것을 설정하면 실제 데이터로 Apple에 답할 수 있습니다. 건너뛰면 그저 추측할 뿐입니다.
Google Play 구매를 사흘 안에 확인하지 않으면 Google이 환불합니다. 그것이 당신에게 얼마의 손실을 주는지
서버가 사흘 안에 확인하지 않은 구매를 Google Play는 자동으로 환불하고 취소합니다. 이것은 고객의 결정이 아니라 통합 실수이며, 완전히 예방할 수 있습니다. 정확한 규칙과 그것이 왜 발동하는지, 잃어버린 매출 한 건이 실제로 얼마의 비용인지 설명합니다.