콘텐츠로 이동

PG 결제

다음은 Windows OS 게임에서 PG 결제를 지원하기 위해 게임 서버에서 구현해야할 PG 결제 API입니다. Windows 환경에서 PG 결제에 관한 자세한 내용은 다음을 확인하세요.

결제 완료 내역 조회

결제 완료 시 결제 대행사(PG)는 Hive IAP v4 서버로 결제 결과를 직접 전달합니다. 이 방식은 네트워크의 불안전성을 보완하고 결제 데이터의 위변조를 방지합니다. 사전 작업 시 등록한 결제 정보와 결제 대행사(PG)의 정보를 대조하여 교차 검증을 수행합니다. 결제 정보의 무결성이 확인되면 추가적인 안전 장치를 확보하고, 결제 정보를 저장합니다. 저장된 결제 정보는 결제 완료 내역 조회 API를 통회 조회할 수 있습니다. 클라이언트에서는 이용자의 결제 완료 정보가 필요한 시점에 게임 서버에 정보를 요청하고, 게임 서버는 Hive IAP v4 서버를 통해 결제 정보를 조회합니다. 이용자의 결제 내역이 존재하는 경우 purchase_bypass_info를 활용하여 결제 정보 검증을 진행합니다.

Request URL

상용 URL https://hiveiap.qpyou.cn/api_v4/purchases/unconsumed
Sandbox URL https://sandbox-hiveiap.qpyou.cn/api_v4/purchases/unconsumed
HTTP Method POST
Content-Type application/json
Data Format JSON
AUTHORIZATION Bearer (토큰)

Bearer 토큰은 Hive 콘솔 앱센터 > 프로젝트 관리 > 게임사 게임 선택 > 게임 상세 > 기본정보 에서 Hive 인증키에 해당합니다.

Request parameters

명칭 타입 필수 여부 (필수: M, 옵션: O) 설명
appid String M Hive 콘솔 > 앱센터 에서 등록 및 발급 받은 ID
market_id Number M 마켓 고유 ID (15 고정)
server_id String M 결제가 발생한 게임서버 구분코드
user_id_type String M HIVE 유저 타입
uid : 개별모듈(v0)
vid : 인증v1(v1)
player_id : 인증v4(v4)
user_id Number M HIVE 유저 ID
user_id_type 에 따라 전송
uid : 개별모듈(v0)
vid : 인증v1(v1)
player_id : 인증v4(v4)

Response elements

명칭 타입 필수 여부 (필수: M, 옵션: O) 설명
result Number M 응답 코드 (0: 성공)
result_msg String M 응답 코드에 따른 결과 메시지
unconsumed_lists Object Array M
┕ market_pid String M 상품 고유 ID
┕ order_id String M 주문번호
┕ server_id String M 구매한 유저가 접속한 게임서버 구분코드
┕ vid String M 구매한 유저의 PlayerID, v1 인증의 경우 VID
┕ uid String O 구매한 유저의 uid
┕ amount String M 결제 금액
┕ currency String M 결제 통화
┕ quantity Number M 구매 수량
┕ started_datetime Datetime M 결제를 시작한 시간 (Y-m-d H:i:s)
┕ paid_datetime Datetime M 결제를 완료한 시간 (Y-m-d H:i:s)
┕ hiveiap_receipt String M 결제 정보 암호화 HASH
┕ purchase_bypass_info String M 영수증 검증 요청에 필요한 필수 정보
┕ additionalInfo String O 게임 서버로 보내기 위해 클라이언트에서 전달받은 추가 정보 (JSON String 형식)
(전달받은 정보가 없을 경우 null 반환)

Request example

curl -L -v
 -d '{"appid" : "com.com2us.hivesdk.windows.microsoftstore.global.normal","market_id" : 15,"server_id" : "kr","user_id_type": "player_id", "user_id": 30000056996}' \
 -H "Content-Type: text/html" \
 -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
 https://sandbox-hiveiap.qpyou.cn/api_v4/purchases/unconsumed

Response example

{
    "result": 0,
    "result_msg": "SUCCESS",
    "unconsumed_lists": [
        {
            "market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
            "order_id": "h2164792542890731850",
            "server_id": "kr",
            "vid": "30000056996",
            "uid": "13079",
            "amount": "1200",
            "currency": "KRW",
            "quantity": 1,            
            "started_datetime": "2022-03-22 14:03:49",
            "paid_datetime": "2022-03-22 14:04:39",
            "market_id": "15",
            "hiveiap_receipt": "2YnGzfTCGycoMjcSyYyNXBjANwmFyB6m\/c0bYazQ8VQ=",
            "purchase_bypass_info": "eyJtYXJrZXRfcGlkIjoiY29tLmNvbTJ1cy5oaXZlc2R...",
            "additionalInfo": null
        }
    ]
}

결제 정보 검증

결제 결과 검증 API는 IAP v4 영수증 검증을 기반으로 합니다.

결제 결과 검증은 앞서 전달받은 purchase_bypass_info를 이용합니다. purchase_bypass_info는 결제 진행 전에 SDK를 통해 전달받은 각종 정보를 담고 있으며, Hive 애널리틱스로 전송됩니다. 영수증 검증 요청과 함께 매출로그의 전송이 필요하다면 game_info를 이용하세요. 전달받은 game_info는 Hive IAP에서 애널리틱스 서버로 로그 전송을 대행합니다.

Request URL

상용 URL https://hiveiap-verify.qpyou.cn/api_v4/verify
Sandbox URL https://sandbox-hiveiap-verify.qpyou.cn/api_v4/verify
HTTP Method POST
Content-Type text/html
Data Format JSON
AUTHORIZATION Bearer (토큰)

Bearer 토큰은 Hive 콘솔 앱센터 > 프로젝트 관리 > 게임사 게임 선택 > 게임 상세 > 기본정보 에서 Hive 인증키에 해당합니다.

Request parameters

명칭 타입 필수 여부 (필수: M, 옵션: O) 설명
purchase_bypass_info String M 영수증 대용 및 애널리틱스 전송용 데이터
game_info Object Array O 게임로그, 매출로그와 같은 게임에 전달할 로그가 있을 때 이 값을 게임에 추가하여 전달하면 Hive IAP가 애널리틱스 서버에 전송을 대행한다. 영수증 검증 단계에서는 아이템 지급 완료(itemsendok) 여부를 알 수 없으므로 이 부분은 별도 구현하여 추가 정보로 제공해야 한다.
⠀⠀server_uid bigint O 게임서버에서 발급하는 user_id
없으면 0
⠀⠀giftee_uid bigint O null: 본인 스스로 사용하기 위한 결제
0: 선물 받은 사람이 있으나 UID 확인 불가 더비데이즈 게스트 계정은 허브 게스트 계정이 없으므로 여기에 해당
⠀⠀level int O 유저의 게임 내 레벨
레벨이 없을 경우는 불필요. 없으면 0.
⠀⠀character_id bigint O 서버 내에서 유니크한 캐릭터 구분 값 (PK?).
캐릭터 개념이 없는 경우 "0"
⠀⠀character_type_id int O 캐릭터 타입 구분 값
캐릭터 개념이 없는 게임은 "0" 입력
⠀⠀character_level int O 캐릭터 타입 구분 값
캐릭터 개념이 없는 게임은 "0" 입력
⠀⠀is_emulator int O 블루스택 등 PC용 에뮬레이터로 접속 시 "1", 그 외 "0" 입력

Response elements

명칭 타입 필수 여부 (필수: M, 옵션: O) 설명
result Number M 응답 코드 (Response Code 참고)
result_msg String M 응답 코드에 따른 결과 메시지
hiveiap_transaction_id String M 검증 성공한 영수증 별로 생성되는 트랜잭션 ID. 이 값을 게임 서버에 저장해서 게임이 영수증 중복 체크를 수행함
hiveiap_market_id String O 마켓 고유번호 (PG 결제: 15 고정)
hiveiap_market_pid String O 결제 상품 PID
hiveiap_market_transaction_id String O 주문에 대한 고유 주문번호
hiveiap_receipt String O 마켓 영수증 Object 값 (PG 결제: null 고정)
hiveiap_purchase_test String O 테스트 결제 여부 (Y: 테스트 결제 / N: 일반 결제)

Response code

Code Message Comment
0 Success, Duplicate receipt 검증 성공
1000001 No requested parameter 전송된 파라미터가 없을 때
1000003 DB Connection Error DB Connection이 안될 때
1000005 Internal Server Error 내부 서버 에러
1000006 The required parameter info is missing 필수 파라미터 값이 없을 때
1000503 Failed to authenticate the receipt 영수증 검증에 실패 또는 해킹된 영수증인 경우
(예: 스푸핑 해킹)
1000507 Failed to save the purchase info 구매 이력 저장 실패
1000524 Failed to authenticate the receipt. (not exist order) 영수증 검증 실패 (존재하지 않는 주문)
1000525 Failed to authenticate the receipt. (wrong param) 영수증 검증 실패 (파라미터 오류)

Request example

curl -L -v 
 -d '{"purchase_bypass_info":"eyJtYXJrZXRfaWQiOiIxNSIsIm9yZGVyX2lkIjoiSDMxNjQ3OTI1NDI4OTA3MzE4NTAiLCJtYXJrZXRfcGlkIjoiY29tLmNvbTJ1cy5oaXZlc2RrLndpbmRvd3MubWljcm9zb2Z0c3RvcmUuZ2xvYmFsLm5vcm1hbC5pdGVtMDEiLCJ2aWQiOiIzMDAwMDA1Njk5NiIsInVpZCI6IjEzMDc5Iiwic2VydmVyX2lkIjoia3IiLCJhcHBpZCI6ImNvbS5jb20ydXMuaGl2ZXNkay53aW5kb3dzLm1pY3Jvc29mdHN0b3JlLmdsb2JhbC5ub3JtYWwiLCJhbW91bnQiOiIxMjAwIiwic3RhcnRlZF9kYXRldGltZSI6bnVsbCwicGFpZF9kYXRldGltZSI6bnVsbCwiY3VycmVuY3kiOiJLUlciLCJoaXZlaWFwX3JlY2VpcHQiOiIyWW5HemZUQ0d5Y29NamNTeVl5TlhCakFOd21GeUI2bVwvYzBiWWF6UThWUT0ifQ=="}' 
 -H "Content-Type: text/html"
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
 https://sandbox-hiveiap-verify.qpyou.cn/api_v4/verify

Response example

{
    "result": 0,
    "result_msg": "success",
    "hiveiap_transaction_id": "HS_13",
    "hiveiap_market_id": 15,
    "hiveiap_market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
    "hiveiap_market_transaction_id": "h2164792542890731850",
    "hiveiap_receipt": null,
    "hiveiap_purchase_test": "N"
}

지급 결과 처리

지급 결과 처리 APIIAP v4 아이템 지급 결과 전송을 기반으로 합니다.

지급 결과 처리 API를 통해 아이템 구매부터 지급 완료까지의 결제 처리를 최종 마무리하게 됩니다. 결제 처리가 완료되지 않으면 유저는 동일 상품을 구매할 수 없습니다. 구매를 시도하여 결제 페이지로 진입하면 '이미 보유한 상품입니다.'라는 메시지가 노출되고 결제가 진행되지 않습니다.

여러 개의 결제창을 띄워 구매·결제를 시도하는 경우에도 결제 처리가 되지 않은 상품은 모두 자동 취소 처리됩니다. 게임 서버에서 진행하는 구매 횟수 제한 확인, 아이템 지급 등의 모든 결제 과정을 처리한 후 결제 결과를 전송하여 결제가 완료되었음을 Hive IAP v4 서버에 알립니다. 결제 취소를 요청하고자 하는 경우에도 지급 결과 처리 API를 통해 취소를 요청할 수 있습니다.

Request URL

상용 URL https://hiveiap.qpyou.cn/api_v4/item_result
Sandbox URL https://sandbox-hiveiap.qpyou.cn/api_v4/item_result
HTTP Method POST
Content-Type text/html
Data Format JSON
AUTHORIZATION Bearer (토큰)

Bearer 토큰은 Hive 콘솔 앱센터 > 프로젝트 관리 > 게임사 게임 선택 > 게임 상세 > 기본정보 에서 Hive 인증키에 해당합니다.

Request parameters

명칭 타입 필수 여부
(필수: M, 옵션: O)
설명
hiveiap_transaction_id String M 영수증 검증 결과의 hiveiap_transaction_id
result_status Number M 아이템 지급 성공여부
0: 지급 실패
1: 지급 성공
2: 결제 취소 환불 요청 (PG 전용)
result_status_message String O 지급 실패 또는 결제 취소 요청 사유
user_id_type String M Hive 유저 타입
v0: 개별모듈 (uid)
v1: 인증 v1 (vid)
v4: 인증 v4 (player_id)
user_id Number M 유저 ID
user_id_type이 v0이면 uid를, v1이면 vid를, v4면 player_id를 전송
asset Object Array O 지급한 아이템 정보
지급 성공일 때만 값을 전달하고, 지급 실패일 때는 빈 array([])로 응답
⠀⠀asset_id String O 아이템 ID
⠀⠀asset_name String O 아이템 이름
⠀⠀quantity Number O 지급한 아이템 개수

Response elements

명칭 타입 필수 여부
(필수: M, 옵션: O)
설명
result Number M 응답 코드 (0: 성공)
result_msg String M 응답 코드에 따른 결과 메시지

Request example

  • 호출
curl -L -v
 -d '{"hiveiap_transaction_id" : "HS_13","result_status": 1,"user_id_type": "vid","user_id": 30000056996,"asset": [ {"asset_id":"item_id","asset_name":"item_name","quantity":1}
,{"asset_id":"item_id","asset_name":"item_name","quantity":1}]}' \
 -H "Content-Type: text/html" \
 -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
 https://sandbox-hiveiap.qpyou.cn/api_v4/item_result

Response example

{
    "result": 0,
    "result_msg": "success"
}

결제 결과 알림 서비스

결제 결과 알림 서비스는 결제 완료 또는 결제 취소가 발생하는 즉시 해당 결과를 게임 서버로 전송합니다. 이 API는 결제 완료 내역 조회와 동일하게 purchase_bypass_info 값을 전달하므로, 게임은 이 값을 사용해 영수증을 검증한 후 유저에게 상품을 지급할 수 있습니다. 결제 결과 전송 정보에서 type이 paid일 경우에만 영수증 검증과 상품 지급을 진행해야 합니다.

Note

이 API를 사용하려면 먼저 Hive 콘솔에서 사용할 PG사를 설정해야 합니다. 영수증 검증과 상품 지급을 위해서는 이 API 또는 결제 완료 내역 조회 API 둘 중 하나만 사용하는 것을 권장합니다.

결제 결과 전송 기본 사항

HTTP Method POST
Content-Type application/json
Data Format JSON

결제 결과 전송 정보

명칭 타입 필수 여부
(필수: M, 옵션: O)
설명
type String M 알림 유형(paid: 결제 완료, cancelled: 결제 취소 또는 환불)
market_pid String M 상품 고유 ID
order_id String M 주문번호
server_id String M 구매한 유저가 접속한 게임 서버 구분코드
vid Number M 구매한 유저의 PlayerID, v1 인증의 경우 VID
vid_type String O SDK 버전에 따른 vid 유형 값(기본 v4)
uid Number O 구매한 유저의 uid
amount String M 결제 금액
currency String M 결제 통화
quantity Number M 구매 수량
started_datetime Datetime M 결제를 시작한 시간 (Y-m-d H:i:s)
paid_datetime Datetime M 결제를 완료한 시간 (Y-m-d H:i:s)
cancelled_datetime Datetime O 결제가 취소 또는 환불된 시간 (Y-m-d H:i:s)
cancelled_reason String O 결제가 취소 또는 환불된 사유
hiveiap_receipt String M 결제 정보 암호화 HASH
purchase_bypass_info String M 영수증 검증 요청에 필요한 필수 정보
additionalInfo String O 게임 서버로 보내기 위해 클라이언트에서 전달받은 추가 정보입니다. JSON String 형식이며 전달받은 정보가 없으면 null을 반환합니다.

결제 결과 전송 예시 (결제 완료 시)

{
    "type": "paid",
    "market_id": "15",
    "order_id": "H2168993822440686730",
    "market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
    "vid": "20000011337",
    "uid": "67200717",
    "vid_type": "v4",
    "server_id": "kr",
    "appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal",
    "amount": "1200",
    "started_datetime": "2023-07-21 20:17:06",
    "paid_datetime": "2023-07-21 20:18:13",
    "cancelled_datetime": null,
    "cancelled_reason": null,
    "currency": "KRW",
    "quantity": 1,    
    "additionalInfo": null,
    "hiveiap_receipt": "tJpwQSIlNFiCSPokHSRYTvTLmtbDiSZnkYa7+IWaMwM=",
    "purchase_bypass_info": "eyJ0eXBlIjoicGFpZCIsIm1hcmtldF9pZCI6IjE1Iiwib3JkZXJfaWQiOi..."
}

결제 결과 전송 예시 (결제 취소 시)

{
    "type": "cancelled",
    "market_id": "15",
    "order_id": "H2168993822440686730",
    "market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
    "vid": "20000011337",
    "uid": "67200717",
    "vid_type": "v4",
    "server_id": "kr",
    "appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal",
    "amount": "1200",
    "started_datetime": "2023-07-21 20:17:06",
    "paid_datetime": "2023-07-21 20:18:13",
    "cancelled_datetime": "2023-07-21 20:21:44",
    "cancelled_reason": "테스트 결제 취소",
    "currency": "KRW",
    "quantity": 1,    
    "additionalInfo": null,
    "hiveiap_receipt": "tJpwQSIlNFiCSPokHSRYTvTLmtbDiSZnkYa7+IWaMwM=",
    "purchase_bypass_info": "eyJ0eXBlIjoiY2FuY2VsbGVkIiwibWFya2V0X2lkIjoiMT..."
}