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 |
---|---|---|---|---|
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, |
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 상세 설명 |
---|---|---|
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 |
---|---|---|
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
} |