모든 글
실전 가이드8분 소요

갱신마다 Google Play 주문 ID가 따로 붙습니다. 환불 전에 확인해야 할 번호가 바로 이것입니다

GPA.1234-5678-9012-34567..2 같은 Google Play 주문 ID는 정확히 한 건의 청구를 가리킵니다. 갱신 접미사를 읽는 법, Play Console이나 Orders API에서 주문을 조회하는 법, 그리고 엉뚱한 주문에 돈을 쓰지 않고 고객이 말하는 청구를 환불하는 법을 정리했습니다.

책상에 앉은 개발자가 Android 휴대전화로 받은 이메일 영수증과 노트북의 주문 목록을 비교하며 Google Play 주문 ID를 올바른 청구와 맞춰 보는 모습

핵심 요약

  • Google Play 주문 ID는 GPA.1234-5678-9012-34567 같은 형식이며, 구독 갱신에는 접미사가 붙습니다. 따라서 GPA.1234-5678-9012-34567..0은 해당 구독의 첫 번째 갱신입니다.
  • Play Billing Library의 getOrderId()는 구독 갱신에 대해 갱신 자체의 ID가 아니라 최초 주문의 주문 ID를 반환하며, 구매가 PENDING 상태인 동안에는 null을 반환합니다.
  • Google은 2025년 5월 21일 Play Developer API의 Orders 리소스에 get과 batchGet을 추가했습니다. batchGet은 중복되지 않는 주문 ID를 1개에서 1,000개까지 받으며, 그중 하나라도 찾지 못하면 요청 전체가 실패합니다.
  • Orders API가 반환하는 Order에는 PENDING, PROCESSED, CANCELED, PENDING_REFUND, PARTIALLY_REFUNDED, REFUNDED 중 하나의 상태와 함께, 부분 환불, 세금, 수수료를 뺀 금액인 developerRevenueInBuyerCurrency가 들어 있습니다.
  • Google Play의 orders.refund 메서드로는 3년이 지난 주문을 환불할 수 없으며, revoke=true를 전달하면 고객의 구독 또는 상품 이용 권한이 즉시 종료됩니다.
  • Play Console에서 '환불 및 취소'(Refund and revoke)는 구독의 가장 최근 주문에 적용되고, '환불만'(Refund only)은 이전 주문에 적용되며 구독은 유지됩니다.
  • 구매 후 48시간 이내의 환불 요청은 Google Play가 직접 처리합니다. 48시간이 지나면 고객을 개발자에게 안내하므로, 주문 ID가 고객지원 받은편지함에 도착하는 것은 보통 이때입니다.

Google Play 고객에게 환불하기 전에 주문 번호의 끝부분을 보세요. GPA.1234-5678-9012-34567은 구독의 첫 번째 청구이고, GPA.1234-5678-9012-34567..2는 세 번째 청구입니다. 둘은 같은 기본 번호를 공유하지만 서로 다른 결제이며, 환불할 때 Play Console도 둘을 다르게 처리합니다. Google Play 주문 ID는 고객이 볼 수 있는 유일한 식별자이므로, 결국 고객지원 받은편지함에 들어오는 것도 이 번호입니다. 제대로 읽으면 고객이 실제로 불만을 가진 청구를 한 번만 환불할 수 있습니다.

Google Play 주문 ID가 알려 주는 것

Google의 Play Billing Library 문서는 형식을 예시로 보여 줍니다. 주문 ID는 GPA로 시작하고 숫자 그룹이 이어집니다. 구독의 경우 갱신될 때마다 기본 주문 ID 뒤에 점 두 개와 0부터 시작하는 카운터가 붙습니다. 따라서 최초 구매에는 접미사가 없고, 첫 번째 갱신은 ..0, 두 번째 갱신은 ..1, 이런 식으로 이어집니다.

그래서 접미사만 보면 고객이 얼마나 오래 결제해 왔는지 바로 알 수 있습니다. GPA.3333-4137-0319-36762..11에 대해 문의한 고객은 열두 번 갱신된 것입니다. 접미사 없는 기본 ID를 알려 주는 고객은 한 번만 구매했거나, 맨 처음 결제를 가리키고 있는 것입니다.

주문 ID의미
GPA.1234-5678-9012-34567일회성 구매 또는 구독의 첫 번째 청구
GPA.1234-5678-9012-34567..0해당 구독의 첫 번째 갱신
GPA.1234-5678-9012-34567..1두 번째 갱신
Billing Library의 nullGoogle이 결제를 처리하기 전, 아직 PENDING 상태인 구매

주문 ID가 나타나는 곳과 받게 되는 형태

많은 팀이 여기서 실수합니다. 위치마다 같은 ID를 서로 다른 형태로 건네주기 때문입니다.

  • 고객의 Google Play 영수증에는 갱신을 포함해 해당 청구의 주문 ID가 표시됩니다.
  • 앱에서 Play Billing Library의 Purchase.getOrderId()는 구독 갱신에 대해 최초 주문의 주문 ID를 반환합니다. Google의 예시를 보면, GPA.1234-5678-9012-34567..0이 아니라 GPA.1234-5678-9012-34567을 받게 됩니다.
  • 서버에서는 purchases.subscriptionsv2가 각 항목에 latestSuccessfulOrderId를 제공합니다. 이는 해당 항목에서 가장 최근에 성공한 주문의 ID입니다. Google은 2025년 5월 21일에 이 필드를 추가했습니다.
  • Voided Purchases API에서 orderId는 일회성 구매, 구독 구매, 구독 갱신을 고유하게 식별합니다. Google 문서는 갱신을 구분할 때 구매 토큰이 아니라 orderId를 사용하라고 안내합니다.

구매 토큰은 어디에 쓰는가

구매 토큰은 구매 전체를 식별합니다. 구독의 경우 토큰 하나가 최초 청구와 그 이후의 모든 갱신을 포괄합니다. 그래서 이용 권한 관리에는 알맞은 키이고, 환불에는 맞지 않는 키입니다. 환불과 지불 거절(chargeback)은 단일 청구에 대해 일어나며, 단일 청구를 가리킬 수 있는 것은 주문 ID뿐입니다.

Google Play 주문을 조회하는 방법

Play Console에서

주문 관리(Order management)의 검색창에는 주문 ID 또는 고객의 전체 이메일 주소를 입력할 수 있습니다. 각 주문에는 처리됨(Processed), 취소됨(Cancelled), 대기 중(Pending), 환불 대기 중(Pending refund), 환불됨(Refunded), 부분 환불 대기 중(Pending partial refund), 부분 환불됨(Partially refunded) 중 하나의 상태가 표시됩니다. 고객이 영수증 대신 이메일 주소를 알려 주면 이메일로 검색해 날짜로 청구를 찾은 다음, 조치하기 전에 접미사를 확인하세요.

Orders API로

2025년 5월 21일부터 Google Play Developer API의 Orders 리소스에는 주문 한 건을 조회하는 orders.get과 여러 건을 조회하는 orders.batchget이 있습니다. 실무에서 중요한 제한이 몇 가지 있습니다.

  • batchget은 요청당 주문 ID를 1개에서 1,000개까지 받으며, 중복되면 안 됩니다.
  • 주문 ID 중 하나라도 찾을 수 없거나 해당 패키지에 속하지 않으면 batchget 요청 전체가 실패합니다.
  • Orders API 호출은 Play Developer API 할당량에 포함되며, 기본 할당량은 하루 200,000회입니다.

쓸모 있는 것은 돌려받는 Order입니다. 여기에는 주문의 state, purchaseToken, createTime과 lastEventTime, 총액과 세금, IN_APP 또는 PLAY_STORE 같은 salesChannel, 그리고 처리, 취소, 환불, 부분 환불 이벤트가 담긴 orderHistory가 있습니다. developerRevenueInBuyerCurrency도 들어 있는데, Google은 이를 구매자 통화 기준으로 부분 환불, 세금, 수수료를 뺀 개발자 수익으로 정의합니다. Google이 판매 대행자(merchant of record)인 경우 구매자 주소에는 국가만 담깁니다.

주문 상태Google 참조 문서의 설명
PENDING생성되어 처리를 기다리는 중
PROCESSED처리 완료
CANCELED처리 전에 취소됨
PENDING_REFUND요청된 환불이 처리를 기다리는 중
PARTIALLY_REFUNDED주문 금액 일부가 환불됨
REFUNDED주문 금액 전액이 환불됨

올바른 주문 환불하기

고객이 어떤 청구를 말하는지 파악했다면, Play Console은 그 주문이 구독에서 어디에 위치하는지에 따라 선택지를 제공합니다.

옵션적용 대상결과
환불 및 취소(Refund and revoke)구독의 가장 최근 주문환불 처리, 구독 즉시 해지, 향후 갱신 취소
환불만(Refund only)구독의 이전 주문환불 처리, 구독 유지
부분 환불(Partial refund)2018년 3월 이후 주문된 인앱 구매 및 구독(유료 앱 제외)100% 미만의 임의 비율 또는 주문 총액 미만의 세전 금액
구독 취소(Cancel subscription)활성 구독환불 없음, 현재 결제 기간이 끝날 때까지 이용 가능

API에서는 orders.refund가 패키지 이름과 주문 ID를 받습니다. 3년이 지난 주문은 환불할 수 없습니다. 선택 사항인 revoke 매개변수를 true로 설정하면 구독 또는 인앱 상품 이용 권한이 즉시 종료됩니다. Google 도움말에는 환불은 한 번 처리되면 되돌릴 수 없다고도 나와 있으므로, 전달하는 주문 ID가 곧 최종 결정입니다.

구독자에게 $0.00 주문이 나타나는 이유는?

Google의 구독 수명 주기 문서에 설명이 있습니다. 사용자가 구독이 만료되기 전에 앱에서 같은 기본 요금제에 다시 가입하면 Google Play는 $0.00 주문을 생성합니다. 사용자는 현재 기간 요금을 이미 냈으므로 청구되지 않으며, 정상 결제는 원래 갱신일에 재개됩니다. 무료 체험도 프로모션도 아닙니다. 이 주문에는 환불할 금액이 없습니다. 고객이 환불을 원한다면 그 앞에 있는 유료 주문을 찾으세요.

엉뚱한 주문을 환불하면 치르는 비용

환불로 돌려주는 것은 가격입니다. 부분 환불도 비율만큼 같은 방식으로 작동합니다. Google의 예시에 따르면 50% 부분 환불은 지급액의 50%와 서비스 수수료의 50%도 회수합니다. 돌아오지 않는 것은 그 고객에게 서비스를 제공하느라 쓴 모든 비용, 즉 컴퓨팅, 서드파티 API 호출, 스토리지, 제휴 수수료입니다. 엉뚱한 주문을 환불하면 이 비용을 두 번 치르게 됩니다.

이런 일은 이렇게 벌어집니다. 월간 요금제 고객이 지난주에 청구된 ..4 건에 대해 문의합니다. 팀원 한 명이 이메일로 검색하고, 맨 위에 보이는 첫 번째 주문을 보고는 몇 달 전의 기본 주문에 '환불만'을 클릭합니다. 이제 고객은 이미 이용한 기간의 돈을 돌려받았고, 정작 불만을 제기한 청구는 그대로이며, 구독도 계속 갱신됩니다. 고객은 여전히 은행에 지난주 청구를 취소해 달라고 요청할 수 있습니다.

인쇄된 은행 거래 내역서와 펜 위로 Android 휴대전화를 든 두 손. 고객이 청구 내역을 Google Play 주문 ID와 맞춰 보는 순간

이제는 이 은행 경로가 가장 비쌉니다. Google에 따르면 2026년 8월 3일 이후 접수된 주문의 경우, 지불 거절이 받아들여지면 개발자가 구매 가격(Play 서비스 수수료 제외)과 은행이 부과하는 지불 거절 수수료를 부담합니다. 지불 거절은 은행에서 최종 확정됩니다. 접미사 하나를 잘못 읽으면 환불 두 번 분량의 돈과 수수료까지 잃을 수 있습니다.

받은편지함에 오지 않는 환불

대부분의 Google Play 환불에는 개발자도, 주문 ID도 필요하지 않습니다. Google의 환불 정책에 따르면 고객은 구매 후 48시간 이내에 Google Play를 통해 환불받을 수 있고, 48시간이 지나면 개발자에게 연락해야 합니다. 또한 Google은 개발자가 3일 이내에 확인(acknowledge)하지 않은 구독을 환불하고 취소합니다. 이런 건은 나중에 Voided Purchases API를 통해 알게 되며, 이 API는 voidedSource(0은 사용자, 1은 개발자, 2는 Google)와 Remorse, Chargeback, Unacknowledged_purchase 같은 voidedReason을 보고합니다.

개발자의 입장을 묻는 Google Play 환불 흐름은 하나뿐입니다. 지불 거절에 개발자 검토가 필요하면, 24시간 이내에 orders.reviewrefund로 APPROVE, DECLINE, NEUTRAL 중 하나의 환불 선호와 구매 사용 증거를 제출해 답해야 합니다. RefundHalt는 이미 보유한 사용 데이터를 활용해 기한 안에 이 검토에 대신 답합니다. 그래서 분쟁 중인 주문에는 침묵 대신 여러분의 증거가 전달됩니다.

주문 ID 고객지원 티켓을 위한 간단한 체크리스트

  • Google Play 영수증에 있는 전체 주문 ID를 접미사까지 포함해 요청합니다.
  • Play Console이나 orders.get으로 조회하고 상태부터 확인합니다.
  • 청구 날짜가 고객의 설명과 일치하는지 확인합니다.
  • '환불 및 취소'는 가장 최근 주문에만, '환불만'은 이전 주문에 사용합니다.
  • 환불한 주문 ID를 기록해 두면 나중에 다른 주문에서 지불 거절이 발생했을 때 쉽게 알아챌 수 있습니다.

자주 묻는 질문

Google Play 주문 ID 끝의 ..0은 무슨 뜻인가요?
구독의 첫 번째 갱신을 나타냅니다. Google Play는 갱신마다 구독의 기본 주문 ID에 점 두 개와 0부터 시작하는 카운터를 붙인 번호를 부여하므로, GPA.1234-5678-9012-34567..0이 첫 번째 갱신이고 ..1이 두 번째 갱신입니다. 접미사 없는 기본 ID는 최초 청구입니다.
앱의 getOrderId()가 고객 영수증과 다른 주문 ID를 반환하는 이유는 무엇인가요?
Play Billing Library가 구독 갱신에 대해 최초 주문의 ID를 반환하기 때문입니다. Google의 예시에 따르면 첫 번째 갱신에 대해 getOrderId()는 GPA.1234-5678-9012-34567..0이 아니라 GPA.1234-5678-9012-34567을 반환합니다. 갱신 자체의 ID를 얻으려면 서버에서 purchases.subscriptionsv2의 latestSuccessfulOrderId를 사용하세요.
주문 ID로 Google Play 주문을 조회하려면 어떻게 하나요?
Play Console의 주문 관리(Order management)에서 검색하세요. 주문 ID나 고객의 전체 이메일 주소로 검색할 수 있습니다. 또는 Google Play Developer API의 orders.get을 호출합니다. orders.batchget은 중복되지 않는 주문 ID를 1개에서 1,000개까지 한 번에 조회하며, 그중 하나라도 찾지 못하면 요청 전체가 실패합니다.
1년이 넘은 Google Play 주문도 환불할 수 있나요?
네, 3년까지 가능합니다. Google의 orders.refund 참조 문서에는 3년이 지난 주문은 환불할 수 없다고 나와 있습니다. 구독의 이전 주문이라면 Play Console의 '환불만'(Refund only) 옵션으로 구독은 유지한 채 금액을 돌려줄 수 있습니다.
구독자에게 $0.00짜리 Google Play 주문이 있는 이유는 무엇인가요?
사용자가 구독이 만료되기 전에 앱에서 같은 기본 요금제에 다시 가입하면 나타납니다. 사용자는 현재 기간 요금을 이미 냈으므로 청구되지 않으며, 정상 결제는 원래 갱신일에 재개됩니다. Google은 이것이 무료 체험이나 프로모션 할인이 제공되었다는 뜻은 아니라고 설명합니다.

출처 및 추가 자료

RefundHalt

App Store와 Google Play 환불 자동 처리

계속 읽기

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

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