본문으로 건너뛰기

Apple 유저의 구매 완료 요청에 대한 검증

기본 정보

  1. Apple App Store에서 유저가 구매한 결제 건을 검증합니다.
  2. 영수증 검증 및 기본적인 어뷰징 체크가 진행됩니다.
    1. 빌링 API가 애플서버와 영수증 검증 과정에서, 첫 번째 요청은 프로덕션 애플 서버로 검사하며 에러코드를 판별하여 샌드박스 영수증이라면 두 번째 요청을 샌드박스 환경의 애플 서버로 검사합니다.
      1. 앱 리뷰 중 애플 직원의 구매 테스트 검수를 통과할 수 있습니다.
      2. 앱이 검수 통과되었을 때 실제 사용자는 프로덕션 애플 서버로 구매가 진행되기 때문에 설정 변경이 필요 없습니다.
    2. 애플 영수증 검증 API는 느리기 때문에 타임아웃은 최소 15초 이상을 추천합니다.
      1. 타임아웃 등으로 빌링쪽에만 검증 성공으로 남을 수 있습니다. 빌링 구매 리스트 조회 API를 이용해서 상태 체크가 가능합니다.
항목내용비고
호출주체게임서버(s2s API)
도메인각 환경별 도메인
인증 방식HTTP 헤더 인증 정보
HTTP 메소드POST
Content-Typeapplication/json
사전 필요사항
  1. pjid 및 svcId 발급
  2. 빌링 시스템에 bundle_id 설정

Request

HTTP Request end point

POST https://각 환경별 빌링시스템 도메인/billing/api-game/v1/purchase/apple/appstore/consumable/verify

HTTP Request Header

  • 아래의 HTTP Header들을 API 요청에 포함시켜야합니다.
이름비고
X-Req-Pjid프로젝트ID기술 PM 등에게 전달받은 프로젝트ID
X-Auth-Access-Key인증용 키기술 PM 등에게 전달받은 해당 게임용 인증 키

HTTP Request Parameter

  • 아래의 공통 파라미터 외에 하단의 각 결제 스토어 특화 파라미터들도 같이 요청해야 합니다.
  • Content-Type: application/json 으로 요청되어야 합니다.
    • 영수증 관련 정보들의 길이 및 escape 등의 문제 때문
이름데이터 타입필수 Y/N설명
reqIdString(100)Y중복 요청을 막거나 요청 추적을 위한 값userId_UUID 등과 같은 방식으로 생성
pjidString(20)Y

프로젝트ID

  • 동일 게임이라면 서비스ID가 여러개일 수 있지만 프로젝트ID는 같음
1004
boidString(20)Y빌링 시스템 구매 예약 API를 통해서 생성된 ID1234
productIdString(200)N구매 진행하는 상품ID(SKU와 같은 값)
- 옵션 값으로 전달되는 경우에만 boid의 예약 시점의 상품과 동일한지 추가 검사 진행
playerIdString(50)Y주문 완료를 진행하는 유저ID
microPricelongY

구매 금액 micro단위

  • 사용측의 부동 소수점 오차등을 방지하기 위해서 micro단위 사용
구매 금액 micro단위(예. $0.99는 990,000 µ$. 100만을 곱함)
currencyString(10)Y

구매 금액의 화폐 단위

USD

스토어 특화 파라미터

이름데이터 타입필수 Y/N설명
transactionIdStringY

구매 단건의 transaction_id

  • 애플 → SDK → 클라이언트 → 게임서버 → 빌링으로 전달 필요
  • 멀티 디바이스 사용할 경우 소모성 상품이더라도 동일 영수증내 in_app이 N건이 존재 가능하기 때문에 특정 지을 정보가 빌링 서버에서 필요
2000000574982560
receiptDataStringY구매 영수증

요청 json 샘플

  • 하단 curl을 참고하셔도 됩니다.
{
"reqId":"userid-test-apple_verify-170083bf-8d85-433f-8bd2-67674b7482db-2023-12-02-01",
"pjid":"9001",
"boid":"1",
"playerId":"playerId",
"microPrice":990000,
"currency":"USD",
"transactionId": "2000000574982560",
"receiptData":"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"
}

Response

응답은 JSON형태로 전달됩니다.

Success sample

  • 검증 결과 문제가 없어서 성공이라면 게임 서버는 유저에게 아이템 및 재화를 지급하고, 이후 빌링 API에 완료 API를 호출해서 최종 완료 보고를 해주시면 됩니다.
    • 게임 서버에서는 필요 로그를 게임DB 또는 로그 DB에 저장해주시는게 좋습니다.
{
"resultCode": "SUCCESS",
"resultMessage": "Success boid:'2' complete purchase. You must process product(or items) give to user 'userid-test-123' and receipt consumption."
}

Error sample

  • 다른 boid의 데이터를 검증 시도(동일 영수증 중복 사용 요청)
    • 에러코드 ALREADY_EXIST_DATA로 응답하며 existPurchaseInfo가 추가로 응답됩니다.
      • 게임 서버에서 추가로 기능 구현할 때 사용 가능합니다.
keydata typedescriptionexample
boidString(20)빌링 시스템의 주문ID4
purchaseStatusString(30)빌링시스템에 구매 상태
imidString(40)

IMID

  • 드림에이지의 IMID로 로그인 후 얻을 수 있음
  • PJID 내 사용자를 식별하는 고유 Key
aaaabbbb-ccccddd-fffccc-tttggg
playerIdString(50)

구매를 진행하는 유저의 ID

  • 게임에서 결제 스콥을 관리하고 싶은 id값으로 사용

    • 드림에이지의 imid값이 될 수도 있음
paymentOrderIdString(100)

결제가 진행된 payment의 주문ID

  • 스토어/마켓에서 발급한 주문ID
productIdString(200)

구매 진행하는 상품ID

  • SKU와 같은 값
{
"resultCode": "ALREADY_EXIST_DATA",
"resultMessage": "This receipt information has already been used. | paymentOrderId(transactionId):'2000000900352806' | request boid:'642' | exist boid:'641'",
"traceId": "b_e9e0fd3ff5e4",
"resultData": {
"existPurchaseInfo": {
"boid": "641",
"purchaseStatus": "VERIFY_SUCCESS",
"imid": "87DDCADUCX7WLK7D55HY",
"playerId": "playerId",
"paymentOrderId": "2000000900352806",
"productId": "test.item.bag.blue"
}
}
}
  • 변조된 영수증으로 완료 요청
{
"resultCode": "NOT_VALID_RECEIPT",
"resultMessage": "[apple itunes /verifyReceipt] The receipt for the App Store is incorrect. statusCode: '21002'. See https://developer.apple.com/documentation/appstorereceipts/status"
}
  • 영수증내 inApp이 N건인데 transactionId도 전달이 안되어 찾을 수 없는 경우
    • 게임쪽에서 transactionId 를 필수로 전달해주도록 변경된 후에는 에러 메시지가 틀려질 예정
{
"resultCode": "NOT_ALLOW_PURCHASE",
"resultMessage": "Can't find the in_app from receipt. receipt in_app size:'2' | reqest transactionId:'null'",
"traceId": "b_8a5ff5837ebd"
}

에러 코드 정의

  • 아래와 같은 에러코드가 resultCode에 응답될 수 있습니다. (참고 링크)
  • 아래의 에러코드들은 모든 빌링 API에서 발생 가능한 에러 코드들입니다.
    • 해당 에러코드 외에 각 API에서만 발생가능한 에러코드들도 있습니다.
    • 각 에러 코드를 바탕으로 필요시 비즈니스 로직을 작성하시면 됩니다.
에러코드비고
SYSTEM_ERROR

빌링 API에서 발생한 시스템 에러

  • HTTP 상태코드 500 리턴
NOT_ALLOW_AUTHAPI 인증 헤더 누락이거나 기타 권한이 없는 요청에서 발생
  • 아래 에러 코드들은 해당 API에서 발생 가능한 추가 에러 코드들입니다.
에러코드비고
INVALID_PARAMETER
ALREADY_EXIST_DATA

이미 데이터가 존재

  • 동일 영수증 정보로 이미 데이터가 존재와 같은 케이스
NOT_ALLOW_PURCHASE

구매 기능을 사용할 수 없는 상황

  • 빌링 시스템에 스토어 관련 설정 누락
  • 다른 유저의 결제 예약건을 완료 처리 시도
NOT_VALID_RECEIPT

구매 영수증 검증결과 유효하지 않음

  • 애플 영수증 검증결과 유효하지 않음
  • 어뷰징 구매건
EXTERNAL_API_ERROR

빌링 API가 호출하는 외부 API가 에러인 경우

  • 예) 애플 API 장애로 영수증 검증 수행 실패
  • 게임 서버는 지수 백오프 알고리즘으로 재 시도하거나 클라이언트의 미 처리 영수증 처리 기능으로 처리할 수 있음

요청 curl 샘플

  • 도메인 및 인증 헤더 등은 변경 필요
curl --location 'https://billing-game-api-dev.pub-dev.hybegames.io/billing/api-game/v1/purchase/apple/appstore/consumable/verify' \
--header 'X-Req-Pjid: 9001' \
--header 'X-Auth-Access-Key: test-auth-key' \
--header 'Content-Type: application/json' \
--data '{
"reqId":"userid-test-apple_verify-170083bf-8d85-433f-8bd2-67674b7482db-2023-12-02-01",
"pjid":"9001",
"boid":"1",
"playerId":"playerId",
"microPrice":990000,
"currency":"USD",
"transactionId": "2000000574982560",
"receiptData":"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"
}'