웹 상점 구매 제한 검증 API
'웹 상점 구매 제한 검증'은 웹 상점에서 결제한 상품이 최대 구매 수량을 초과했는지 검증하는 기능입니다. Hive 서버에서는 해당 기능으로 웹 상점 결제 정보 검증 API를 제공합니다.
사전 준비¶
웹 상점 결제 정보 검증 API를 호출하기에 앞서 Hive 콘솔에서 최대 구매 수량을 설정합니다.
- Hive 콘솔 > 커뮤니티 & 웹 상점 > 웹 상점 > 상품 관리에서 구매 수량 제한 검증 설정을 통해 웹 상점 상품에 계정별 구매 제한과 구매 수량 제한을 설정합니다.
- 계정별 구매 제한과 구매 수량 제한 각각에 최대 구매 수량을 설정할 수 있습니다.
동작 플로우¶
'웹 상점 구매 제한 검증'의 전체 동작 과정을 단계별 동작 주체를 중심으로 설명하면 아래와 같습니다. 본 문서에서는 아래 과정 중 2 단계에 해당하는 '웹 상점 결제 정보 검증 API' 호출 방법을 설명합니다.
-
앱: 웹 상점에서 PG 결제 시 앱 서버에서 상품을 지급하는 프로세스를 구축합니다. 관련 설정은 결제 알림 설정을 참고하세요.
-
앱 서버: 웹 상점에서 사용자가 구매 수량 제한 상품을 구매한 경우, 상품 지급 전에 웹 상점 결제 정보 검증 API를 호출하여 최대 구매 수량을 초과했는지 검증을 요청합니다.
-
Hive 서버: 사용자의 상품 주문에서 해당 상품의 최대 구매 수량을 초과했는지 검증합니다. 검증 후 결과를 API 응답값으로 앱 서버에 전송합니다.
-
앱 서버: API 응답값을 확인한 후 검증 요건(예: 최대 구매 수량을 초과했는지 여부)을 통과했을 때에만 상품을 지급합니다. 만약 최대 구매 수량을 초과한 구매 주문이라면 상품을 지급하지 않고 결제를 취소 처리합니다. 웹 상점은 검증 결과에 문제가 없을 때에만 판매 완료 수량으로 반영한 후 상품의 잔여 수량을 감소시킵니다. API 응답값을 확인했을 때 유효하지 않은 결제로 나타난 경우, 앱 서버에서는 상품을 사용자에게 지급하지 말고 결제 취소 처리를 해야 합니다.
Warning
위 2, 4 단계를 각각 구현하지 않으면 Hive 콘솔 웹 상점에서 설정한 구매 수량 제한 기능이 정상적으로 동작하지 않습니다. 이 경우 웹 상점에서는 현재 판매된 수량이 없는 것으로 판단해 웹 상점에서 표기하는 상품의 잔여 수량이 감소하지 않습니다. 이는 상품을 계속해서 구매할 수 있는 상태임을 의미합니다.
Note
결제 취소에 대한 자세한 사항은 지급 결과 처리를 참고하세요.
웹 상점 결제 정보 검증 API¶
웹 PG 결제가 완료된 결제 정보를 기준으로 구매하려는 상품의 최대 구매 수량 초과 여부를 검증하여 해당 결제의 유효성을 판단합니다.
Request information¶
| 구분 | 정보 |
|---|---|
| 상용 URL | https://shop.withhive.com/api/webstore/check-quantity-limit |
| SANDBOX URL | https://sandbox-shop.withhive.com/api/webstore/check-quantity-limit |
| HTTP Method | POST |
| Data Format | JSON |
Request header¶
| 필드명 | 설명 | 타입 | 필수 여부 | 비고 |
|---|---|---|---|---|
| Content-Type | application/json | String | Y | |
| X-Access-Token | 앱 서버 인증을 위한 OAuth 2.0 Access Token (OAuth Token 발급하기 참고) | String | Y |
Request header sample¶
Content-Type : application/json
X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0.eyJwcm9qZWN0X2lkIjoiY29tLmNvbTJ1cy5leGFtcGxlIiwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImdyYW50X3R5cGUiOiJwcm9qZWN0IiwiaWF0IjoxNzE1NTg0MDAwLCJleHAiOjE3MTU1ODc2MDAsImF1dGhfdmVyIjoidjQiLCJ1c2VyX2lkIjoiIiwiaXNfd2hpdGVsaXN0Ijp0cnVlfQ.signature
Request body¶
| 필드명 | 설명 | 타입 | 필수 여부 |
|---|---|---|---|
| type | 알림 유형(paid: 결제 완료, cancelled: 결제 취소 또는 환불) | String | Y |
| market_pid | 상품 ID | String | Y |
| order_id | 주문번호 | String | Y |
| server_id | 구매한 사용자가 접속한 앱 서버 구분 코드 | String | Y |
| appid | 앱의 웹 상점 App ID이며, 위 market_pid가 등록된 App ID | String | Y |
| cs_code | 구매한 사용자의 Player ID | String | Y |
| paid_datetime | 결제를 완료한 시간 (Y-m-d H:i:s) | String | Y |
| quantity | 구매 수량 | String | Y |
| iap_payload | 앱 서버에서 상품 지급을 위한 계정 추가 정보 | String | Y |
Request body sample¶
{
"type": "paid",
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
"order_id" : "H3175513391360875943",
"server_id" : "1",
"appid" : "com.com2us.hivesdk.windows.hivepc",
"cs_code" : "20000023100",
"paid_datetime": "2025-08-14 10:12:18",
"quantity": "10",
"iap_payload": "{\"cs_code\":20000023100,\"data\":{\"server_id\":\"1\",\"server_name\":\"Server 1\",\"channels\":{\"channel_id\":\"11\",\"channel_name\":\"Channel 11\",\"characters\":{\"character_id\":\"111\",\"character_name\":\"Character 111\"}}}}"
}
Response body¶
| 필드명 | 설명 | 타입 |
|---|---|---|
| result_code | 응답 결과 코드 | Integer |
| result_msg | 응답 결과 메시지 | String |
| token_validation | JWT 검증 결과 (JWT 검증 에러 코드) | Object |
| token_validation.result_code | JWT 검증 결과 코드 | Integer |
| token_validation.result_msg | JWT 검증 결과 메시지 | String |
- result_code
100,101응답에만 상품을 정상 지급해야 합니다. - result_code
3001응답은 이미 검증 완료된 주문 건입니다. 기존에 상품이 지급되지 않았던 경우에만 지급해야 합니다. - result_code
3002응답은 상품의 최대 구매 수량을 초과한 경우로, 반드시 해당 주문을 결제 취소해야 합니다. 자세한 사항은 지급 결과 처리를 참고하세요.
Response body sample¶
성공¶
{
"result_code": 100,
"result_msg": "success",
"token_validation": {
"result_code": 0,
"result_msg": "success"
}
}
JWT 검증 실패¶
{
"result_code": 2499,
"result_msg": "JWT validation failed. See token_validation for details.",
"token_validation": {
"result_code": 2408,
"result_msg": "The access token is expired. Please refresh your token."
}
}
Note
JWT 검증 실패 시, token_validation 필드를 통해 상세한 에러 정보를 확인할 수 있습니다. 자세한 내용은 JWT 검증 에러 코드를 참고하세요.
Response code¶
API 호출 후 반환되는 응답 코드(result_code) 명세는 아래와 같습니다.
| code | msg | description |
|---|---|---|
| 100 | success | 성공 |
| 101 | success(product no limit) | 성공(수량 제한이 없는 상품으로, 별도 검증 필요 없음) |
| 3001 | fail(already completed) | ⚠️ 이미 검증 완료되어 수량에 반영된 주문 번호 기존에 상품이 지급된 경우, 추가 상품 지급 필요하지 않음 |
| 3002 | fail(purchase fail, purchase cancellation required) | ⚠️ 실패(수량 제한 초과) 이미 수량 제한이 초과된 상품을 구매한 경우로, 결제 취소 처리 필요 |
| 2499 | fail(JWT validation failed. See token_validation for details.) | JWT 검증 실패 (token_validation: JWT 검증 에러 코드 참고) |
| 2000 | fail(method error) | 유효하지 않은 HTTP METHOD로 요청 |
| 2001 | fail(request parameter error) | request 파라미터가 존재하지 않음 |
| 2002 | fail(type parameter error) | 유효하지 않은 파라미터(type) |
| 2003 | fail(market_pid parameter error) | 유효하지 않은 파라미터(market_pid) |
| 2004 | fail(order_id parameter error) | 유효하지 않은 파라미터(order_id) |
| 2005 | fail(server_id parameter error) | 유효하지 않은 파라미터(server_id) |
| 2006 | fail(appid parameter error) | 유효하지 않은 파라미터(appid) |
| 2007 | fail(cs_code parameter error) | 유효하지 않은 파라미터(cs_code) |
| 2008 | fail(paid_datetime parameter error) | 유효하지 않은 파라미터(paid_datetime) |
| 2009 | fail(quantity parameter error) | 유효하지 않은 파라미터(quantity) |
| 2010 | fail(iap_payload parameter error) | 유효하지 않은 파라미터(iap_payload) |
| 500 | fail(appid in DB not exist) | 해당 App ID에 매칭되는 앱 정보가 존재하지 않음 |
| 501 | fail(gameprefix not exist) | 해당 App ID에 매칭되는 웹 상점 정보 조회 실패 웹 상점을 먼저 생성해야 합니다(커뮤니티 또는 웹 상점을 먼저 생성해야 해당 API 사용 가능) |
| 502 | fail(####) | 그 외 "####" 오류 발생 |
| 503 | fail(product info in DB not exist) | 해당 market_pid(상품 ID)에 매칭되는 상품 정보가 존재하지 않음 Hive 콘솔 > 커뮤니티 & 웹 상점 > 웹 상점 > 상품 관리에 해당 상품 먼저 등록 필요 |
| 504 | fail(####) | 그 외 "####" 오류 발생 |
| 505 | fail(temporary error : ####) | 그 외 일시적인 "####" 오류 발생 |