การชำระเงิน PG แบบง่าย¶
'การชำระเงิน PG แบบง่าย' ใช้เมื่อ App Server ดึงข้อมูลวิธีการชำระเงินของ PG จากนั้นสร้าง UI สำหรับเลือกวิธีการชำระเงินโดยตรงภายในหน้าเว็บร้านค้า แล้วเรียกหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG ด้วยวิธีที่ผู้ใช้เลือก
หน้านี้อธิบายวิธีเรียก payment/methods และ payment/requests ตามลำดับ
ลำดับการนำไปใช้ที่แนะนำมีดังนี้
- ก่อนอื่น ให้ดึงข้อมูลวิธีการชำระเงินเพื่อสร้างหน้าจอเลือกวิธีการชำระเงินบนหน้าเว็บร้านค้า
- จากนั้น เมื่อผู้ใช้กด ชำระเงิน ให้เปิดหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG ที่เลือก
1. ภาพรวม¶
ลำดับการเชื่อมต่อ¶
การชำระเงิน PG แบบง่ายจะจัดการขั้นตอนการเลือกวิธีการชำระเงินภายในหน้าเว็บร้านค้า โดยจะเปิดหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG หลังจากที่ผู้ใช้เลือกวิธีการชำระเงินแล้วเท่านั้น
แนะนำให้เชื่อมต่อตามลำดับดังนี้
- บนหน้าเว็บร้านค้า ผู้ใช้กดปุ่ม ซื้อ
- App Server เรียก API ดึงข้อมูลวิธีการชำระเงิน
- หน้าเว็บร้านค้าสร้างและแสดง UI สำหรับเลือกวิธีการชำระเงินด้วยค่าที่ตอบกลับมา
- ผู้ใช้เลือกวิธีการชำระเงินใน UI สำหรับเลือกวิธีการชำระเงิน แล้วกด ชำระเงิน
- App Server เรียก API คำขอชำระเงิน
- หน้าเว็บร้านค้าเปิดหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG ที่เลือกตามผลลัพธ์การตอบกลับ
- ผู้ใช้ชำระเงินให้เสร็จสิ้นในหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG
การเตรียมการล่วงหน้า¶
ก่อนเชื่อมต่อการชำระเงิน PG แบบง่าย ให้เตรียมค่าต่อไปนี้
| รายการ | คำอธิบาย |
|---|---|
| คีย์การรับรอง Hive | Bearer token ที่ใส่ใน Authorization header ใช้ค่าที่อยู่ใน Hive Console > App Center > การจัดการโปรเจกต์ > รายการเกม - เลือกเกมของบริษัทเกม > รายละเอียดเกม > ข้อมูลพื้นฐาน |
app_id | App ID ของแอปที่จะใช้ดำเนินการชำระเงิน ใช้ค่าที่อยู่ใน Hive Console > App Center > การจัดการโปรเจกต์ > รายการเกม - เลือกเกมของบริษัทเกม > รายละเอียดเกม > ข้อมูลพื้นฐาน |
server_id | ค่าระบุตัวตนของ App Server ที่จะใช้ดำเนินการชำระเงิน ใช้ค่าที่อยู่ใน Hive Console > App Center > การจัดการโปรเจกต์ > รายการเกม - เลือกเกมของบริษัทเกม > รายละเอียดเกม > App Server |
market_pid | Product ID ของสินค้าที่จะชำระเงิน ใช้ค่าที่ลงทะเบียนไว้ใน Hive Console > Billing > การจัดการสินค้า > ลงทะเบียนสินค้า โดยค่านี้จะตั้งค่าตาม Product ID ที่เตรียมไว้ใน Store Console แต่ละแห่งก่อนลงทะเบียนสินค้า |
player_id | Player ID ของผู้ใช้ปัจจุบันที่กำลังดำเนินการชำระเงิน ใช้ค่าที่ App Server ตรวจสอบจากเซสชันการล็อกอินหรือข้อมูลผู้ใช้ของเกม |
market_id | Market ID ที่ใช้ในการชำระเงิน PG แบบง่าย ใช้ค่า 15 แบบคงที่ |
2. การดึงข้อมูลวิธีการชำระเงิน¶
API ดึงข้อมูลวิธีการชำระเงินเป็น API สำหรับดึงรายการวิธีการชำระเงิน PG ที่สามารถใช้งานได้ในปัจจุบันสำหรับสินค้าที่ระบุ ให้เรียก API นี้ก่อนเพื่อสร้างหน้าจอเลือกวิธีการชำระเงินภายในหน้าเว็บร้านค้า API นี้เพียงอย่างเดียวจะยังไม่เริ่มต้นการชำระเงิน
ข้อมูลคำขอ¶
เอนด์พอยต์¶
เอนด์พอยต์ที่ใช้เรียกมีดังนี้
| รายการ | คำอธิบาย |
|---|---|
| Production URL | https://hiveiap.qpyou.cn/payment/methods |
| Sandbox URL | https://sandbox-hiveiap.qpyou.cn/payment/methods |
| HTTP Method | POST |
| Data Format | JSON |
HTTP header¶
HTTP header มีดังนี้
| รายการ | คำอธิบาย |
|---|---|
| Content-Type | application/json;charset=utf-8 |
| Authorization | Bearer |
Bearer token ที่ใส่ใน Authorization header คือคีย์การรับรอง Hive ที่อยู่ใน Hive Console > App Center > การจัดการโปรเจกต์ > รายการเกม - เลือกเกมของบริษัทเกม > รายละเอียดเกม > ข้อมูลพื้นฐาน
Request body¶
ในตารางด้านล่าง กำหนดให้ค่าที่จำเป็นเป็น M และค่าทางเลือกเป็น O
| ชื่อ | ประเภท | จำเป็นหรือไม่ | คำอธิบาย |
|---|---|---|---|
| language | String | M | ค่าภาษาของเกมที่จะแสดงวิธีการชำระเงิน ส่งภาษาที่กำลังใช้อยู่ใน App Client ในรูปแบบ ISO 639-1 Alpha-2 |
| country | String | M | รหัสประเทศเป้าหมายที่จะใช้ดึงข้อมูลวิธีการชำระเงิน ส่งประเทศของผู้ใช้ที่จะดำเนินการชำระเงินในรูปแบบรหัส 2 ตัวอักษรตาม ISO 3166-1 |
| app_id | String | M | App ID ของแอปที่จะใช้ดำเนินการชำระเงิน ส่งค่าที่ตรวจสอบไว้ในส่วนการเตรียมการล่วงหน้า |
| market_pid | String | M | Product ID ของสินค้าที่จะชำระเงิน ส่งค่าที่ตรวจสอบไว้ในส่วนการเตรียมการล่วงหน้า |
| market_id | Integer | O | Market 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 หลังจากผู้ใช้เลือกวิธีการชำระเงินแล้ว ให้ส่งค่านี้ไปยัง agency_company_code ของ API คำขอชำระเงิน |
| data.country | String | M | รหัสประเทศที่ใช้กับผลลัพธ์การดึงข้อมูล ให้ใช้รหัสประเทศเดียวกันนี้กับ API คำขอชำระเงิน |
| data.currency | String | M | สกุลเงินที่ใช้กับผลลัพธ์การดึงข้อมูล ส่งค่านี้ไปยัง currency ของ API คำขอชำระเงิน |
| 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 ของวิธีการชำระเงินที่เลือก ส่งไปยัง agency ของ API คำขอชำระเงิน |
| data.available_payment_methods[].agency_id | Integer | M | ค่าระบุผู้ให้บริการ PG ใช้เพื่อแยกแยะวิธีการชำระเงินหรือตรวจสอบ internal log |
| data.available_payment_methods[].method | String | M | รหัสวิธีการชำระเงินที่เลือก ส่งไปยัง method ของ API คำขอชำระเงิน |
| 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 ไอคอนของวิธีการชำระเงินที่จะแสดงร่วมกันบนหน้าจอชำระเงิน |
การใช้ค่าการตอบกลับ¶
ให้ใช้ค่าการตอบกลับดังนี้
- ใช้ค่า
display_name,icon_url,priorityของdata.available_payment_methodsเพื่อสร้าง 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 คำขอชำระเงินเป็น API ที่ใช้เปิดหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG ที่เกี่ยวข้อง โดยใช้วิธีการชำระเงินที่ผู้ใช้เลือกไว้แล้วภายในหน้าเว็บร้านค้า คุณต้องนำค่าที่ได้รับจาก API ดึงข้อมูลวิธีการชำระเงินกลับมาใช้ซ้ำ
ข้อควรระวังมีดังนี้
- API นี้จะไม่แสดงหน้าจอเลือกวิธีการชำระเงินขึ้นมาอีกครั้ง
- API นี้ไม่ได้ยืนยันการชำระเงินเสร็จสมบูรณ์ในตัวเอง
ข้อมูลคำขอ¶
เอนด์พอยต์¶
เอนด์พอยต์ที่ใช้เรียกมีดังนี้
| รายการ | คำอธิบาย |
|---|---|
| Production URL | https://hiveiap.qpyou.cn/payment/requests |
| Sandbox URL | https://sandbox-hiveiap.qpyou.cn/payment/requests |
| HTTP Method | POST |
| Data Format | JSON |
HTTP header¶
HTTP header มีดังนี้
| รายการ | คำอธิบาย |
|---|---|
| Content-Type | application/json;charset=utf-8 |
| Authorization | Bearer |
Bearer token ที่ใส่ใน Authorization header คือคีย์การรับรอง Hive ที่อยู่ใน Hive Console > App Center > การจัดการโปรเจกต์ > รายการเกม - เลือกเกมของบริษัทเกม > รายละเอียดเกม > ข้อมูลพื้นฐาน
Request body¶
ในตารางด้านล่าง กำหนดให้ค่าที่จำเป็นเป็น M และค่าทางเลือกเป็น O
| ชื่อ | ประเภท | จำเป็นหรือไม่ | คำอธิบาย |
|---|---|---|---|
| language | String | M | ส่งค่าภาษาของเกมที่ใช้ใน API ดึงข้อมูลวิธีการชำระเงินเหมือนเดิม |
| country | String | M | ส่งรหัสประเทศที่ใช้ใน API ดึงข้อมูลวิธีการชำระเงินเหมือนเดิม |
| currency | String | M | ส่งค่า data.currency จากการตอบกลับของ API ดึงข้อมูลวิธีการชำระเงิน |
| app_id | String | M | ส่งค่าเดียวกับ App ID ที่ใช้ใน API ดึงข้อมูลวิธีการชำระเงิน |
| server_id | String | M | ส่ง Server ID ที่ตรวจสอบไว้ในส่วนการเตรียมการล่วงหน้า |
| market_id | Integer | M | Market ID โดยให้ใช้ค่า 15 แบบคงที่เช่นเดียวกับ API ดึงข้อมูลวิธีการชำระเงิน |
| market_pid | String | M | ส่งค่าเดียวกับ Product ID ที่ใช้ใน API ดึงข้อมูลวิธีการชำระเงิน |
| quantity | Integer | M | จำนวนที่จะซื้อในคำขอชำระเงินครั้งนี้ ส่งจำนวนที่ผู้ใช้เลือกในเกม |
| agency_company_code | Integer | M | ส่งค่า data.agency_company_code จากการตอบกลับของ API ดึงข้อมูลวิธีการชำระเงิน |
| 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 ที่ยืนยันผลสำเร็จของการชำระเงินขั้นสุดท้าย หากคำขอได้รับการประมวลผลตามปกติ ให้ใช้ผลลัพธ์ที่ตอบกลับมาเพื่อเปิดหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG ที่เลือก
การใช้ค่าการตอบกลับ¶
ให้ใช้ค่าการตอบกลับดังนี้
- ใช้ผลลัพธ์การตอบกลับเพื่อเปิดหน้าต่าง WebView การชำระเงินของผู้ให้บริการ 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. ขั้นตอนถัดไป¶
แม้ว่าผู้ใช้จะชำระเงินเสร็จแล้วในหน้าต่าง WebView การชำระเงินของผู้ให้บริการ PG ก็ไม่ควรดำเนินการมอบไอเท็มจาก App Client ทันที ข้อมูลการชำระเงินเสร็จสิ้นจะถูกส่งจาก PG ไปยังเซิร์ฟเวอร์ Hive IAP v4 ดังนั้น App Server จึงต้องทำการตรวจสอบต่อเนื่อง
ให้ดำเนินการต่อดังนี้
- เรียก การดูประวัติการชำระเงินที่เสร็จสมบูรณ์ เพื่อดึงข้อมูลการชำระเงินที่บันทึกไว้
- หากต้องมีการตรวจสอบเพิ่มเติมเพื่อยืนยันว่าการชำระเงินเสร็จสมบูรณ์ตามปกติ ให้ใช้
purchase_bypass_infoจากการตอบกลับของการดึงข้อมูลเพื่อดำเนินการ การตรวจสอบใบเสร็จ IAP v4