ข้ามไปที่เนื้อหา

API การจับคู่

ข้อกำหนดเบื้องต้น

ในการใช้ API การจับคู่ คุณต้องเตรียมรายการต่อไปนี้

  • โทเค็นการตรวจสอบสิทธิ์สำหรับการเรียก API (Certification Key): Hive Console App Center > จัดการโครงการ > เลือกเกมของคุณจากรายการเกม > รายละเอียดเกม > ข้อมูลพื้นฐาน > Certification Key
  • ดัชนีเกม (gameIndex): Hive Console App Center > จัดการโครงการ > เลือกเกมของคุณจากรายการเกม > รายละเอียดเกม > ข้อมูลพื้นฐาน > Game Index
  • หมายเลขการแข่งขัน (matchId): คุณสามารถตรวจสอบสิ่งนี้เมื่อสร้างการแข่งขันใน Hive Console.

URL รากคำขอ

เซิร์ฟเวอร์ URL
LIVE api-match.withhive.com
SANDBOX sandbox-api-match.withhive.com

รหัสการตอบกลับทั่วไป

นี่คือรหัสการตอบสนอง API ที่พบบ่อย

รหัส ค่า คำอธิบาย
200 สำเร็จ ดูที่การตอบสนองของ API แต่ละรายการ
400 คำขอไม่ถูกต้อง พารามิเตอร์คำขอหรือข้อมูลในคำขอไม่ถูกต้อง
401 ไม่ได้รับอนุญาต ส่วนหัวการอนุญาตในข้อความคำขอขาดหายไปหรือไม่ถูกต้อง
403 ห้ามเข้าถึง โทเค็นการตรวจสอบสิทธิ์ (Certification Key) สำหรับการเรียก API ไม่ถูกต้อง
404 ไม่พบ เส้นทาง API ไม่ถูกต้อง
500 ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์

การจับคู่คำขอ

เมื่อผู้ใช้แต่ละคนขอแมตช์ ให้เรียกใช้ API นี้ แมตช์ที่ตรงกับ matchId จะต้องถูกสร้างล่วงหน้าใน Hive Console.

URL ที่ร้องขอ

ลิงก์สด https://api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
ลิงก์แซนด์บ็อกซ์ https://sandbox-api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
วิธีการ HTTP POST
ประเภทเนื้อหา application/json

พารามิเตอร์หัว

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
การอนุญาต โทเค็นการตรวจสอบสิทธิ์สำหรับการเรียก API (Bearer) string Y

พารามิเตอร์เส้นทาง

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
gameIndex รหัสโปรเจกต์ที่มีอยู่ใน Hive Console App Center int ใช่
matchId รหัสการแข่งขันแต่ละรายการที่สร้างขึ้นใน Hive Console int ใช่

เนื้อหาคำขอ

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
playerId รหัสประจำตัวบัญชี long Y
point คะแนนที่จะใช้ในการแข่งขัน ช่วงค่าที่ป้อนคือ 0 ~ 999,999,999 หากไม่ป้อน จะใช้ค่า `0` integer N
extraData ข้อมูลบัญชีเพิ่มเติม (ชื่อเล่น, ระดับ, ประเทศ, ฯลฯ) สามารถป้อนได้สูงสุด 256 ตัวอักษร จะรวมอยู่ในผลการแข่งขัน string N

การตอบกลับ

ชื่อฟิลด์ คำอธิบาย
playerId รหัสบัญชี
matchInfo ข้อมูลเป้าหมายการร้องขอ
  • gameIndex: ค่าของ gameIndex
  • matchId: ค่าของ matchId
requestingStatus ข้อมูลสถานะการร้องขอ
  • requested: การร้องขอการแข่งขันสำเร็จ
  • notRequested: การแข่งขันไม่ได้ถูกขอ หรือการแข่งขันได้เสร็จสิ้นแล้วจึงไม่มีการร้องขอการแข่งขันที่กำลังดำเนินอยู่
requestingInfo ข้อมูลการร้องขอ
  • requestTimeUtc: เวลาที่ร้องขอใน UTC+0
  • point: point ที่กรอกในขณะทำการร้องขอ
  • extraData: extraData ที่กรอกในขณะทำการร้องขอ
matchingInfo ข้อมูลสถานะการแข่งขัน (status)
  • matchingInProgress: การแข่งขันกำลังดำเนินอยู่
  • timeout: การแข่งขันไม่ได้ทำภายในเวลาที่กำหนด
  • matched: การแข่งขันเสร็จสิ้น

ตัวอย่างคำขอ

curl --location 'https://sandbox-api-match.withhive.com/gameindexes/1/matchmakings/1/request' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ya3a' \
--data '{
   "playerId":100,
   "point": 1000
}'

ตัวอย่างการตอบกลับ

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "requested",
   "requestingInfo": {
       "requestTimeUtc": "2024-06-05T05:09:28.72",
       "point": 1000
   },
   "matchingInfo": {
       "status": "matchingInProgress"
   }
}

ตรวจสอบสถานะการจับคู่

ตรวจสอบสถานะของการแข่งขันที่ร้องขอ

URL ขอ

ลิงก์สด https://api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
ลิงก์แซนด์บ็อกซ์ https://sandbox-api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
วิธีการ HTTP GET

พารามิเตอร์หัว

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
การอนุญาต โทเค็นการตรวจสอบสิทธิ์สำหรับการเรียก API (Bearer) string Y

พารามิเตอร์เส้นทาง

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
gameIndex ตัวระบุโครงการที่มีอยู่ใน Hive Console App Center int ใช่
matchId ตัวระบุสำหรับแต่ละแมตช์ที่สร้างขึ้นใน Hive Console int ใช่

พารามิเตอร์การค้นหา

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
id รหัสผู้ใช้ (`playerId`) long Y

การตอบสนอง

ชื่อฟิลด์ คำอธิบาย
playerId รหัสบัญชี
matchInfo ข้อมูลที่ร้องขอ
  • gameIndex: ค่า gameIndex
  • matchId: ค่า matchId
requestingStatus ข้อมูลสถานะการร้องขอ
  • requested: การร้องขอแมตช์สำเร็จ
  • notRequested: ไม่ได้ร้องขอแมตช์ หรือแมตช์ได้เสร็จสิ้นแล้วจึงไม่มีการร้องขอแมตช์ที่กำลังดำเนินอยู่
requestingInfo ข้อมูลการร้องขอ
  • requestTimeUtc: เวลาที่ร้องขอใน UTC+0
  • point: point ที่ป้อนในขณะทำการร้องขอ
  • extraData: extraData ที่ป้อนในขณะทำการร้องขอ
matchingInfo ข้อมูลสถานะแมตช์ (status)
  • matchingInProgress: แมตช์กำลังดำเนินอยู่
  • timeout: แมตช์ไม่เสร็จสิ้นภายในเวลาที่กำหนด
  • matched: แมตช์เสร็จสิ้น

ตัวอย่างคำขอ

curl --location --request GET 'https://sandbox-api-match.withhive.com/gameindexes/1/matchmakings/1/players?id=100' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ya3a'

ตัวอย่างการตอบกลับ

สถานะการแข่งขันเมื่อคุณยังไม่ได้ทำการขอการแข่งขันมีดังนี้

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "notRequested"
}


Request Match จะส่งคืนสถานะ requested และ matchingInProgress เมื่อการจับคู่ยังคงดำเนินอยู่.

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "requested",
   "requestingInfo": {
       "requestTimeUtc": "2024-06-05T05:09:28.72",
       "point": 1000
   },
   "matchingInfo": {
       "status": "matchingInProgress"
   }
}


เมื่อทำการตรวจสอบสถานะคำขอหลังจากการแข่งขันเสร็จสิ้น จะส่งกลับผลลัพธ์เป็น matched หรือ timeout นี่คือสถานะที่การแข่งขันเสร็จสิ้นแล้ว แต่ยังไม่ได้รับ การเรียกกลับผลการแข่งขัน

    {
       "playerId": 100,
       "matchInfo": {
           "gameIndex": 1,
           "matchId": 1
       },
       "requestingStatus": "requested",
       "requestingInfo": {
           "requestTimeUtc": "2024-06-05T05:09:28.72",
           "point": 1000
       },
       "matchingInfo": {
           "status": "matched"
       }
   }


เมื่อการแข่งขันเสร็จสิ้น, Hive เซิร์ฟเวอร์จะส่ง การเรียกกลับผลการแข่งขัน ไปยังเซิร์ฟเวอร์ของคุณ หากเซิร์ฟเวอร์ของคุณได้รับการเรียกกลับผลการแข่งขัน, ส่งคืน HTTPStatus 200 ไปยัง Hive เซิร์ฟเวอร์, และหากคุณตรวจสอบสถานะคำขอการแข่งขันอีกครั้ง, มันจะเปลี่ยนเป็น notRequested และคีย์ matchingInfo จะถูกลบออกตามที่แสดงด้านล่าง นี่เป็นเพราะ Hive เซิร์ฟเวอร์ถือว่าคำขอการแข่งขันของคุณเสร็จสิ้นเมื่อได้รับ HTTPStatus 200 ในการตอบกลับการเรียกกลับและลบธุรกรรมคำขอการแข่งขันออก

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "notRequested"
}


ก่อนคำขอจับคู่ หลังคำขอจับคู่ หลังสร้างผลการจับคู่ หลังการรับการเรียกกลับ
requestingStatus ไม่ถูกขอ ถูกขอ ถูกขอ ไม่ถูกขอ
matchingInfo > Status N/A กำลังจับคู่ จับคู่หรือหมดเวลา N/A
Remarks กำลังจับคู่ ก่อนการรับการเรียกกลับ

ยกเลิกคำขอการแข่งขัน

ยกเลิกคำขอจับคู่ เมื่อคุณยกเลิกคำขอจับคู่ ธุรกรรมคำขอจับคู่จะถูกลบออกจาก Hive Server.

หากการแข่งขันเสร็จสิ้นหลังจาก Request Match และคุณได้รับ Match Result Callback และตอบกลับด้วย HTTPStatus 200 เซิร์ฟเวอร์ Hive จะถือว่าการแข่งขันเสร็จสิ้นและลบธุรกรรมคำขอการแข่งขัน ในสถานะนี้ แม้ว่าคุณจะเรียกเพื่อยกเลิกคำขอการแข่งขัน เนื่องจากธุรกรรมคำขอการแข่งขันได้ถูกลบไปแล้ว การดำเนินการยกเลิกจะไม่ถูกดำเนินการและจะไม่มีข้อยกเว้นใด ๆ ถูกส่งคืน

URL ที่ร้องขอ

URL แบบสด https://api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players/{playerId}
URL แบบแซนด์บ็อกซ์ https://sandbox-api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players/{playerId}
วิธีการ HTTP DELETE

พารามิเตอร์หัวเรื่อง

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
การอนุญาต โทเค็นการตรวจสอบสิทธิ์สำหรับการเรียก API (Bearer) string Y

พารามิเตอร์เส้นทาง

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
gameIndex รหัสโปรเจกต์ที่มีอยู่ใน Hive Console App Center int ใช่
matchId รหัสสำหรับแต่ละแมตช์ที่สร้างใน Hive Console int ใช่
playerId รหัสผู้ใช้ long ใช่

การตอบกลับ

ถ้าเป็น 200 OK ร่างกายจะว่างเปล่า.

ตัวอย่างคำขอ

curl --location --request DELETE 'https://sandbox-api-match.withhive.com/gameindexes/1/matchmakings/1/players/100' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ya3a'

ตัวอย่างการตอบกลับ

ไม่มีการตอบสนองเฉพาะหากคำขอถูกยกเลิกตามปกติ

ผลลัพธ์การจับคู่ callback

เมื่อการแข่งขันเสร็จสิ้น เซิร์ฟเวอร์ Hive จะส่งผลการแข่งขันไปยังเซิร์ฟเวอร์ของคุณเป็นการเรียกกลับ หากเซิร์ฟเวอร์ของคุณได้รับการเรียกกลับผลการแข่งขันโดยไม่มีปัญหา เซิร์ฟเวอร์ของคุณควรตอบสนองด้วย HttpStatus 200 โดยการลงทะเบียน URL เซิร์ฟเวอร์ที่ต้องการใน Hive Console ผลการแข่งขันจะถูกส่งไปยังที่อยู่นี้เป็นการเรียกกลับ ที่อยู่ต้องเป็น URL ที่เข้าถึงได้สาธารณะ ข้อมูล API มีดังนี้

URL การรับ Callback (Hive เซิร์ฟเวอร์ → เซิร์ฟเวอร์ของคุณ)

เมื่อจุดสิ้นสุด API เซิร์ฟเวอร์ของคุณถูกลงทะเบียนใน Hive Console เซิร์ฟเวอร์ Hive จะส่งผลลัพธ์การเรียกกลับไปยังจุดสิ้นสุดนี้เมื่อการจับคู่เสร็จสมบูรณ์

พารามิเตอร์หัวเรื่อง

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
X-Match-Signature ค่าลายเซ็นของเนื้อหาที่เข้ารหัสด้วยอัลกอริธึม HMAC SHA-256 สตริง ใช่

ค่าที่ส่งผ่านกับการเรียกกลับ

ชื่อฟิลด์ คำอธิบาย ประเภท
gameIndex ค่า gameIndex ของการแข่งขันที่เสร็จสมบูรณ์ int
matchId ค่า matchId ของการแข่งขันที่เสร็จสมบูรณ์ int
matchingInfos อาร์เรย์ของข้อมูลของผู้ใช้แอปที่ถูกจับคู่ ผู้ใช้ที่มีค่า `playerId` เป็น `0` จะถือว่าเป็นบอท
  • matchingId: รหัสการแข่งขัน
  • privateInfos: อาร์เรย์ของข้อมูลของผู้ใช้ที่จับคู่ในเกมเดี่ยว (รูปแบบเดียวกับ timeoutPlayerInfos)
  • teamInfos: อาร์เรย์ของข้อมูลของผู้ใช้ที่จับคู่ในเกมทีม (teamIndex: หมายเลขทีม, playerInfos: อาร์เรย์ของข้อมูลสมาชิกทีม, รูปแบบเดียวกับ timeoutPlayerInfos)
json
timeoutPlayerInfos อาร์เรย์ของข้อมูลของผู้ใช้แอปที่ไม่ได้จับคู่และหมดเวลา
  • extraData: ข้อมูลเพิ่มเติมที่กรอกเมื่อมีการขอการแข่งขัน
  • point: คะแนนที่กรอกเมื่อมีการขอการแข่งขัน
  • playerId: playerId ที่กรอกเมื่อมีการขอการแข่งขัน
json

ตัวอย่างการเรียกกลับ (Hive เซิร์ฟเวอร์ → เซิร์ฟเวอร์ของคุณ)

curl --location 'The API endpoint of your server registered in the Hive Console.' --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": []
}'


คุณสามารถตรวจสอบความถูกต้องของผลลัพธ์การเรียกกลับโดยใช้ค่าของพารามิเตอร์ Header X-Match-Signature และกุญแจที่จะใช้ในการคำนวณอัลกอริธึมสามารถพบได้ใน Hive Console ด้านล่างเป็นตัวอย่างของโค้ด Java เพื่อรับ Signature

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);
   }
}


หากการเรียกกลับที่ส่งจากเซิร์ฟเวอร์ Hive ถูกส่งไปยังสำเร็จ คุณควรส่งสถานะ HTTP 200 กลับเป็นการตอบสนอง

  • การตอบกลับด้วย HttpStatus 200: ถือว่าการแข่งขันเสร็จสมบูรณ์อย่างสำเร็จ ดังนั้นคำขอการแข่งขันจะถูกยกเลิก
  • การตอบกลับด้วยค่าที่ไม่ใช่ HttpStatus 200 หรือ Timeout: การตอบกลับผลการแข่งขันจะถูกส่งซ้ำในระยะเวลาปกติ

หากเซิร์ฟเวอร์ Hive ไม่สามารถรับการตอบสนองสถานะ HTTP 200 ติดต่อกันได้ ผลลัพธ์การจับคู่จะไม่ถูกส่งกลับเป็นระยะเวลาหนึ่งเพื่อวัตถุประสงค์ในการจัดการระบบ