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:
Tahap 1: Definisikan Aturan (Konfigurasi)
⚡ Peristiwa pemicu: saat URL diisi dalam 'Pengaturan Kondisi Klaim' dan diserahkan
Tahap 2: Validasi Pengguna (Waktu Nyata)
⚡ Memicu acara: ketika pengguna mencoba mengklaim angpao
💡 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.
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 {
"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.
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 {
"data": {
"level": 100,
"status": "active",
"is_blacklist": false
}
} Definisi Struktur Data (TypeScript)
// 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
Algoritma Tanda Tangan
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.