ซิงค์กับรายการ
สินค้า 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.