Sari la conținutul principal
Specificație API v2.3

API de Autentificare

Printr-o interfață standardizată de interogare GET, moonpacket preia activ 'regulile de recompensă' și 'atributele utilizatorului' de la serverul dumneavoastră. Toate judecățile logice sunt gestionate de moonpacket.

Logica interacțiunii

Întregul proces este împărțit în două faze: 'Faza de Configurare' și 'Faza de Execuție'. moonpacket va trimite cereri către API-ul tău folosind metoda GET:

moonpacket Client / Server Potrivire logică (local) Reguli stocate: Level >= 10 Starea utilizatorului: Level = 12 ✓ Distribuie Recompense ⚙️ API-ul tău GET /check ?user_id=... 1. În timpul configurării: Regulile de recuperare (GET) 2. În timpul revendicării: Verificare statut (GET) JSON data
← 左右滑動查看流程 →
Pasul Unu

Faza 1: Definirea Regulilor (Configurație)

Eveniment declanșator: când URL-ul este completat în 'Configurarea condițiilor de revendicare' și trimis

GET GET
RET Returnează obiectul definit de regulă cu operatori (gt, eq, lt...)
Pasul Doi

Faza 2: Validarea Utilizatorului (Runtime)

Declanșarea evenimentului: când utilizatorul încearcă să revendice Red Packet

GET ?user_id=...
RET Returnează valoarea atributului efectiv a acelui utilizator specific (valoare simplă sau șir)

💡 Operatori suportati: `eq` (egal, suportă șiruri/numerice), `gt` (mai mare decât), `gte` (mai mare decât sau egal cu), `lt` (mai mic decât), `lte` (mai mic decât sau egal cu). Valorile pentru operatorii non-`eq` trebuie să fie numere.

Scenarii de Aplicație

🎮

Integrarea GameFi

Definiți regula `level >= 10`. Când utilizatorul revendică, moonpacket verifică atributele utilizatorului, dacă `level: 12` atunci este aprobat.

🆔

Recompensă pentru legarea identității

Define regula `kyc == true`. moonpacket verifică starea utilizatorului, iar dacă aceasta returnează `kyc: true`, atunci recompensele sunt distribuite.

🚀

Filtrarea listei negre

Definiți regula `is_blacklist == false`. Dacă API-ul returnează `is_blacklist: true`, revendicarea este respinsă.

Exemplu de comunicare (cerere GET)

Mode A 1. Definiți Regulile (Configurare)

Când trimiteți setările, returnați JSON care conține operatori.

Solicitați conținutul
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
Întoarce rezultatul (200 OK)
{
  "data": {
    "level": {
      "gt": 99
    },
    "status": {
      "eq": "active"
    },
    "is_blacklist": {
      "eq": false
    }
  }
}

Mode B 2. Stare Cerere (Runtime)

Când utilizatorul revendică, returnați valori sau șiruri pure.

Solicitați conținutul
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
Întoarce rezultatul (200 OK)
{
  "data": {
    "level": 100,
    "status": "active",
    "is_blacklist": false
  }
}

Definiția structurii de date (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;
  };
}

🔐 Validare de Securitate

Pentru a asigura autenticitatea cererilor, moonpacket va include o semnătură în antet. Puteți consulta codul din dreapta pentru validare:

Antete necesare

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

Algoritm de semnare

Semnătură = HMAC_SHA256(secret, corp + 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);

⚠️ Notă

  • Timeout: Asigurați-vă că API-ul poate returna rezultate în 3 secunde.
  • Format: Vă rugăm să respectați cu strictețe structura JSON, altfel va duce la eșecul analizei.

Coduri de Status

Cod de status Stare Descriere
200 OK Cerere reușită
400 Bad Request Eroare parametrului cererii (de exemplu, format incorect).
401 Unauthorized Header-ul de autorizare lipsă sau cheia este invalidă.
403 Forbidden Restricție IP sau acces neautorizat la resursă.
404 Not Found ID Utilizator nu există (pentru scenariile de interogare a stării utilizatorului).
500 Server Error Eroare internă a serverului.

⚠️ Declarație de declinare a responsabilității API de terță parte

Metodele de integrare pentru platformele terțe menționate în acest document sunt doar pentru referință. Dezvoltatorii ar trebui să consulte și să respecte cea mai recentă documentație oficială pentru dezvoltatori a platformei.