모든 글
Deep dive8분 소요

Google Play 구매를 사흘 안에 확인하지 않으면 Google이 환불합니다. 그것이 당신에게 얼마의 손실을 주는지

서버가 사흘 안에 확인하지 않은 구매를 Google Play는 자동으로 환불하고 취소합니다. 이것은 고객의 결정이 아니라 통합 실수이며, 완전히 예방할 수 있습니다. 정확한 규칙과 그것이 왜 발동하는지, 잃어버린 매출 한 건이 실제로 얼마의 비용인지 설명합니다.

스마트폰 옆에서 모래가 다 떨어지는 모래시계. Google Play 구매가 자동 환불되기 전에 확인할 수 있는 사흘의 창을 나타낸다

핵심 요약

  • 앱이 사흘 안에 구매를 확인하지 않으면 Google Play는 자동으로 구매자에게 환불하고 구매를 취소합니다. 이것은 고객의 결정이 아니라 통합 실수이며, 서버 측에서 완전히 예방할 수 있습니다.
  • 사흘 카운트다운은 구매 상태가 PURCHASED가 될 때 시작되며, 결제 시작 시점이 아닙니다. PENDING에 머물러 있는 구매는 아직 카운트다운이 시작되지 않았으며, 이 시점에서 확인해서는 안 됩니다.
  • 요구 사항을 충족하는 방법은 두 가지입니다. purchases.products.consume로 소비성 상품을 소비하는 것과, purchases.products.acknowledge 또는 purchases.subscriptions.acknowledge로 비소비성 상품이나 구독을 확인하는 것 모두 확인으로 인정됩니다.
  • 확인이 필요한 것은 최초 구독 구매뿐입니다. 갱신은 필요 없으며, Google이 자동으로 ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED로 표시합니다.
  • 일주일보다 짧은 선불 요금제는 요금제 기간의 절반 안에 확인해야 하며, 이는 표준 사흘보다 더 촉박한 기한입니다.
  • 환불은 판매 가격을 회수하지만, 제품을 전달하기 위해 이미 쓴 연산, 모델 API 호출, 스토리지, 크리에이터 지급액은 돌려받지 못합니다. 당신이 잃는 돈은 항목 한 줄보다 큽니다.
  • Apple에는 이에 상응하는 것이 없습니다. 완료되지 않은 StoreKit 거래는 당신이 완료할 때까지 다시 전달되지만, Apple은 결코 자동 환불하지 않습니다. 이 장애 유형은 Google Play에만 있습니다.

한 고객이 당신의 제품을 구매하고 결제가 승인되었는데, 사흘 뒤 Google Play가 조용히 환불하고 당신이 전달한 것을 도로 가져갑니다. 아무도 그 환불을 요청하지 않았습니다. 고객이 신청하지도, 어떤 상담원이 승인하지도 않았습니다. 그것이 발동한 이유는 당신의 서버가 구매가 처리되었다고 Google에 한 번도 알리지 않았기 때문입니다. Google Play 구매를 사흘 안에 확인하지 않으면, Google은 매번 구매자에게 환불하고 구매를 취소합니다. 이것은 두 스토어를 통틀어 몇 안 되는, 전적으로 당신의 통합으로 예방할 수 있는 환불 중 하나이며, 매출이 새어 나가는 가장 조용한 방법 중 하나입니다.

이것은 사기 문제도 정책 분쟁도 아닙니다. 그저 놓친 콜백입니다. 수정은 작고 그것을 건너뛴 대가는 진짜 돈이므로, 규칙을 정확히 알아 둘 가치가 있습니다. 규칙이 무엇인지, 왜 구매가 확인되지 않은 채 빠져나가는지, 그리고 잃어버린 매출 한 건이 실제로 무엇을 가져가는지를요.

사흘 규칙이 실제로 말하는 것

Google의 Play Billing 문서는 이 점에 대해 단도직입적입니다. 앱이 권한을 부여하고 구매가 성공했다고 사용자에게 알린 뒤, 구매가 처리되었음을 Google에 알려야 합니다. Google의 표현으로는, 이것은 "구매가 자동으로 환불되고 권한이 취소되지 않도록 사흘 안에 이루어져야 한다"라고 되어 있습니다. 일회성 제품 페이지도 누그러뜨림 없이 되풀이합니다. "사흘 안에 구매를 확인하지 않으면 사용자는 자동으로 환불을 받고, Google Play는 구매를 취소합니다." 구독도 최초 구매에 대해 동일한 규칙을 가집니다.

확인은 형식이 아니라 신호입니다. 그것은 권한이 사용자에게 도달했음을 Google에 알립니다. Google은 그 신호의 부재를 일어나지 않은 전달로 취급하고, 고객을 대신해 거래를 되돌립니다. 구매자 입장에서는 신청한 적도 없는 공짜 환불처럼 보입니다. 당신 입장에서는 증발해 버린 판매처럼 보입니다.

카운트다운은 PURCHASED에서 시작되며, 결제에서 시작되지 않는다

사흘 창은 사용자가 구매를 탭할 때 시작되지 않습니다. 구매 상태가 PURCHASED로 전환될 때 시작됩니다. 구매는 먼저 PENDING에 머물 수 있는데, 현금 결제, 느린 계좌 이체, 또는 부모가 자녀의 요청을 승인하는 경우에 발생합니다. Google은 분명히 말합니다. "사흘 확인 창은 구매 상태가 PENDING에서 PURCHASED로 전환될 때에만 시작됩니다."

여기에는 두 가지 결과가 따릅니다. 권한은 상태가 PURCHASED일 때만 부여하고, 절대 PENDING에서 부여하지 마십시오. 그렇지 않으면 결코 완료되지 않을 수도 있는 결제에 대해 제품을 나눠 주는 셈입니다. 그리고 PENDING 구매를 확인하지도 마십시오. BillingClient를 구성할 때 enablePendingPurchases()를 호출하고, 전환을 기다린 다음, 그때서야 머릿속으로 확인 카운트다운을 시작하십시오.

확인할 것인가 소비할 것인가, 그리고 어느 쪽이 당신의 의무인가

요구 사항을 충족하는 방법은 두 가지이며, 어느 것을 쓰는지는 제품에 달려 있습니다. 둘 다 사흘 기한을 지킵니다. 차이는 그 외에 무엇을 하는지입니다.

소비성 상품이라면 소비합니다. 안전한 백엔드에서는 purchases.products.consume이고, Play Billing Library의 클라이언트 측에서는 consumeAsync()입니다. 소비는 구매를 확인하는 동시에 제품을 다시 구매 가능하게 만드는데, 이는 코인, 크레딧, 일회성 생성에 대해 바로 당신이 원하는 것입니다. 비소비성 상품이나 구독이라면 확인합니다. 백엔드에서 purchases.products.acknowledge 또는 purchases.subscriptions.acknowledge, 클라이언트 측에서 acknowledgePurchase()입니다. 확인은 기한을 지키지만 제품을 재구매 가능하게 풀어 주지는 않습니다.

구매 유형기한을 충족하는 호출그 외에 하는 일기한
소비성purchases.products.consume 또는 consumeAsync()제품을 재구매 가능하게도 만듦PURCHASED로부터 3일
비소비성purchases.products.acknowledge 또는 acknowledgePurchase()권한 부여 기록, 재구매 없음PURCHASED로부터 3일
구독, 최초 구매purchases.subscriptions.acknowledge 또는 acknowledgePurchase()새 구독 확정PURCHASED로부터 3일
구독 갱신아무것도 필요 없음Google이 자동으로 확인됨으로 표시해당 없음
일주일 미만의 선불 요금제위와 같이 확인권한 확정요금제 기간의 절반

갱신은 이미 처리되어 있고, 최초 구매는 그렇지 않다

확인의 의무는 구독의 첫 구매에만 있습니다. Google은 "구독 갱신은 확인할 필요가 없다"라고 분명히 밝히고, 갱신에는 스스로 ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED를 찍습니다. 새 구매는 ACKNOWLEDGEMENT_STATE_PENDING로 도착하며, 당신이 처리할 때까지 당신의 책임으로 남습니다. 확인하기 전에 이중으로 확인하지 않도록, 백엔드에서 acknowledgementState를, 클라이언트 측에서 isAcknowledged()를 검사하십시오.

선불 요금제는 도화선이 더 짧다

선불 구독 요금제는 창을 좁힙니다. Google의 규칙은 이렇습니다. 일주일 이상 지속되는 선불 요금제는 사흘 안에 확인해야 하지만, "일주일보다 짧은 기간의 선불 요금제는 요금제 기간의 절반 안에 확인해야 한다"입니다. 사흘짜리 선불 요금제는 사흘이 아니라 하루 반을 줍니다. 짧은 선불 충전을 판다면, 확인 경로는 빠르고 서버 주도여야 하며, 사용자가 앱을 다시 여는 것에 의존해서는 안 됩니다.

애초에 왜 구매가 확인되지 않는가

아무도 확인을 건너뛰려고 작정하지 않습니다. 확인하는 코드가 잘못된 곳에 있어서 빠져나가는 것입니다. 흔한 안티패턴은 구매 흐름이 포그라운드로 돌아올 때만 확인하는 클라이언트입니다. 그것은 구매를 마치고 앱을 계속 쓰는 사용자에게는 작동합니다. 그 밖의 모두에게는 실패합니다.

개발자들은 끊임없이 이 문제에 부딪힙니다. Google 자신의 개발자 커뮤니티의 글타래는 매번 똑같이 읽힙니다. "내 앱에서 구매한 뒤 사흘 후에 사용자가 자동으로 환불되었다"와 "왜 결제가 사흘 후에 자동으로 환불되는가" 같은 표현의 변형들입니다. 답은 거의 항상 같습니다. 앱이 발동할 수 있는 상태에 한 번도 있지 않았기 때문에 확인 호출이 한 번도 발동하지 않았던 것입니다.

무료 체험과 다시는 돌아오지 않는 사용자

가장 나쁜 형태는 무료 체험, 또는 사용자가 앱을 영영 닫기 직전의 구매입니다. 확인이 다음 앱 실행에 의존하는데 다음 앱 실행이 없다면, 구매는 기한이 지나 사라집니다. 사흘째 되는 날 Google은 환불하고 취소합니다. 유료 구독으로 전환되었을 체험이라면, 당신은 결코 받지 못한 첫 청구를 잃고, 더해서 조용히 사라진 고객 권한도 잃습니다. 두 사건 모두 지원 티켓으로 나타나지 않습니다. 그것들은 당신이 직접 찾으러 가야만 발견하는 무효화된 구매로 나타납니다.

확인되지 않은 환불이 실제로 얼마의 비용인가

환불 항목 한 줄은 손실을 과소하게 보여 줍니다. Google이 판매를 되돌릴 때 당신은 가격을 돌려주고, 그것이 눈에 보이는 숫자입니다. 그것이 청구서 전부는 아닙니다.

구매되는 순간 진짜 작업을 촉발하는 소비성 상품을 생각해 보십시오. 한 묶음의 이미지 생성, 모델 공급자 API로의 연이은 호출, 영상 내보내기, 크리에이터에게의 지급. 당신은 그 연산, 그 API 호출, 그 스토리지, 그 지급을 사용 시점에 이미 지불했습니다. 환불은 판매 가격을 고객에게 돌려줍니다. 그것은 공급자의 청구서를 당신에게 돌려주지 않습니다. 당신은 진짜 비용을 전달하고 그 대가로 아무것도 돌려받지 못했습니다.

구독과 체험의 경우, 손실은 결코 받지 못하는 첫 청구와 시작되기도 전에 끝난 고객 관계입니다. 그리고 2026년 8월 3일부터, Google Play는 그 날짜 이후에 접수된 주문에 대해 지불 거절 구매 가격과 은행 수수료를 개발자에게 전가하며, 이는 피할 수 있는 매출 누수를 무엇이든 나중이 아니라 지금 막을 가치가 있게 만듭니다. 확인되지 않은 환불은 지불 거절은 아니지만, 같은 교훈입니다. 이미 쓴 돈은 자동으로 당신이 지키는 돈이 되지 않습니다.

접힌 영수증과 동전 몇 개가 어두운 탁자 너머로 도로 당겨지는 모습. 확인되지 않은 Google Play 구매가 환불되고 취소될 때 이미 쓴 돈을 나타낸다

Google Play 구매를 서버 측에서 확인하는 방법

믿을 수 있는 패턴은 앱을 핵심 경로에서 빼는 것입니다. 백엔드에서, 사용자가 화면을 다시 여는 것이 아니라 알림에 의해 구동되도록 하십시오.

  • Real-time developer notifications를 수신하십시오. ONE_TIME_PRODUCT 구매나 SUBSCRIPTION_PURCHASED 이벤트는, 앱이 열려 있든 아니든, Google이 아는 그 순간에 구매가 존재한다는 것을 당신의 서버에 알립니다.
  • Play Developer API에 대해 구매 토큰을 검증하고, 상태가 PENDING이 아니라 PURCHASED인지 확인하십시오.
  • 사용자를 키로 하여 당신 자신의 기록 안에서 권한을 부여하십시오.
  • 즉시 확인하거나 소비하십시오. 소비성 상품은 소비하고, 비소비성 상품과 최초 구독은 확인합니다. 두 번 확인하는 일이 없도록 먼저 acknowledgementState를 검사하십시오.
  • 클라이언트에서도 보완하십시오. onResume()에서 queryPurchasesAsync()를 호출하여, 앱이 닫혀 있는 동안 완료된 구매도 여전히 처리되도록 하십시오. 이것은 안전망이지, 주된 경로가 아닙니다.

요점은, 확인은 Google이 당신에게 보내는 이벤트에서 발동하는 것이지, 당신이 기댈 수 없는 사용자 행동에서 발동하는 것이 아니라는 점입니다. 구매하고 다시는 돌아오지 않는 사용자도 완전히 보장됩니다. 당신의 서버가 구매가 착지하는 순간에 움직였기 때문입니다.

빠져나간 것을 잡는 대조 그물

깔끔한 파이프라인조차 점검에서 이득을 봅니다. Voided Purchases API는 환불, 취소, 지불 거절된 구매를 나열하고, 그 사유가 구매가 "개발자에 의해 한 번도 확인되지 않았고, 따라서 개발자의 기록에 존재하지 않을 수 있다"인 경우를 지목합니다. 그것을 폴링하면, Google이 이미 되돌린 것에 대해 당신이 부여한 권한을 취소할 수 있습니다. 제한에 유의하십시오. 이 API는 지난 30일간의 무효화된 구매만 반환하므로, 대조는 분기에 한 번이 아니라 일정에 맞춰 실행되어야 합니다.

Apple에는 이에 상응하는 것이 없고, 그것이 중요하다

이것은 특별히 Google Play의 문제입니다. Apple의 StoreKit에도 마무리 단계, 즉 거래를 완료하는 단계가 있지만, 실패 시에는 정반대의 일을 합니다. StoreKit 거래를 결코 완료하지 않으면, Apple은 그것을 대기열에 보관하고 당신의 앱이 실행되거나 옵저버가 붙을 때마다 다시 전달하므로, 권한을 부여할 또 다른 기회를 얻습니다. Apple은 완료되지 않은 거래를 환불하지 않습니다. App Store에는 사흘 자동 환불이 없습니다.

그래서 멘탈 모델은 플랫폼별로 유지되어야 합니다. Google Play에서는 처리되지 않은 구매가 곧 일어날 환불이자 당신이 쫓기고 있는 기한입니다. App Store에서는 처리되지 않은 구매가 곧 일어날 재전달이며 카운트다운은 전혀 없습니다. Apple의 가정을 Android로 옮기는 것이 바로 팀이 설명할 수 없는 미확인 환불의 벽을 떠안게 되는 경위입니다.

이것이 바로 RefundHalt가 스토어 알림이 도착하는 그 순간에 Google Play 구매를 자동으로 확인하고, Voided Purchases API와 대조하여 Google이 나중에 되돌린 구매에 대해 부여된 권한이 살아 있는 채로 남지 않도록 하는 이유입니다. 사흘 규칙은 당신이 질 수 있는 경주이기를 멈추고, 이미 끝난 단계가 됩니다.

자주 묻는 질문

왜 내 Google Play 구매가 사흘 후에 자동으로 환불되었나요?
당신의 앱이 제때 확인하지 않았기 때문입니다. Google Play는 PURCHASED 상태에 도달한 뒤 사흘 안에 확인되지 않은 구매를 자동으로 구매자에게 환불하고 취소합니다. 그것은 고객의 요청도 Google의 벌칙도 아니며, 빠진 확인 호출이고, 스토어 알림에서 서버 측으로 확인하면 없앨 수 있습니다.
구매를 확인하는 것과 소비하는 것의 차이는 무엇인가요?
둘 다 사흘 요구 사항을 충족합니다. 소비성 상품은 purchases.products.consume 또는 consumeAsync()로 소비하며, 이는 제품을 다시 구매 가능하게도 만듭니다. 비소비성 상품이나 구독은 purchases.products.acknowledge, purchases.subscriptions.acknowledge, 또는 acknowledgePurchase()로 확인하며, 이는 권한을 확정하지만 제품을 재구매 가능하게 풀어 주지는 않습니다.
Google Play 구독 갱신을 확인해야 하나요?
아니요. 확인이 필요한 것은 최초 구독 구매뿐입니다. Google은 갱신의 확인을 요구하지 않으며 자동으로 ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED로 표시합니다. 새 구매는 ACKNOWLEDGEMENT_STATE_PENDING로 도착하며, 당신이 처리할 때까지 당신의 책임으로 남습니다.
구매가 아직 PENDING인 동안에 확인해도 되나요?
아니요. 확인은 구매 상태가 PURCHASED일 때만 해야 합니다. 현금 결제나 부모 승인 요청 같은 PENDING 구매는 아직 사흘 카운트다운이 시작되지 않았습니다. 상태가 PENDING에서 PURCHASED로 전환된 뒤에만 권한을 부여하고 확인하십시오.
Apple은 내가 완료하지 않은 구매를 환불하나요?
아니요. Apple의 StoreKit은 완료되지 않은 거래를 당신의 앱이 실행될 때마다 당신이 완료할 때까지 다시 전달하지만, 결코 자동 환불하지 않습니다. 미확인 구매에 대한 사흘 자동 환불은 Google Play에만 있으므로, 두 플랫폼은 서로 다른 처리가 필요합니다.
구매가 이미 미확인을 이유로 환불된 경우 어떻게 회복하나요?
환불을 되돌릴 수는 없지만 대조는 할 수 있습니다. Voided Purchases API를 폴링하십시오. 지난 30일간의 환불 및 취소된 구매를 나열하고 한 번도 확인되지 않아 무효화된 것들에 플래그를 붙이므로, 당신이 부여한 권한을 취소할 수 있습니다. 앞으로는 스토어 알림에서 확인하여 다음 것이 빠져나가지 않도록 하십시오.

출처 및 추가 자료

RefundHalt

App Store와 Google Play 환불 자동 처리

계속 읽기

다음 환불 요청은 이미 오고 있습니다.

이의를 제기하지 못한 환불에 관한 지원 이메일을 하나 더 읽는 시간이면 RefundHalt 설정을 마칠 수 있습니다.