ข้ามไปยังเนื้อหาหลัก
เอกสารกำหนด API รุ่นที่ 2.3

API การตรวจสอบสิทธิ์

ผ่านอินเทอร์เฟซแบบ GET ที่ได้มาตรฐาน moonpacket จะดึง 'กฎรางวัล' และ 'คุณลักษณะผู้ใช้' จากเซิร์ฟเวอร์ของคุณอย่างกระตือรือร้น การตัดสินใจเชิงlogic ทั้งหมดถูกจัดการโดย moonpacket.

ตรรกะการโต้ตอบ

กระบวนการทั้งหมดแบ่งออกเป็นสองช่วง: 'ช่วงตั้งค่า' และ 'ช่วงรันไทม์' moonpacket จะส่งคำขอไปยัง API ของคุณโดยใช้วิธี GET:

moonpacket ลูกค้า / เซิร์ฟเวอร์ การจับคู่ที่ลงตัว (ในพื้นที่) กฎที่เก็บไว้: Level >= 10 สถานะผู้ใช้: Level = 12 ✓ แจกจ่ายรางวัล ⚙️ API ของคุณ GET /check ?user_id=... 1. ระหว่างการติดตั้ง: กฎการดึงข้อมูล (GET) 2. ระหว่างการเรียกร้อง: ค query สถานะ (GET) ข้อมูล JSON
← 左右滑動查看流程 →
ขั้นตอนที่หนึ่ง

ขั้นตอนที่ 1: กำหนดกฎ (การกำหนดค่า)

เหตุการณ์กระตุ้น: เมื่อ URL ถูกกรอกใน 'การตั้งค่าข้อกำหนดการเคลม' และส่งไปแล้ว

GET GET
RET ส่งคืนออบเจ็กต์การกำหนดกฎพร้อมตัวดำเนินการ (gt, eq, lt...)
ขั้นตอนที่สอง

ระยะที่ 2: ตรวจสอบผู้ใช้ (ระหว่างดำเนินการ)

เหตุการณ์ที่กระตุ้น: เมื่ผู้ใช้พยายามขอรับอั่งเปา

GET ?user_id=...
RET ส่งคืนค่าพารามิเตอร์จริงของผู้ใช้เฉพาะ (ค่าธรรมดาหรือสตริง)

💡 ผู้ให้บริการที่รองรับ: `eq` (เท่ากับ, รองรับสตริง/ตัวเลข), `gt` (มากกว่า), `gte` (มากกว่าหรือเท่ากับ), `lt` (น้อยกว่า), `lte` (น้อยกว่าหรือเท่ากับ). ค่าของผู้ให้บริการที่ไม่ใช่ `eq` ต้องเป็นตัวเลข.

สถานการณ์การใช้งาน

🎮

การรวม GameFi

กำหนดกฎ `level >= 10` เมื่อผู้ใช้ขอรับ moonpacket จะตรวจสอบคุณสมบัติของผู้ใช้ หาก `level: 12` จะได้รับการอนุมัติ.

🆔

รางวัลผูกตัวตน

กำหนดกฎ `kyc == true` โดยที่ moonpacket จะตรวจสอบสถานะของผู้ใช้ และถ้าผลลัพธ์คือ `kyc: true` จะมีการแจกจ่ายรางวัล.

🚀

การกรองรายชื่อดำ

กำหนดกฎ `is_blacklist == false`. หาก API คืนค่า `is_blacklist: true`, การขอรับจะถูกปฏิเสธ.

ตัวอย่างการสื่อสาร (คำขอ GET)

Mode A 1. กำหนดกฎ (ตั้งค่า)

เมื่อส่งการตั้งค่าให้ส่งคืน JSON ที่มีผู้ดำเนินการ

ขอเนื้อหา
GET /check HTTP/1.1
Host: api.your-game.com
Content-Type: application/json
X-API-KEY: 1234567890
X-API-TIMESTAMP: 1698765432
X-API-NONCE: 987654
X-API-SIGNATURE: 5d41402abc4b2a76b9719d911017c592...

# No user_id = Get Rules
ผลการกลับ (200 OK)
{
  "data": {
    "level": {
      "gt": 99
    },
    "status": {
      "eq": "active"
    },
    "is_blacklist": {
      "eq": false
    }
  }
}

Mode B 2. สถานะการสอบถาม (รันไทม์)

เมื่อผู้ใช้เรียกร้อง ให้ส่งค่าหรือสตริงที่บริสุทธิ์กลับคืน

ขอเนื้อหา
GET /check?user_id=666666666 HTTP/1.1
Host: api.your-game.com
Content-Type: application/json
X-API-KEY: 1234567890
X-API-TIMESTAMP: 1698765432
X-API-NONCE: 123456
X-API-SIGNATURE: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6...

# With user_id = Get User Status
ผลการกลับ (200 OK)
{
  "data": {
    "level": 100,
    "status": "active",
    "is_blacklist": false
  }
}

การกำหนดโครงสร้างข้อมูล (TypeScript)

types.d.ts
// Step 1: Rules Definition
interface RulesResponse {
  data: {
    [key: string]: {
      eq?: string | number | boolean;
      gt?: number;
      gte?: number;
      lt?: number;
      lte?: number;
    };
  };
}

// Step 2: User Status
interface UserStatusResponse {
  data: {
    [key: string]: string | number | boolean;
  };
}

🔐 การตรวจสอบความปลอดภัย

เพื่อรับรองความถูกต้องของคำขอ moonpacket จะรวมลายเซ็นในส่วนหัว คุณสามารถดูโค้ดทางด้านขวาสำหรับการตรวจสอบได้:

หมายเลขหัวข้อที่จำเป็น

X-API-KEY
X-API-TIMESTAMP
X-API-NONCE
X-API-SIGNATURE

อัลกอริธึมลายเซ็น

ลายเซ็น = HMAC_SHA256(ความลับ, เนื้อหา + เวลา + nonce)
verify.ts
import crypto from "crypto";

// 1. Generate Signature
function generateSignature(
  apiSecret: string,
  body: object,
  timestamp: number,
  nonce?: string
) {
  const payload = JSON.stringify(body) + timestamp + (nonce || "");
  return crypto.createHmac("sha256", apiSecret).update(payload).digest("hex");
}

// Client Usage Example
const apiKey = "client123";
const apiSecret = "mysecretkey";
const body = { /* Query Params or Body */ }; 
const timestamp = Date.now();
const nonce = crypto.randomBytes(8).toString("hex");

const signature = generateSignature(apiSecret, body, timestamp, nonce);

console.log({ apiKey, timestamp, nonce, signature });

// 2. Verify Signature
function verifySignature(
  apiSecret: string,
  body: object,
  timestamp: number,
  nonce: string,
  signature: string
) {
  const expected = generateSignature(apiSecret, body, timestamp, nonce);
  return expected === signature;
}

// Verification Result
const isValid = verifySignature(apiSecret, body, timestamp, nonce, signature);
console.log("Is Valid:", isValid);

⚠️ หมายเหตุ

  • หมดเวลา: ตรวจสอบให้แน่ใจว่า API สามารถส่งผลลัพธ์ภายใน 3 วินาที ได้.
  • รูปแบบ: กรุณาปฏิบัติตามโครงสร้าง JSON อย่างเคร่งครัด มิฉะนั้นจะทำให้เกิดความล้มเหลวในการแยก解析.

รหัสสถานะ

รหัสสถานะ สถานะ คำอธิบาย
200 OK คำขอสำเร็จ
400 Bad Request เกิดข้อผิดพลาดในพารามิเตอร์คำขอ (เช่น รูปแบบไม่ถูกต้อง)
401 Unauthorized หายตัวไปจากหัวข้อการอนุญาต หรือคีย์ไม่ถูกต้อง
403 Forbidden ข้อจำกัด IP หรือการเข้าถึงทรัพยากรที่ไม่ได้รับอนุญาต
404 Not Found หมายเลขผู้ใช้ไม่มีอยู่ (สำหรับสถานการณ์การตรวจสอบสถานะผู้ใช้)
500 Server Error ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน

⚠️ การชี้แจงเกี่ยวกับ API ของบุคคลที่สาม

วิธีการรวมเข้ากับแพลตฟอร์มของ pihak ketiga ที่กล่าวถึงในเอกสารนี้เป็นเพียงเพื่อการอ้างอิงเท่านั้น นักพัฒนาควรปรึกษาและปฏิบัติตามเอกสารนักพัฒนาทางการล่าสุดของแพลตฟอร์ม