1. 로그전송 (/log)


/log/writePurchaseLog

Description

카카오는 정책상 게임 내 인앱결제 성공 후 서버 단에서 결제로그를 전송해야 합니다.

구매로그는 5년간 카카오게임즈에서 보관할 예정입니다. 

Google Play Points 결제의 경우 currency를 GPP로 사용해주시고 price는 포인트 값을 그대로 입력해주세요.

Method

POST

Request Headers 

Name

Type

Mandatory

Description

appId

String

Y

앱 아이디

 

appSecret

String

Y

앱 시크릿

playerId

String

Y

플레이어 아이디

Content-Type

String

Y

"application/json;charset=UTF-8"

Authorization

String

Y

Authorization: KakaoAK {ADMIN_KEY}

예제) Authorization: KakaoAK 11118035a320f23423585acae3ded1111

Request Body Parameters

Name

Type

Mandatory

Description

Available Values

Name

Type

Mandatory

Description

Available Values

grade

Long

N

플레이어 등급

 

playerLv

Long

N

플레이어 레벨

 

currency

String

Y

통화 코드

스토어에서 결제 시 사용된 통화코드 값입니다.

규격은 ISO 4217 입니다.

구글의 경우 getSkuDetails() 메서드를 통해 상품의 통화코드를 확인할 수 있습니다.

Google Play Points 결제의 경우 currency를 GPP로 사용해주세요.

price

BigDecimal

Y

VAT 포함 상품 금액

스토어에서 상품 상세정보 API를 통해 얻은 금액을 전송 해 주세요.

Google Play Points 결제의 경우 price는 실제 포인트 값을 그대로 입력해주세요

os

String

Y

OS 유형

클라이언트 SDK String osName = KGSystem.getOSName(); 

ex> android, ios

country

String

Y

국가 코드

클라이언트 SDK 의 KGSystem.getCountryCode(); 로 확인한 국가코드를 전송합니다.

market

String

Y

마켓 유형

구매가 이뤄진 스토어입니다. 구글의 경우 googlePlay, 애플은 appStore

ex> kakaogameShop, googlePlay, appStore, oneStore

marketOrderId

String

Y

마켓 주문 아이디

아래에 있는 구글의 예제 구매데이터로 설명하면 orderId 값입니다.

marketProductId

String

Y

마켓 상품 아이디

아래에 있는 구글의 예제 구매데이터에서는 productId,
애플 receipt 샘플에서는 product_id 입니다

marketPurchaseTime

Long

Y

마켓 구매 처리 시각

아래에 있는 구글의 예제 구매데이터에서는 purchaseTime,

애플 receipt 샘플에서는 purchase_date_ms 입니다

marketPurchaseData

Map<String,Object>

N

마켓 구매 부가 정보

아래에 있는 구글의 예제 구매데이터에서는 purchaseToken,

애플은 Receipt 전체의 내용을 담아서 보내주세요

purchasePt

Long

N

구매로 인해 생성된 포인트

 

purchaseCount

Long

N

구매 회차

 

purchaseToken

String

Y

구매 토큰

google 마켓 구매 시에 사용되는 구매 토큰을 입력합니다.

  • 구매 취소 처리를 위해서 필요

구글 구매데이터 샘플 

{    "orderId":"GPA.1234-5678-9012-34567",    "packageName":"com.example.app",    "productId":"exampleSku",    "purchaseTime":1345678900000,    "purchaseState":0,    "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",    "purchaseToken":"opaque-token-up-to-1000-characters"  }

애플 receipt 샘플 

{     "in_app": [       {         "quantity": "1",         "product_id": "product_id",         "transaction_id": "1000000218147651",         "original_transaction_id": "1000000218147500",         "purchase_date": "2016-06-17 01:32:28 Etc/GMT",         "purchase_date_ms": "1466127148000",         "purchase_date_pst": "2016-06-16 18:32:28 America/Los_Angeles",         "original_purchase_date": "2016-06-17 01:30:33 Etc/GMT",         "original_purchase_date_ms": "1466127033000",         "original_purchase_date_pst": "2016-06-16 18:30:33 America/Los_Angeles",         "expires_date": "2016-06-17 01:37:28 Etc/GMT",         "expires_date_ms": "1466127448000",         "expires_date_pst": "2016-06-16 18:37:28 America/Los_Angeles",         "web_order_line_item_id": "1000000032727764",         "is_trial_period": "false"       }     ]

스토어에서 결제 프로세스 완료 후

구글은 consumePurchase 메서드를, 애플은 finishTransaction: 메서드를 반드시 호출하여 구매 및 결제를 완료해야 합니다.

Response Status Code

Status Code

Status Code 설명

Status Code 상세 설명

Status Code

Status Code 설명

Status Code 상세 설명

200

정상 응답

정상

400

Bad Request

파싱되지 않는 요청 데이터. 필수 파라미터 부족 or 파라미터 타입 오류

401

Unauthenticated

인증 실패

406

Not Acceptable

처리 불가

461

Invalid Message Box

messageBoxId로 요청된 메시지 박스가 존재하지 않음.

500

Internal Server Error

서버 시스템 내부 오류

503

Service Unavailable

서비스가 가능하지 않은 상태 (예, 내부 서버간 timeout)

Response Content

Name

Type

Description

Name

Type

Description

logId

String

기록된 로그에 부여된 아이디

Example Request

POST /service/v3/log/writePurchaseLog HTTP/1.1 Host: openapi-zinny3.game.kakao.com:10443 Content-Type: application/json;charset=UTF-8 appId: 103815 appSecret: 951b75bf17fe0885ab5106ba2a9f9bc9 playerId: 123412341234 Authorization: KakaoAK 11118035a320f23423585acae3ded1111    {     "grade": 100,     "currency": "USD",     "price": 12.23,     "os": "android",     "country": "kr",     "market": "googlePlay",     "marketOrderId": "123098120938.123123123",     "marketProductId": "test gem 0003",     "marketPurchaseTime": 12312312333 }

Example Response 

HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8   {     "logId": "9a57db20-0472-11e5-aed4-b182048b2fd8" }