API การเรียกกลับผลการจับคู่¶
เมื่อการจับคู่เสร็จสมบูรณ์ เซิร์ฟเวอร์ Hive จะขอ API การตอบกลับจากเซิร์ฟเวอร์ของนักพัฒนาเพื่อนำเสนอผลการจับคู่และรับค่าการตอบกลับ
คำสั่งในการส่งผลลัพธ์ที่ตรงกันโดยการเรียกใช้ API callback มีดังนี้
- เลือก วิธีการรวมการจับคู่ เป็น server callbackใน Hive console
- ลงทะเบียน URL ของเซิร์ฟเวอร์นักพัฒนาเพื่อรับการเรียกกลับใน Hive console
- เมื่อการจับคู่เสร็จสมบูรณ์ เซิร์ฟเวอร์ Hive จะขอ API การเรียกกลับไปยังเซิร์ฟเวอร์นักพัฒนาเพื่อนำเสนอผลการจับคู่
- หากเซิร์ฟเวอร์นักพัฒนาได้รับผลการจับคู่สำเร็จ ให้ส่งกลับ รหัสสถานะการตอบกลับ HTTP (HttpStatus 200) ไปยังเซิร์ฟเวอร์ Hive
URL การร้องขอ (URL ของเซิร์ฟเวอร์นักพัฒนา)¶
ลงทะเบียน URL ของเซิร์ฟเวอร์นักพัฒนาที่จะได้รับผลลัพธ์การจับคู่โดยการขอ API callback ในคอนโซล Hive เป็นจุดสิ้นสุดของ API URL นี้ต้องเป็นที่อยู่ที่เข้าถึงได้จากภายนอก
พารามิเตอร์หัวข้อ¶
ค่าหัวข้อเมื่อทำการเรียก API กลับมีดังนี้
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็น | 
|---|---|---|---|
| X-Match-Signature | ค่าลายเซ็นที่เข้ารหัสด้วยอัลกอริธึม HMAC SHA-256 สำหรับข้อมูลที่ส่ง | สตริง | ใช่ | 
Note
คุณสามารถตรวจสอบความถูกต้องของผลการจับคู่ผ่านค่า X-Match-Signature 
ค่าของ X-Match-Signature สามารถได้รับจากการใช้โค้ดตัวอย่างด้านล่าง (Java) และค่าคีย์ HMAC SHA-256 ที่ใช้ในโค้ดสามารถพบได้ในคอนโซล Hive.
```java
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class MatchSignature {  
    private static final String HMAC_SHA_256 = "HmacSHA256";
    private static final String UTF_8 = "UTF-8";
    public String getSignature(String secret, String httpRequestBody) throws Exception {
            SecretKeySpec key = new SecretKeySpec(secret.getBytes(), HMAC_SHA_256);
            Mac mac = Mac.getInstance(HMAC_SHA_256);
            mac.init(key);
            byte[] source = httpRequestBody.getBytes(UTF_8);
            return new String(Base64.getEncoder().encode(mac.doFinal(source)), StandardCharsets.UTF_8);
    }
}
```
พารามิเตอร์ของร่างกาย (ผลลัพธ์ที่ตรงกันจะถูกส่งผ่าน API การเรียกกลับ)¶
ข้อมูลผลลัพธ์การจับคู่ที่ส่งระหว่างการเรียก API กลับมีดังนี้
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | 
|---|---|---|
| gameIndex | ค่า gameIndex ของการแข่งขันที่เสร็จสิ้น | int | 
| matchId | ค่า matchId ของการแข่งขันที่เสร็จสิ้น | int | 
| matchingInfos | อาร์เรย์ของข้อมูลเกี่ยวกับผู้ใช้แอปที่เสร็จสิ้นการแข่งขัน ผู้ใช้ที่มีฟิลด์ `playerId` เป็น `0` จะถูกจัดการเป็นบอท 
 | json | 
| timeoutPlayerInfos | อาร์เรย์ของข้อมูลเกี่ยวกับผู้ใช้แอปที่หมดเวลาโดยไม่มีการจับคู่ 
 | json | 
ตัวอย่างการเรียก API (Hive Server → Developer Server)¶
curl --location 'HIVE 콘솔에 등록한 앱 개발사 API 엔드포인트' --header 'Content-Type: application/json' --header 'X-Match-Signature: nj2YlgGTlLXcAhrl6ijSgfD71gTWokBiM8WPn72xxg8=' --data '{
   "gameIndex": 1,
   "matchId": 1,
   "matchingInfos": [
       {
           "matchingId": "1:1_2024-06-05T05:43:28.91_1",
           "privateInfos": [
               {
                   "playerId": 100,
                   "point": 1000
               },
               {
                   "playerId": 101,
                   "point": 1000
               }
           ]
       }
   ],
   "timeoutPlayerInfos": []
}'
ค่าที่ส่งกลับ¶
หากผลการจับคู่ที่ส่งมาจากเซิร์ฟเวอร์ Hive ผ่านการร้องขอ API การตอบกลับได้รับการรับอย่างสำเร็จโดยเซิร์ฟเวอร์ของนักพัฒนา เซิร์ฟเวอร์ควรส่งกลับ HttpStatus 200 เป็นการตอบสนอง. 
ตามการตอบกลับจากเซิร์ฟเวอร์ของนักพัฒนา มันถูกประมวลผลในลักษณะต่อไปนี้บนเซิร์ฟเวอร์ Hive.
- การตอบสนอง HttpStatus 200: ได้มีการกำหนดว่าผลลัพธ์ที่ตรงกันได้เสร็จสมบูรณ์แล้ว และคำขอ API ที่เกี่ยวข้องจะถูกยุติ
- การตอบสนองด้วยค่าที่ไม่ใช่ HttpStatus 200หรือ Timeout: API จะถูกเรียกขออีกครั้งในช่วงเวลาที่กำหนดเพื่อส่งมอบผลลัพธ์ที่ตรงกัน
- ไม่มีการตอบสนอง HttpStatus 200หรือไม่มีค่าการตอบสนองอื่น: หากไม่มีการตอบสนองอย่างต่อเนื่อง ผลลัพธ์ที่ตรงกันจะไม่ถูกส่งมอบเป็นระยะเวลาหนึ่งจากมุมมองการจัดการระบบ