Lanjutkan ke konten utama
Spesifikasi API v2.3

API Autentikasi

Melalui antarmuka kueri GET yang terstandarisasi, moonpacket secara aktif mengambil 'aturan hadiah' dan 'atribut pengguna' dari server Anda. Semua penilaian logis ditangani oleh moonpacket.

Logika Interaksi

Seluruh proses dibagi menjadi dua fase: 'Fase Persiapan' dan 'Fase Waktu Jalan'. moonpacket akan mengirim permintaan ke API Anda menggunakan metode GET:

moonpacket Klien / Server Kecocokan Logis (Lokal) Aturan Tersimpan: Level >= 10 Status Pengguna: Level = 12 ✓ Sebarkan Hadiah ⚙️ API Anda GET /check ?user_id=... 1. Selama Pengaturan: Aturan Pengambilan (GET) 2. Selama Klaim: Status Kuery (Dapatkan) JSON data
← 左右滑動查看流程 →
Langkah Satu

Tahap 1: Definisikan Aturan (Konfigurasi)

Peristiwa pemicu: saat URL diisi dalam 'Pengaturan Kondisi Klaim' dan diserahkan

GET GET
RET Mengembalikan objek definisi aturan dengan operator (gt, eq, lt...)
Langkah Dua

Tahap 2: Validasi Pengguna (Waktu Nyata)

Memicu acara: ketika pengguna mencoba mengklaim angpao

GET ?user_id=...
RET Mengembalikan nilai atribut aktual pengguna tertentu itu (nilai biasa atau string)

💡 Operator yang Didukung: `eq` (sama dengan, mendukung string/angka), `gt` (lebih besar dari), `gte` (lebih besar dari atau sama dengan), `lt` (kurang dari), `lte` (kurang dari atau sama dengan). Nilai untuk operator non-`eq` harus berupa angka.

Skenario Aplikasi

🎮

Integrasi GameFi

Tentukan aturan `level >= 10`. Ketika pengguna mengklaim, moonpacket memeriksa atribut pengguna, jika `level: 12` maka disetujui.

🆔

Reward Ikatan Identitas

Tentukan aturan `kyc == true`. moonpacket memeriksa status pengguna, dan jika itu mengembalikan `kyc: true`, maka angpao akan didistribusikan.

🚀

Penyaringan Daftar Hitam

Tentukan aturan `is_blacklist == false`. Jika API mengembalikan `is_blacklist: true`, klaim ditolak.

Contoh Komunikasi (Permintaan GET)

Mode A 1. Tentukan Aturan (Pengaturan)

Ketika mengirimkan pengaturan, kembalikan JSON yang berisi operator.

Permintaan Konten
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
Kembali Hasil (200 OK)
{
  "data": {
    "level": {
      "gt": 99
    },
    "status": {
      "eq": "active"
    },
    "is_blacklist": {
      "eq": false
    }
  }
}

Mode B 2. Status Kuery (Runtime)

Saat pengguna mengklaim, kembalikan nilai atau string murni.

Permintaan Konten
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
Kembali Hasil (200 OK)
{
  "data": {
    "level": 100,
    "status": "active",
    "is_blacklist": false
  }
}

Definisi Struktur Data (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;
  };
}

🔐 Validasi Keamanan

Untuk memastikan keaslian permintaan, moonpacket akan menyertakan tanda tangan di Header. Anda dapat merujuk ke kode di sebelah kanan untuk validasi:

Header yang Diperlukan

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

Algoritma Tanda Tangan

Tanda tangan = HMAC_SHA256(rahasia, body + timestamp + 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);

⚠️ Catatan

  • Timeout: Pastikan API dapat mengembalikan hasil dalam waktu 3 detik.
  • Format: Harap ikuti struktur JSON secara ketat, jika tidak, itu akan menyebabkan kegagalan parsing.

Kode Status

Kode Status Status Deskripsi
200 OK Permintaan berhasil
400 Bad Request Kesalahan parameter permintaan (mis. format tidak benar).
401 Unauthorized Header Otorisasi hilang atau kunci tidak valid.
403 Forbidden Pembatasan IP atau akses tidak sah ke sumber daya.
404 Not Found ID pengguna tidak ada (untuk skenario pengqueryan status pengguna).
500 Server Error Kesalahan server internal.

⚠️ Pernyataan Penolakan Tanggung Jawab API Pihak Ketiga

Metode integrasi untuk platform pihak ketiga yang disebutkan dalam dokumen ini hanya untuk referensi. Pengembang harus berkonsultasi dan mematuhi dokumentasi pengembang resmi terbaru dari platform.