ซิงค์กับรายการ
สินค้า Hive เป็นระบบที่จัดเตรียมไว้เพื่อจัดการฟังก์ชันการชำระเงิน/การเรียกคืนของสกุลเงินหรือรายการในเกม การรวมสินค้า Hive ให้ฟังก์ชันในการมอบหรือเรียกรายการร่วมกับระบบคูปอง, เหตุการณ์, กำแพงข้อเสนอ, CPI, ฯลฯ ในสำนักงานหลังบ้านของผู้ดูแลระบบ รายการสามารถมอบหรือเรียกคืนด้วยตนเองหรือสามารถค้นหาประวัติได้
Note
- API การขอรับ/กู้คืนรายการ ทำงานในลักษณะอะซิงโครนัสและตอบสนองเฉพาะการกำหนดความสำเร็จหรือความล้มเหลวของการลงทะเบียนข้อมูลคำขอเมื่อมีการเรียก API
- การตอบสนองต่อ การดำเนินการประมวลผลจริง เช่น การเรียก API ของเซิร์ฟเวอร์เกมสามารถตรวจสอบได้ในเมนู Hive console ภายใต้ Billing > Hive Items > การขอรับ/กู้คืน หรือ บันทึกความสำเร็จในการรับ/กู้คืน โดยการค้นหาสิ่งที่เกี่ยวข้องและคลิกที่ สถานะ ในหน้าต่างป๊อปอัพผลการค้นหา
- รายการ Hive ต้องการการจัดการการจราจรขนาดใหญ่ ดังนั้นหากเวลาตอบสนองเฉลี่ยของเซิร์ฟเวอร์แอปของนักพัฒนามากกว่า 0.5 วินาที อาจทำงานในคิวแยกต่างหากแทนที่จะเป็นคิวหลัก ในกรณีนี้อาจเกิดความล่าช้าอย่างมีนัยสำคัญในการประมวลผลการมอบรายการ เพื่อให้การประมวลผลการมอบรายการเป็นไปอย่างราบรื่น แนะนำให้รักษา เวลาเฉลี่ยในการตอบสนองของเซิร์ฟเวอร์แอปของนักพัฒนาต่ำกว่า 0.5 วินาที
ข้อกำหนดการเตรียมการรวม¶
ในการรวมกับ Hive รายการ คุณต้องลงทะเบียน URL เซิร์ฟเวอร์เกมและรายการในเมนู การจัดการรายการ Hive ก่อน
API การชำระเงิน/การกู้คืน¶
ตรวจสอบพื้นฐานของ API การขอชำระเงิน/คืนเงิน¶
วิธีการสื่อสาร API¶
- API การขอรับเงินสนับสนุน/การกู้คืนให้บริการการสื่อสารสองประเภท: การสื่อสารผ่าน HTTP และการสื่อสารแบบ JSON String ผ่านซ็อกเก็ต
- มันขอรับเงินสนับสนุนหรือการกู้คืนในรูปแบบ JSON String จากเซิร์ฟเวอร์เกมไปยัง Hive รายการ
- เซิร์ฟเวอร์เกมจะส่งผลลัพธ์กลับในรูปแบบ JSON String ไปยัง Hive รายการ
- ผลลัพธ์การตอบสนองรวมถึงรหัสการประมวลผลและข้อความ
- JSON Strings ทั้งหมดต้องถูกเข้ารหัสในรูปแบบ UTF8.
วิธีการสมัครเกม¶
- ก่อนที่บริการจะเปิดเซิร์ฟเวอร์ทดสอบจะถูกใช้เพื่อส่งผลการทดสอบการรวม และหลังจากที่บริการเปิดเซิร์ฟเวอร์การผลิตจะถูกใช้
- แม้ว่าเกมจะเปิดให้บริการแล้ว แต่ก็ต้องรวมกับเซิร์ฟเวอร์ทดสอบ
- รายการทั้งหมดจะถูกจัดเตรียมผ่านกล่องจดหมาย
- หากต้องการข้อความแสดงผลสำหรับผู้ใช้ในกล่องจดหมาย โปรดดูที่ ข้อกำหนดการร้องขอ > เหตุผลในการร้องขอ เซิร์ฟเวอร์เกมต้องจัดการข้อความแสดงผลตามแต่ละภาษา
- การร้องขอรายการจะถูกส่งทีละผู้ใช้ การร้องขอหลายรายการเพื่อการมอบ/การดึงรายการสามารถส่งพร้อมกันได้ แต่การร้องขอเดียวต้องได้รับการประมวลผลภายในธุรกรรมเดียว หากการมอบ/การดึงรายการหนึ่งล้มเหลว ให้ดำเนินการเพื่อตอบสนองด้วยความล้มเหลวหลังจากการย้อนกลับทั้งหมด
การปล่อยไฟร์วอลล์เซิร์ฟเวอร์เกม¶
ในการสื่อสารกับเซิร์ฟเวอร์ คุณต้องปิดกฎไฟร์วอลล์ขาเข้าสำหรับ IP ด้านล่างบนเซิร์ฟเวอร์เกม
- 52.79.76.25
- 3.37.22.75
- 43.133.238.219 (เซิร์ฟเวอร์แซนด์บ็อกซ์)
การตรวจสอบสุขภาพเซิร์ฟเวอร์เกม¶
Hive รายการส่งรายละเอียดต่อไปนี้ไปยัง API คำขอให้อนุญาต/เพิกถอนเพื่อตรวจสอบสถานะของเซิร์ฟเวอร์เกม เซิร์ฟเวอร์รายการ Hive จะส่งสิ่งนี้ไปยังเซิร์ฟเวอร์เกมสองครั้งในช่วงเวลา 5 นาทีใน Request Body.
{"transactionId":"","idCategory":"","id":"","detail":[{"action":"","assetCode":"","amount":0}],"reason":""}
เซิร์ฟเวอร์เกมที่รับเนื้อหาข้างต้นอาจพบข้อผิดพลาดในการตรวจสอบความถูกต้อง และในกรณีนี้ ควรตอบกลับด้วยข้อมูลข้อผิดพลาดในฟิลด์รหัสและข้อความของค่าการตอบกลับ รายการ Hive ไม่ได้กำหนดค่ารหัสเพียงอย่างเดียว หากฟิลด์รหัสและข้อความมีอยู่ เซิร์ฟเวอร์เกมจะถือว่าปกติ; หากไม่มี จะถือว่าเซิร์ฟเวอร์เกมอยู่ในสถานะผิดปกติ
การตรวจสอบค่า Apihash¶
เซิร์ฟเวอร์เกมสามารถตรวจสอบข้อมูลที่ได้รับจากเซิร์ฟเวอร์รายการ Hive ผ่านค่า Apihash
ใน Header ก่อนที่จะตรวจสอบค่าแฮช จำเป็นต้องแปลงข้อมูล Request Body ที่ได้รับจากเซิร์ฟเวอร์รายการ Hive เป็น JSON encode หรือ unicode (ดูที่ตัวอย่างโค้ด)
โดยการผสมผสานพรีฟิกซ์ของข้อกำหนดการร้องขอและค่าข้อมูล JSON String ที่แปลงแล้ว (พรีฟิกซ์ + JSON String) จะสร้างค่าแฮชในรูปแบบ SHA1 และค่าดังกล่าวจะถูกเปรียบเทียบกับค่า Apihash
เพื่อการตรวจสอบ
- โค้ดตัวอย่าง
// Example of a transformed JSON String (add a line and spaces for readability)
{
"transactionId": "123456789",
"idCategory": "vid",
"id": "1004",
"detail": [
{
"action": "p",
"assetCode": "gem",
"amount": 1,
"method": ""
}
],
"reason": "td",
"subReason": "",
"userMessage": "",
"templateMessage": {
"ko": {
"title": "HIVE Item uc9c0uae09 uba54uc138uc9c0 QA ud55cuad6d",
"body": "HIVE Item uc9c0uae09 uba54uc138uc9c0 QA ud55cuad6duc5b4 ub178ucd9c"
}
},
"serverId": "kr",
"additionalinfo": "",
"gameIndex": 539
}
API การขอชำระเงิน/คืนเงิน สำหรับวิธีการสื่อสาร HTTP¶
API การชำระเงิน/การเรียกคืนจะสื่อสารกับเซิร์ฟเวอร์เกม (URL) ที่ตั้งค่าใน Hive คอนโซล > การเรียกเก็บเงิน > รายการ > การลงทะเบียนรายการ ผ่านโปรโตคอล HTTP และวิธีการส่งข้อมูลคำขอคือ POST.
ข้อกำหนดการร้องขอ (hive item -> game server)¶
HTTP Header : Apihash
- เพื่อยืนยันข้อมูล ให้ส่งค่าแฮชพร้อมกับคีย์ Apihash.
- ใช้ SHA1 สำหรับค่าแฮช (เพิ่มคำนำหน้า !@#COM2US!@# ลงในสตริง JSON ของร่าง)
เนื้อหาคำขอ (Hive item -> เกมเซิร์ฟเวอร์)
ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็น (จำเป็น: M, ไม่จำเป็น: O) |
---|---|---|---|
transactionId | ตัวระบุเพื่อแยกความแตกต่างของแต่ละคำขอ (สำหรับการตรวจสอบคำขอซ้ำ) รายละเอียด | String | M |
idCategory | ID
| String | M |
id__ITALICS_MD_0__ มันระบุว่าคำขอได้ถูกประมวลผลแล้วโดย transactionId หรือไม่ (ป้องกันการชำระเงิน/การเก็บเงินซ้ำ) | |||
ในกรณีที่มีคำขอซ้ำ ค่าตอบกลับจะระบุรายละเอียดที่เกี่ยวข้อง (ดูที่ข้อกำหนดการตอบกลับ) |
เหตุผล¶
Note
เหตุผลที่รายละเอียดฟิลด์อาจถูกเพิ่ม/เปลี่ยนแปลงในภายหลัง ดังนั้นเหตุผลสำหรับคำขอนี้ควรใช้เพื่อวัตถุประสงค์ในการอ้างอิงเท่านั้น。
ชื่อฟิลด์ | คำอธิบาย |
---|---|
pe__ITALICS_MD_1__ro__ITALICS_MD_2__ae__ITALICS_MD_3__e__ITALICS_MD_4__ea__ITALICS_MD_5__mc__ITALICS_MD_6__uc__ITALICS_MD_7__b | การเรียกเก็บเงิน * HIVE IAP v2 |
lb__ITALICS_MD_8__co__ITALICS_MD_9__p | โปรโมชั่น * ใช้เหมือนกันสำหรับ Cross Banner, Offerwall, UA |
*sr | รางวัลสตรีมมิ่ง |
tcs | ทดสอบ CS |
tgm | ทดสอบ GM |
tpm | ทดสอบ PM |
tqa | ทดสอบ QA |
td | ทดสอบนักพัฒนา |
tg | ทดสอบตลาด, ธุรกิจ |
tmb | ทดสอบต่างประเทศ (ทดสอบนักพัฒนา) |
re | ดึงข้อมูล ฯลฯ |
rr | ดึงคืนเงิน |
mr | คำขอจำนวนมาก |
etc | ฯลฯ |
เหตุผลย่อย¶
เหตุผล | เหตุผลย่อย | คำอธิบาย |
---|---|---|
p | รายละเอียดการขอโปรโมชันย่อย | |
1 | โฆษณาข้ามทั่วไป CPI | |
2 | โฆษณาข้ามทั่วไป CPA | |
3 | โฆษณาข้ามด้านหน้า CPI | |
4 | โฆษณาข้ามด้านหน้า CPA | |
5 | โฆษณาในกำแพงข้อเสนอทั่วไป CPI | |
6 | โฆษณาในกำแพงข้อเสนอทั่วไป CPA | |
7 | โฆษณาในกำแพงข้อเสนอพิเศษ CPI | |
8 | โฆษณาในกำแพงข้อเสนอพิเศษ CPA | |
9 | UA CPI | |
10 | UA CPA | |
11 | UC CPI |
การจำแนกคุณสมบัติการส่งเสริม
การโปรโมทข้าม: ผู้ใช้สามารถโฆษณาเกมอื่นในเกมปัจจุบันที่พวกเขากำลังเล่นในรูปแบบของแบนเนอร์และกำแพงข้อเสนอ (สถานีชาร์จฟรี) แบ่งออกเป็นแบนเนอร์ปกติและแบนเนอร์แบบเต็มหน้าจอ * กำแพงข้อเสนอ: กำแพงข้อเสนอจะแสดงรายการเกมที่ยังไม่ได้ติดตั้งบนอุปกรณ์ของผู้ใช้ในรูปแบบของแบนเนอร์ ผู้ใช้จะได้รับรางวัลเมื่อพวกเขาสัมผัสแบนเนอร์และติดตั้งเกมจากตลาดที่เชื่อมต่อ แบ่งออกเป็นกำแพงข้อเสนอปกติและกำแพงข้อเสนอพิเศษ * UA/UC: ฟีเจอร์เชิญเกมที่ใช้โซเชียลมีเดียและรหัส QR UA เกี่ยวข้องกับทั้งผู้ใช้ที่เชิญและผู้ใช้ที่รับ ในขณะที่ UC รวมเฉพาะผู้ใช้ที่รับ UC สามารถใช้ในระหว่างการลงทะเบียนล่วงหน้าได้
วิธีการให้รางวัล
- CPI: รางวัลจะมอบให้หลังจากที่เปิดเกมหลังจากการติดตั้ง
- CPA: รางวัลจะมอบให้สำหรับการบรรลุเป้าหมายที่กำหนดในระหว่างเกม สำหรับรายละเอียดเพิ่มเติม กรุณาตรวจสอบที่ Promotion Operation Guide.
ระยะเวลา¶
- ระยะเวลาที่รายการที่ร้องขอถูกเก็บไว้ในกล่องจดหมายหลังจากออกให้สามารถตั้งค่าได้เป็นรายบุคคลสำหรับแต่ละรายการในสำนักงานหลัง
- เซิร์ฟเวอร์เกมจัดการในสามกรณีตามสถานการณ์
- หากกุญแจไม่มีอยู่: จะใช้ค่าดีฟอลต์ที่ตั้งโดยเซิร์ฟเวอร์เกม (เช่น ค่าดีฟอลต์เก็บ 7 วัน)
- 1~9999: จะใช้หมายเลขที่ระบุเป็นจำนวนวัน (เช่น หากค่าคือ 14 หมายถึงการเก็บ 14 วัน)
- -1: จะใช้ค่ามากที่สุดที่สามารถตั้งโดยเซิร์ฟเวอร์เกม (เช่น การเก็บถาวร)
ข้อกำหนดการตอบสนอง (เซิร์ฟเวอร์เกม -> ไอเท็มฮีฟ)¶
การตอบสนอง (เซิร์ฟเวอร์เกม -> Hive รายการ)
ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็น (จำเป็น: M, ไม่จำเป็น: O) |
---|---|---|---|
code | รหัสผลลัพธ์การประมวลผล รายละเอียด | จำนวนเต็ม | M |
message | ข้อความผลลัพธ์การประมวลผล | สตริง | M |
- รหัสข้อผิดพลาด
รหัสโค้ด | คำอธิบาย |
---|---|
2xxxx | ไม่มีปัญหากับคำขอ การประมวลผลสำเร็จ |
ㄴ 20000 | ไม่มีปัญหากับคำขอ การประมวลผลสำเร็จ |
ㄴ 20001 | ไม่มีปัญหากับคำขอ ประมวลผลสำเร็จแล้ว (คำขอซ้ำ) หากมี transactionId ที่ประมวลผลปกติอยู่แล้ว |
4xxxx | ข้อผิดพลาดของพารามิเตอร์คำขอ |
ㄴ 40001 | ข้อผิดพลาด JSON ของคำขอ |
ㄴ 40002 | ข้อผิดพลาด Hash |
ㄴ 40003 | ขาดพารามิเตอร์ที่จำเป็น |
ㄴ 40004 | ข้อผิดพลาดประเภทพารามิเตอร์ที่จำเป็น |
ㄴ 40005 | ค่าพารามิเตอร์ที่จำเป็นว่างเปล่า |
ㄴ 40006 | ค่าพารามิเตอร์ที่จำเป็นไม่ถูกต้อง (เช่น ลบ) |
5xxxx | ข้อผิดพลาดในการประมวลผลของเซิร์ฟเวอร์ |
ㄴ 50001 | ผู้ใช้ที่ไม่มีอยู่ |
ㄴ 50004 | ข้อผิดพลาดในการลงทะเบียน DB |
ㄴ 50005 | ข้อผิดพลาดของพารามิเตอร์ (เช่น รหัสรายการที่ไม่มีอยู่) |
- ตัวอย่างคำขอ
curl -L -v
-d '{"transactionId":"27905","idCategory":"vid","id":"828292","detail":[{"action":"p","assetCode":"gold","amount":500,"method":""},{"action":"p","assetCode":"gem","amount":200,"method":""}],"reason":"td","subReason":"","userMessage":"","templateMessage":{"ko":{"title":"ud55cuae00 uba54uc138uc9c0","body":"ud55cuae00 ub0b4uc6a9"},"en":{"title":"English Message","body":"English Contents"}},"serverId":"kr","additionalinfo":"","gameIndex":539}'
-H "Content-Type: text/html"
-H "Apihash: e9d7307948ff0134fb59c5f96e68f5ae21e3e47f"
https://sandbox-misample.com2us.net/hive/item
- ตัวอย่างคำขอ
> POST /hive/item HTTP/2
> Host: sandbox-misample.com2us.net
> user-agent: curl/7.68.0
> accept: */*
> content-type: text/html
> apihash: e9d7307948ff0134fb59c5f96e68f5ae21e3e47f
> content-length: 447
- ตัวอย่างการตอบกลับ
< HTTP/2 200
< server: nginx
< date: Tue, 12 Jul 2022 11:29:21 GMT
< content-type: application/json; charset=utf-8
<
* Connection #0 to host sandbox-misample.com2us.net left intact
{"status":"200","code":"20001","message":"this request has already been processed"}
ตัวอย่างการร้องขอ (PHP)
// data request
$data = array(
'transactionId' => '12321',
'idCategory' => 'vid',
'id' => '828292',
'detail' => array(
array(
'action' => 's',
'assetCode' => 'gold',
'amount' => 500,
),
array(
'action' => 's',
'assetCode' => 'gem',
'amount' => 200,
),
),
'reason' => 'p',
'subReason' => '3',
'userMessage' => '',
'templateMessage' => array(
'ko' => array(
'title' => '한글 메세지',
'body' => '한글 내용'
),
'en' => array(
'title' => 'English Message',
'body' => 'English Contents'
),
),
'serverId' => 'GLOBAL',
'additionalinfo' => '{"character":1}',
'gameIndex' => 539
);
$jsonData = json_encode($data); // convert to JSON
/********************************************************************
Conversion result (add a line and spaces for readability) :
{
"transactionId": "12321",
"idCategory": "vid",
"id": "828292",
"detail": [
{
"action": "s",
"assetCode": "gold",
"amount": 500
},
{
"action": "s",
"assetCode": "gem",
"amount": 200
}
],
"reason": "p",
"subReason": "3",
"userMessage": "",
"templateMessage": {
"ko": {
"title": "한글 메세지",
"body": "한글 내용"
},
"en": {
"title": "English Message",
"body": "English Contents"
}
},
"serverId": "GLOBAL",
"additionalinfo": "{"character":1}",
"gameIndex": 539
}
********************************************************************/
// set header as application/json & set hash
$hash = sha1('!@#COM2US!@#' . $jsonData);
$header = array(
'Content-type: application/json',
'Apihash: ' . $hash
);
$url = 'http://game.com2us.com/gms.php'; // game server url
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec( $curl );
curl_close( $curl );
// process the result data
$response = json_decode($result);
ตัวอย่างการตอบกลับ (PHP)
// php header declaration
header('Content-type: application/json');
// json Data
$rawData = file_get_contents('php://input');
//confirm Hash value
$hash = sha1('!@#COM2US!@#' . $rawData);
$requestHash = $_SERVER['Apihash'];
if ($requestHash != $hash) {
/*****************************************************************
Process if the hash value differs (optional to use hash)
*****************************************************************/
}
// Decode requested JSON data
$requestData = json_decode($rawData, TRUE);
foreach ($requestData['detail'] as $item) {
/*****************************************************************
Process the asset as requested
*****************************************************************/
}
$returnData = array(
'code' => 50001,
'message' => 'user not exists',
);
//To avoid adding UTF-8BOM
ob_clean()
//Convert to JSON and send the response
echo json_encode($returnData);
/*****************************************************************
Conversion result (insert a line) :
{
"code" : 50001,
"message" : "user not exists"
}
*****************************************************************/
วิธีการสื่อสารผ่าน Socket สำหรับ API ขอชำระเงิน/คืนเงิน¶
API การชำระเงิน/การเรียกคืนที่ใช้ Socket ทำงานบน TCP/IP ซึ่งเป็นโปรโตคอลสำหรับการสื่อสารข้อมูลแบบแพ็กเก็ต โดยมีพอร์ตเริ่มต้นที่ 20080 ข้อมูลอยู่ในรูปแบบ JSON เดียวกันกับระหว่างการสื่อสาร HTTP และลำดับไบต์เป็นลำดับไบต์เครือข่าย (Big-endian)
ข้อกำหนดแพ็คเกจคำขอ (ไอเท็มรัง -> เซิร์ฟเวอร์เกม)¶
ขนาดแพ็กเกจ | 4 ไบต์ | 4 ไบต์ | ตัวแปร | 4 ไบต์ | ตัวแปร |
---|---|---|---|---|---|
คำอธิบาย | ความยาวแพ็กเกจทั้งหมด | ความยาวส่วนหัว | เนื้อหาส่วนหัว | ความยาวเนื้อหา | เนื้อหาหลัก |
- 4 ไบต์แรกแสดงถึงความยาวรวมของแพ็กเกจรวมถึง 4 ไบต์นี้
ตัวอย่างเช่น หากส่วนหัวมีความยาว 46 ไบต์และเนื้อหามีความยาว 100 ไบต์ จะได้ว่า 4+4+46+4+100 = 158 ไบต์ - 4 ไบต์ถัดไปแสดงถึงความยาวของส่วนหัวที่ตามมา
- ส่วนหัวอยู่ในรูปแบบสตริง JSON เดียวกันกับค่าแฮชในสื่อสาร HTTP
ตัวอย่างเช่น,{"Apihash":"912ec803b2ce49e4a541068d495ab570"}
- 4 ไบต์สุดท้ายแสดงถึงความยาวของเนื้อหาที่ตามมา
- เนื้อหาอยู่ในรูปแบบสตริง JSON เดียวกันกับค่าคำขอในสื่อสาร HTTP.
ข้อกำหนดแพ็กเกจการตอบกลับ (เซิร์ฟเวอร์เกม -> ไอเท็มฮีฟ)¶
ขนาดแพ็กเกจ | 4 ไบต์ | ตัวแปร |
---|---|---|
เนื้อหา | ความยาวรวมของแพ็กเกจ | เนื้อหา |
- 4 ไบต์แรกระบุความยาวของแพ็กเก็ตทั้งหมด รวมถึง 4 ไบต์นั้น
- Body อยู่ในรูปแบบสตริง JSON เดียวกันกับค่าการตอบสนองในสื่อสาร HTTP.