간편 PG 결제¶
'간편 PG 결제'는 앱 서버가 PG 결제 수단을 조회하고, 상점 웹 페이지 안에서 결제 수단 선택 UI를 직접 구성한 뒤, 사용자가 선택한 수단으로 PG사 결제 웹뷰 창을 호출할 때 사용합니다.
이 페이지는 payment/methods와 payment/requests를 순서대로 호출하는 방법을 설명합니다.
권장하는 구현 순서는 아래와 같습니다.
- 먼저 결제 수단을 조회해 상점 웹 페이지에 결제 수단 선택 화면을 구성하세요.
- 그다음 사용자가 결제를 누르면 선택한 PG사의 결제 웹뷰 창을 여세요.
1. 개요¶
연동 흐름¶
간편 PG 결제는 상점 웹 페이지 안에서 결제 수단 선택 단계를 처리합니다. 사용자가 결제 수단을 선택한 뒤에만 PG사 결제 웹뷰 창을 엽니다.
아래 순서로 연동을 권장합니다.
- 상점 웹 페이지에서 사용자가 구매 버튼을 누릅니다.
- 앱 서버가 결제 수단 조회 API를 호출합니다.
- 상점 웹 페이지가 응답값으로 결제 수단 선택 UI를 구성, 노출합니다.
- 사용자가 결제 수단 선택 UI에서 결제 수단을 선택하고 결제를 누릅니다.
- 앱 서버가 결제 호출 API를 호출합니다.
- 상점 웹 페이지가 응답 결과로 선택한 PG사의 결제 웹뷰 창을 엽니다.
- 사용자가 PG사 결제 웹뷰 창에서 결제를 마칩니다.
사전 준비¶
간편 PG 결제를 연동하기 전에 아래 값을 준비하세요.
| 항목 | 설명 |
|---|---|
| Hive 인증키 | Authorization 헤더에 넣는 Bearer 토큰입니다. Hive 콘솔 > 앱센터 > 프로젝트 관리 > 게임목록 - 게임사 게임 선택 > 게임상세 > 기본정보에 있는 값을 사용합니다. |
app_id | 결제를 진행할 앱의 App ID입니다. Hive 콘솔 > 앱센터 > 프로젝트 관리 > 게임목록 - 게임사 게임 선택 > 게임상세 > 기본정보에 있는 값을 사용합니다. |
server_id | 결제를 진행할 앱 서버 식별값입니다. Hive 콘솔 > 앱센터 > 프로젝트 관리 > 게임목록 - 게임사 게임 선택 > 게임상세 > 앱 서버에 있는 값을 사용합니다. |
market_pid | 결제할 상품 ID입니다. Hive 콘솔 > 빌링 > 상품 관리 > 상품 등록에 등록한 값을 사용합니다. 이 값은 상품 등록 전에 각 스토어 콘솔에서 준비한 Product ID를 기준으로 설정합니다. |
player_id | 결제를 진행하는 현재 사용자의 Player ID입니다. 앱 서버가 로그인 세션이나 게임 사용자 정보에서 확인한 값을 사용합니다. |
market_id | 간편 PG 결제에서 사용하는 마켓 고유 ID입니다. 15를 고정값으로 사용합니다. |
2. 결제 수단 조회¶
결제 수단 조회 API는 특정 상품에서 현재 사용할 수 있는 PG 결제 수단 목록을 조회하는 API입니다. 상점 웹 페이지 안에 결제 수단 선택 화면을 구성하기 전에 먼저 호출하세요. 이 API만으로는 결제가 시작되지 않습니다.
요청 정보¶
엔드포인트¶
호출 엔드포인트는 아래와 같습니다.
| 항목 | 설명 |
|---|---|
| 상용 URL | https://hiveiap.qpyou.cn/payment/methods |
| Sandbox URL | https://sandbox-hiveiap.qpyou.cn/payment/methods |
| HTTP Method | POST |
| Data Format | JSON |
HTTP 헤더¶
HTTP 헤더는 아래와 같습니다.
| 항목 | 설명 |
|---|---|
| Content-Type | application/json;charset=utf-8 |
| Authorization | Bearer |
Authorization 헤더에 넣는 Bearer 토큰은 Hive 콘솔 > 앱센터 > 프로젝트 관리 > 게임목록 - 게임사 게임 선택 > 게임상세 > 기본정보에 있는 Hive 인증키입니다.
요청 바디¶
아래 표에서 필수는 M, 옵션은 O로 표기합니다.
| 명칭 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| language | String | M | 결제 수단을 노출할 게임 언어 값입니다. 앱 클라이언트에서 현재 사용 중인 언어를 ISO 639-1 Alpha-2 형식으로 전달합니다. |
| country | String | M | 결제 수단을 조회할 대상 국가 코드입니다. 결제를 진행할 사용자 기준 국가를 ISO 3166-1 2자리 코드로 전달합니다. |
| app_id | String | M | 결제를 진행할 앱의 App ID입니다. 사전 준비에서 확인한 값을 전달합니다. |
| market_pid | String | M | 결제할 상품 ID입니다. 사전 준비에서 확인한 값을 전달합니다. |
| market_id | Integer | O | 마켓 고유 ID입니다. 15를 고정값으로 사용합니다. |
| fixed_currency | String | O | 특정 통화만 노출하려면 ISO 4217 통화 코드를 입력합니다. 통화를 고정하지 않으면 응답의 data.currency 값을 다음 단계에서 사용합니다. |
응답 정보¶
아래 표에서 필수는 M, 옵션은 O로 표기합니다.
| 명칭 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| result | String | M | API 결과 문자열입니다. 응답이 성공이면 data의 결제 수단 정보를 다음 단계에 사용합니다. |
| code | Integer | M | API 결과 코드입니다. 성공 여부와 실패 원인을 구분할 때 사용합니다. |
| message | String | M | API 결과 메시지입니다. 실패 시 원인 확인에 사용합니다. |
| data | Object | M | 조회 성공 시 전달되는 결제 수단 정보 묶음입니다. |
| data.agency_company_code | Integer | M | PG 결제 대행사 회사 코드입니다. 사용자가 결제 수단을 선택한 뒤 결제 호출 API의 agency_company_code에 전달합니다. |
| data.country | String | M | 조회 결과에 적용된 국가 코드입니다. 결제 호출 API에도 같은 국가 코드를 사용합니다. |
| data.currency | String | M | 조회 결과에 적용된 결제 통화입니다. 결제 호출 API의 currency에 이 값을 전달합니다. |
| data.email_agree_text | Array | O | 이메일 입력이 필요한 결제 수단을 선택했을 때 사용자에게 노출할 동의 문구 목록입니다. |
| data.email_agree_text[].agree_id | Integer | O | 동의 문구 ID입니다. 동의 항목 구분에 사용합니다. |
| data.email_agree_text[].title | String | O | 사용자에게 보여줄 동의 제목입니다. |
| data.email_agree_text[].description | String | O | 사용자에게 보여줄 동의 상세 문구입니다. |
| data.available_payment_methods | Array | M | 현재 상품에서 사용할 수 있는 결제 수단 목록입니다. 결제 화면에는 이 목록만 노출하고, 사용자가 선택한 항목의 하위 필드를 다음 단계에 사용합니다. |
| data.available_payment_methods[].agency | String | M | 선택한 결제 수단의 PG사 코드입니다. 결제 호출 API의 agency에 전달합니다. |
| data.available_payment_methods[].agency_id | Integer | M | PG사 식별 값입니다. 결제 수단 구분이나 내부 로그 확인에 사용합니다. |
| data.available_payment_methods[].method | String | M | 선택한 결제 수단 코드입니다. 결제 호출 API의 method에 전달합니다. |
| data.available_payment_methods[].method_id | Integer | M | 결제 수단 식별 값입니다. 결제 수단 구분에 사용합니다. |
| data.available_payment_methods[].requires_email | Boolean | M | true이면 결제 호출 전에 사용자 이메일을 받아 email 필드로 전달해야 합니다. |
| data.available_payment_methods[].priority | Integer | M | 결제 수단 노출 우선순위 값입니다. 결제 화면 정렬에 사용합니다. |
| data.available_payment_methods[].display_name | String | M | 결제 화면에 사용자에게 노출할 결제 수단 이름입니다. |
| data.available_payment_methods[].icon_url | String | O | 결제 화면에 함께 노출할 결제 수단 아이콘 URL입니다. |
응답값 사용¶
응답값은 아래와 같이 사용하세요.
data.available_payment_methods의display_name,icon_url,priority값을 사용해 상점 웹 페이지 안에 결제 수단 선택 UI를 구성하세요.requires_email이true인 결제 수단을 노출할 때는email_agree_text문구를 함께 보여주고 사용자 이메일을 입력받으세요.- 사용자가 결제 수단을 선택하면
data.agency_company_code,data.currency,data.available_payment_methods[].agency,data.available_payment_methods[].method,data.available_payment_methods[].requires_email값을 다음 단계 입력값으로 그대로 전달하세요.
요청 예시¶
curl -L -v \
-d '{
"language": "ko",
"country": "KR",
"app_id": "com.com2us.hivesdk.normal.freefull.google.global.android.common",
"market_pid": "com.com2us.hivesdk.normal.freefull.google.global.android.common.item01",
"market_id": 15,
"fixed_currency": "KRW"
}' \
-H "Content-Type: application/json;charset=utf-8" \
-H "Authorization: Bearer {Bearer 토큰}" \
https://sandbox-hiveiap.qpyou.cn/payment/methods
응답 예시¶
{
"result": "success",
"code": 0,
"message": "success",
"data": {
"agency_company_code": 1,
"country": "KR",
"currency": "KRW",
"email_agree_text": [
{
"agree_id": 1,
"title": "(필수) 개인정보 수집∙이용 동의",
"description": "Com2uS은(는) “결제 대행 업체 전송”을 위해 이메일주소를 수집합니다.<br>
내용을 자세히 읽으신 후 동의 여부를 결정해 주시기 바랍니다.<br><br>
- 수집∙이용 목적 : <span class=\"point_color\">결제 대행 업체 전송</span><br>
- 수집 항목 : 이메일주소<br>
- 보유∙이용 기간 : <span class=\"point_color\">결제 대행 업체 전송 목적으로만 수집하며 별도로 저장·보유하지 않습니다.</span><br><br>
※ 개인정보 수집∙이용에 대한 동의를 거부할 권리가 있습니다.<br>
단, 동의를 거부할 경우 해당 결제 대행 업체를 통한 결제가 제한됩니다."
},
{
"agree_id": 2,
"title": "(필수) 개인정보 제3자 제공 동의",
"description": "Com2uS은(는) 다음과 같이 이메일주소를 제3자에게 제공하고 있습니다.<br>
내용을 자세히 읽으신 후 동의 여부를 결정해 주시기 바랍니다.<br><br>
- 제공받는 자 : <strong>결제 대행 업체 (PayPal, Terminal3)</strong><br>
- 이용 목적 : <span class=\"point_color\">부정/의심 거래 방지 및 고객 지원</span><br>
- 제공 항목 : 이메일주소<br>
- 보유∙이용 기간 : <span class=\"point_color\">가맹점과의 계약 종료 후 최대 5년</span><br><br>
※ 개인정보 제3자 제공에 대한 동의를 거부할 권리가 있습니다.<br>
단, 동의를 거부할 경우 해당 결제 대행 업체를 통한 결제가 제한됩니다."
}
],
"available_payment_methods": [
{
"agency": "html5_inicis",
"agency_id": 9,
"method": "card",
"method_id": 1,
"requires_email": false,
"priority": 1,
"display_name": "Credit Card",
"icon_url": "https://hive-fn.qpyou.cn/hiveiap/hivestore/test/img/pg_icon/credit_card.png?ver=2.4.32"
},
{
"agency": "html5_inicis",
"agency_id": 9,
"method": "naverpay",
"method_id": 17,
"requires_email": true,
"priority": 10,
"display_name": "NAVER Pay",
"icon_url": "https://hive-fn.qpyou.cn/hiveiap/hivestore/test/img/pg_icon/5169459511710849342.png?ver=2.4.32"
}
]
}
}
3. 결제 호출¶
결제 호출 API는 상점 웹 페이지 안에서 사용자가 이미 선택한 결제 수단으로, 해당 PG사의 결제 웹뷰 창을 여는 API입니다. 결제 수단 조회 API에서 받은 값을 재사용해야 합니다.
주의할 점은 아래와 같습니다.
- 이 API는 결제 수단 선택 화면을 다시 띄우지 않습니다.
- 이 API 자체가 결제 완료를 확정하지는 않습니다.
요청 정보¶
엔드포인트¶
호출 엔드포인트는 아래와 같습니다.
| 항목 | 설명 |
|---|---|
| 상용 URL | https://hiveiap.qpyou.cn/payment/requests |
| Sandbox URL | https://sandbox-hiveiap.qpyou.cn/payment/requests |
| HTTP Method | POST |
| Data Format | JSON |
HTTP 헤더¶
HTTP 헤더는 아래와 같습니다.
| 항목 | 설명 |
|---|---|
| Content-Type | application/json;charset=utf-8 |
| Authorization | Bearer |
Authorization 헤더에 넣는 Bearer 토큰은 Hive 콘솔 > 앱센터 > 프로젝트 관리 > 게임목록 - 게임사 게임 선택 > 게임상세 > 기본정보에 있는 Hive 인증키입니다.
요청 바디¶
아래 표에서 필수는 M, 옵션은 O로 표기합니다.
| 명칭 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| language | String | M | 결제 수단 조회 API에 사용한 게임 언어 값을 그대로 전달합니다. |
| country | String | M | 결제 수단 조회 API에 사용한 국가 코드를 그대로 전달합니다. |
| currency | String | M | 결제 수단 조회 API 응답의 data.currency 값을 전달합니다. |
| app_id | String | M | 결제 수단 조회 API에 사용한 App ID와 같은 값을 전달합니다. |
| server_id | String | M | 사전 준비에서 확인한 서버 ID를 전달합니다. |
| market_id | Integer | M | 마켓 고유 ID입니다. 결제 수단 조회 API와 동일하게 15를 고정값으로 사용합니다. |
| market_pid | String | M | 결제 수단 조회 API에 사용한 상품 ID와 같은 값을 전달합니다. |
| quantity | Integer | M | 이번 결제 요청에서 구매할 수량입니다. 게임에서 사용자가 선택한 수량을 전달합니다. |
| agency_company_code | Integer | M | 결제 수단 조회 API 응답의 data.agency_company_code 값을 전달합니다. |
| method | String | M | 사용자가 선택한 결제 수단의 data.available_payment_methods[].method 값을 전달합니다. |
| agency | String | M | 사용자가 선택한 결제 수단의 data.available_payment_methods[].agency 값을 전달합니다. |
| player_id | String | M | 사전 준비에서 확인한 현재 사용자의 Player ID를 전달합니다. |
| vid_type | String | M | SDK 버전 값입니다. v4를 고정값으로 사용합니다. |
| String | O | 선택한 결제 수단의 requires_email 값이 true일 때 사용자에게 입력받은 이메일 주소를 전달합니다. | |
| sandbox | Boolean | O | Sandbox URL로 테스트할 때 true를 사용합니다. 상용 환경에서는 전달하지 않거나 환경에 맞는 값을 사용합니다. |
응답 정보¶
결제 호출 API는 결제 성공 여부를 최종 확정하는 API가 아닙니다. 요청이 정상적으로 처리되면 반환 결과를 사용해 선택한 PG사의 결제 웹뷰 창을 여세요.
응답값 사용¶
응답값은 아래와 같이 사용하세요.
- 응답 결과를 사용해 상점 웹 페이지에서 선택한 PG사의 결제 웹뷰 창을 여세요.
- 이 응답만으로 결제가 완료되었다고 판단하지 마세요. 이 단계는 결제창을 여는 단계입니다.
- 실제 결제 결과를 확인하려면 결제 완료 내역 조회와 IAP v4 영수증 검증을 참조하세요.
요청 예시¶
curl -L -v \
-d '{
"language": "ko",
"country": "KR",
"currency": "KRW",
"app_id": "com.com2us.hivesdk.windows.microsoftstore.global.normal",
"server_id": "global",
"market_id": 15,
"market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
"quantity": 1,
"agency_company_code": 1,
"method": "kakaopay",
"agency": "html5_inicis",
"player_id": "123456789",
"vid_type": "v4",
"email": "bobong@com2us.com",
"sandbox": true
}' \
-H "Content-Type: application/json;charset=utf-8" \
-H "Authorization: Bearer {Bearer 토큰}" \
https://sandbox-hiveiap.qpyou.cn/payment/requests
4. 다음 단계¶
PG사 결제 웹뷰 창에서 사용자가 결제를 마쳤다고 해서 앱 클라이언트에서 바로 지급 처리하면 안 됩니다. 결제 완료 정보는 PG에서 Hive IAP v4 서버로 전달되므로, 앱 서버에서 후속 확인을 해야 합니다.
아래 순서로 후속 처리를 진행하세요.
- 결제 완료 내역 조회를 호출해 저장된 결제 정보를 조회하세요.
- 결제가 정상적으로 완료되었는지 추가 검증이 필요하면 조회 응답의
purchase_bypass_info를 사용해 IAP v4 영수증 검증을 진행하세요.