การนำเว็บล็อกอินแบบกำหนดเองไปใช้
เอกสารนี้อธิบายวิธีนำเว็บล็อกอินไปใช้งานด้วย Hive Server API โดยตรงโดยไม่ใช้ หน้าเว็บล็อกอิน ที่ Hive Platform มีให้ หากผู้พัฒนาต้องการสร้าง UI สำหรับเข้าสู่ระบบของตนเองและจัดการการยืนยันตัวตนของ IdP โดยตรง ให้ดูเอกสารนี้
Note
หากต้องการใช้ API เว็บล็อกอินแบบกำหนดเอง ต้องลงทะเบียนแอปและดำเนินการ การออก hive_certification_key ให้เสร็จสิ้นใน Hive Console
ภาพรวม
ใช้เว็บล็อกอินแบบกำหนดเองในกรณีต่อไปนี้
- เมื่อต้องการใช้ UI/UX สำหรับเข้าสู่ระบบที่เป็นเอกลักษณ์ของผู้พัฒนา
- เมื่อต้องการสร้างหน้าจอเข้าสู่ระบบให้สอดคล้องกับดีไซน์ของเว็บไซต์เดิม
- เมื่อต้องการให้ผู้ใช้เข้าสู่ระบบภายในหน้าของตนเองโดยไม่ต้องรีไดเรกต์ไปยังหน้าเว็บล็อกอิน
รายการ API
| API Endpoint | คำอธิบาย |
POST /game/auth/signinidp | การเข้าสู่ระบบด้วย IdP |
POST /game/auth/connect | การเชื่อมโยง IdP |
POST /game/auth/disconnect | ยกเลิกการเชื่อมโยง IdP |
POST /game/player/delete | ลบบัญชี |
ส่วนหัวคำขอทั่วไป
| ชื่อเฮดเดอร์ | ประเภท | จำเป็น | คำอธิบาย |
| Content-Type | String | Y | กำหนดเป็น application/json เท่านั้น |
| Authorization | String | Y or N | เซสชันโทเค็น จำเป็นสำหรับ API ที่ต้องตรวจสอบโทเค็น และละเว้นได้หากไม่จำเป็น |
| ISCRYPT | Integer | Y | ระบุว่าจะเข้ารหัสหรือไม่ กำหนดเป็นค่า 0 คงที่ |
ส่วนหัวการตอบกลับทั่วไป
| ชื่อเฮดเดอร์ | ประเภท | คำอธิบาย |
| Authorization | String | เซสชันโทเค็นที่ออกใหม่ ออกให้เฉพาะเมื่อคำขอ การเข้าสู่ระบบด้วย IdP ตั้งค่า require_token: true |
| ISCRYPT | Integer | ระบุว่ามีการเข้ารหัสการตอบกลับหรือไม่ |
รูปแบบการตอบกลับทั่วไป
การตอบกลับเมื่อสำเร็จ
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": { }
}
การตอบกลับเมื่อล้มเหลว
{
"result_code": 4000,
"result_msg": "Request has invalid format.",
"data": null
}
การเข้าสู่ระบบด้วย IdP
สร้างผู้เล่นใหม่ด้วยข้อมูล IdP หรือส่งคืนข้อมูลผู้เล่นเดิมหาก IdP นั้นลงทะเบียนไว้แล้ว เมื่อเข้าสู่ระบบสำเร็จ คุณสามารถตรวจสอบ PlayerID ได้จาก data.player_id
Note
หากต้องการใช้ API ลบบัญชี ต้องตั้งค่า require_token เป็น true เพื่อรับค่า Authorization ในส่วนหัวการตอบกลับ หากไม่ใช้ฟังก์ชันลบบัญชี สามารถตั้งค่าเป็น false ได้
Request URL
| สภาพแวดล้อม | URL |
| ใช้งานจริง (Production) | https://auth.qpyou.com/game/auth/signinidp |
| แซนด์บ็อกซ์ (Sandbox) | https://sandbox-auth.qpyou.com/game/auth/signinidp |
| HTTP Method | POST |
| Content-Type | application/json |
Request Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
| appid | String | App ID ของเกม (AppID) | Y |
| idp_index | Integer | รหัสดัชนี IdP โปรดดู คำจำกัดความรหัส IdP | Y |
| idp_user_id | String | ตัวระบุผู้ใช้เฉพาะของ IdP | Y |
| hive_certification_key | String | คีย์รับรองของ Hive | Y |
| require_token | Boolean | ต้องการโทเค็นผู้เล่นหรือไม่ เมื่อต้องใช้ API ลบบัญชี ให้ตั้งค่าเป็น true และหากไม่ใช้ให้ตั้งค่าเป็น false | Y |
Request Body Example
{
"appid": "com.com2us.example",
"idp_index": 3,
"idp_user_id": "google_67890",
"hive_certification_key": "your_certification_key",
"require_token": true
}
| ชื่อฟิลด์ | ประเภท | คำอธิบาย |
| Content-Type | String | ข้อมูลเกี่ยวกับรูปแบบข้อมูลการตอบกลับ (JSON) และการเข้ารหัสอักขระ (UTF-8) |
| Authorization | String | เซสชันโทเค็น |
HTTP/1.1 200
Content-Type: application/json; charset=UTF-8
Authorization: abcdf7ebce779429ea878f91d5f1c8
Iscrypt: 0
Response Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย |
| result_code | Integer | รหัสผลลัพธ์ สำเร็จเมื่อเป็น 0 |
| result_msg | String | ข้อความผลลัพธ์ |
| data.player_id | Integer | PlayerID |
| data.idp_index | Integer | ดัชนี IdP |
| data.idp_id | String | ชื่อ IdP |
| data.idp_user_id | String | ID ผู้ใช้ IdP |
Response Body Sample (สำเร็จ)
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": {
"player_id": 100000002,
"idp_index": 3,
"idp_id": "GOOGLE",
"idp_user_id": "google_67890"
}
}
Response Body Sample (ล้มเหลว)
{
"result_code": 4002,
"result_msg": "Invalid certfication key"
}
รหัสข้อผิดพลาด
| รหัส | คำอธิบาย | หมายเหตุ |
| 4002 | ข้อผิดพลาดของคีย์รับรอง | |
| 4200 | ไม่มี IdP นี้ | |
| 5000 | ข้อผิดพลาดฐานข้อมูล | |
การเชื่อมโยง IdP
เชื่อมโยง IdP ใหม่กับบัญชีผู้เล่นเดิม ต้องเรียกใช้หลังจากเข้าสู่ระบบผ่าน API การเข้าสู่ระบบด้วย IdP เท่านั้น
Request URL
| สภาพแวดล้อม | URL |
| ใช้งานจริง (Production) | https://auth.qpyou.com/game/auth/connect |
| แซนด์บ็อกซ์ (Sandbox) | https://sandbox-auth.qpyou.com/game/auth/connect |
| HTTP Method | POST |
| Content-Type | application/json |
Request Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
| appid | String | App ID ของเกม (AppID) | Y |
| idp_index | Integer | รหัสดัชนี IdP โปรดดู คำจำกัดความรหัส IdP | Y |
| idp_user_id | String | ตัวระบุผู้ใช้เฉพาะของ IdP | Y |
| player_id | Integer | PlayerID ที่จะเชื่อมโยง | Y |
| hive_certification_key | String | คีย์รับรองของ Hive | Y |
Request Body Example
{
"appid": "com.com2us.example",
"idp_index": 2,
"idp_user_id": "fb_12345678",
"player_id": 100000001,
"hive_certification_key": "your_certification_key"
}
Response Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย |
| result_code | Integer | รหัสผลลัพธ์ สำเร็จเมื่อเป็น 0 |
| result_msg | String | ข้อความผลลัพธ์ |
| data.player_id | Integer | PlayerID |
| data.idp_index | Integer | ดัชนี IdP ที่เชื่อมโยงแล้ว |
| data.idp_id | String | ชื่อ IdP ที่เชื่อมโยงแล้ว |
| data.idp_user_id | String | ID ผู้ใช้ IdP |
Response Body Sample (สำเร็จ)
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": {
"player_id": 100000001,
"idp_index": 2,
"idp_id": "FACEBOOK",
"idp_user_id": "fb_12345678"
}
}
Response Body Sample (หากเชื่อมโยงกับผู้เล่นคนอื่นอยู่แล้ว)
{
"result_code": 1002,
"result_msg": "Already connected other player",
"data": {
"player_id": 100000002,
"idp_index": 2,
"idp_id": "FACEBOOK",
"idp_user_id": "fb_12345678"
}
}
รหัสข้อผิดพลาด
| รหัส | คำอธิบาย | หมายเหตุ |
| 1002 | IdP นี้เชื่อมโยงกับผู้เล่นคนอื่นอยู่แล้ว | |
| 1003 | เชื่อมโยง IdP ประเภทเดียวกันไว้แล้ว | |
| 2002 | ไม่มีผู้เล่นนี้ | |
| 4002 | ข้อผิดพลาดของคีย์รับรอง | |
| 4200 | ไม่มี IdP นี้ | |
| 5000 | ข้อผิดพลาดฐานข้อมูล | |
ยกเลิกการเชื่อมโยง IdP
ยกเลิกการเชื่อมโยง IdP ที่เชื่อมโยงกับบัญชีผู้เล่น ต้องเรียกใช้หลังจากเข้าสู่ระบบผ่าน API การเข้าสู่ระบบด้วย IdP เท่านั้น
Request URL
| สภาพแวดล้อม | URL |
| ใช้งานจริง (Production) | https://auth.qpyou.com/game/auth/disconnect |
| แซนด์บ็อกซ์ (Sandbox) | https://sandbox-auth.qpyou.com/game/auth/disconnect |
| HTTP Method | POST |
| Content-Type | application/json |
Request Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
| appid | String | App ID ของเกม (AppID) | Y |
| idp_index | Integer | รหัสดัชนี IdP โปรดดู คำจำกัดความรหัส IdP | Y |
| idp_user_id | String | ตัวระบุผู้ใช้เฉพาะของ IdP | Y |
| player_id | Integer | PlayerID | Y |
| hive_certification_key | String | คีย์รับรองของ Hive | Y |
Request Body Example
{
"appid": "com.com2us.example",
"idp_index": 2,
"idp_user_id": "fb_12345678",
"player_id": 100000001,
"hive_certification_key": "your_certification_key"
}
Response Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย |
| result_code | Integer | รหัสผลลัพธ์ สำเร็จเมื่อเป็น 0 |
| result_msg | String | ข้อความผลลัพธ์ |
Response Body Sample (สำเร็จ)
{
"result_code": 0,
"result_msg": "SUCCESS"
}
Response Body Sample (ล้มเหลว)
{
"result_code": 4002,
"result_msg": "Invalid certfication key"
}
รหัสข้อผิดพลาด
| รหัส | คำอธิบาย | หมายเหตุ |
| 4002 | ข้อผิดพลาดของคีย์รับรอง | |
| 4006 | ไม่มีข้อมูล IdP ที่เชื่อมโยง | |
| 4200 | ไม่มี IdP นี้ | |
| 7000 | โทเค็นไม่ถูกต้อง | |
ลบบัญชี
ลบบัญชีผู้เล่น ต้องเรียกใช้หลังจากเข้าสู่ระบบผ่าน API การเข้าสู่ระบบด้วย IdP เท่านั้น
API นี้ต้องตรวจสอบโทเค็น จึงต้องดำเนินการต่อไปนี้ล่วงหน้า
- เมื่อเรียก API การเข้าสู่ระบบด้วย IdP ให้ตั้งค่า
require_token เป็น true - จัดเก็บค่า
Authorization ที่ได้รับจากส่วนหัวการตอบกลับของ API การเข้าสู่ระบบด้วย IdP - เมื่อเรียก API นี้ ให้ใส่ค่า
Authorization ที่จัดเก็บไว้ข้างต้นในส่วนหัวคำขอ
Warning
การลบบัญชีไม่สามารถย้อนกลับได้ โปรดแจ้งให้ผู้ใช้ทราบอย่างเพียงพอก่อนลบ
Request URL
| สภาพแวดล้อม | URL |
| ใช้งานจริง (Production) | https://auth.qpyou.com/game/player/delete |
| แซนด์บ็อกซ์ (Sandbox) | https://sandbox-auth.qpyou.com/game/player/delete |
| HTTP Method | POST |
| Content-Type | application/json |
| ชื่อเฮดเดอร์ | ประเภท | คำอธิบาย | จำเป็น |
| Authorization | String | เซสชันโทเค็นที่ได้รับผ่านส่วนหัวการตอบกลับหลังตั้งค่า require_token: true เมื่อเรียก การเข้าสู่ระบบด้วย IdP | Y |
Request Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
| appid | String | App ID ของเกม (AppID) | Y |
| player_id | Integer | PlayerID ที่จะลบ | Y |
| did | Integer | Device ID กำหนดเป็น 0 คงที่ | Y |
| hive_certification_key | String | คีย์รับรองของ Hive | Y |
Request Body Example
{
"appid": "com.com2us.example",
"player_id": 100000001,
"did": 0,
"hive_certification_key": "your_certification_key"
}
Response Body
| ชื่อฟิลด์ | ประเภท | คำอธิบาย |
| result_code | Integer | รหัสผลลัพธ์ สำเร็จเมื่อเป็น 0 |
| result_msg | String | ข้อความผลลัพธ์ |
Response Body Sample (สำเร็จ)
{
"result_code": 0,
"result_msg": "SUCCESS"
}
Response Body Sample (ล้มเหลว)
{
"result_code": 7000,
"result_msg": "Invalid token."
}
รหัสข้อผิดพลาด
| รหัส | คำอธิบาย | หมายเหตุ |
| 4002 | ข้อผิดพลาดของคีย์รับรอง | |
| 7000 | โทเค็นไม่ถูกต้อง | |
| 7001 | ไม่มีโทเค็นในเฮดเดอร์ | |
คำจำกัดความรหัส IdP
IdP พื้นฐาน
| รหัส | IDP_ID | คำอธิบาย |
| 0 | GUEST | Guest |
| 1 | HIVE | บัญชีสมาชิก |
| 2 | FACEBOOK | Facebook |
| 3 | GOOGLE | Google |
| 4 | QQ | QQ |
| 5 | WEIBO | Weibo |
| 6 | VK | VK |
| 7 | WECHAT | WeChat |
| 8 | APPLE | Apple Game Center |
| 9 | SIGNIN_APPLE | Sign in with Apple |
| 10 | LINE | LINE |
| 11 | TWITTER | Twitter |
| 12 | WEVERSE | Weverse |
| 13 | NAVER | Naver |
| 14 | GOOGLE_PLAY_GAMES | Google Play Games |
| 15 | HUAWEI | Huawei |
| 16 | FUNTAP | Funtap |
| 18 | STEAM | Steam |
| 19 | X | X (เดิมคือ Twitter) |
| 20 | TELEGRAM | Telegram |
| 21 | XIAOMI | Xiaomi |
| 22 | OPPO | OPPO |
| 23 | VIVO | VIVO |
IdP แบบกำหนดเอง
| รหัส | IDP_ID | คำอธิบาย |
| 1100 | CUSTOM_GAME | IdP ที่บริษัทเกมให้บริการเอง |