Passer au contenu principal
Spécification API v2.3

API d'authentification

Grâce à une interface de requête GET standardisée, moonpacket récupère activement les 'règles de récompense' et les 'attributs utilisateur' depuis votre serveur. Tous les jugements logiques sont traités par moonpacket.

Logique d'Interaction

Le processus entier est divisé en deux phases : 'Phase de configuration' et 'Phase d'exécution'. moonpacket enverra des requêtes à votre API en utilisant la méthode GET :

moonpacket Client / Serveur Correspondance logique (locale) Règles enregistrées : Level >= 10 État de l'utilisateur : Level = 12 ✓ Distribuer les récompenses ⚙️ Votre API GET /check ?user_id=... 1. Pendant la configuration : Règles de récupération (GET) 2. Pendant la réclamation : Vérifier le statut (GET) JSON data
← 左右滑動查看流程 →
Étape Un

Phase un : définition des règles (Configuration)

Moment de déclenchement : lorsque l'URL est remplie et soumise dans les paramètres de conditions de réception

GET GET
RET Retourne un objet de définition de règles avec des opérateurs (gt, eq, lt...)
Étape Deux

Phase deux : vérification de l'utilisateur (Runtime)

Moment de déclenchement : lorsque l'utilisateur essaie de réclamer le red packet.

GET ?user_id=...
RET Retourne les valeurs réelles des propriétés de cet utilisateur spécifique (valeur numérique pure ou chaîne)

💡 Opérateurs pris en charge : `eq` (égal, prend en charge les chaînes/nombres), `gt` (supérieur à), `gte` (supérieur ou égal à), `lt` (inférieur à), `lte` (inférieur ou égal à). Les valeurs pour les opérateurs non-`eq` doivent être des nombres.

Scénarios d'application

🎮

Intégration GameFi

Définir la règle `niveau >= 10`. Lorsque l'utilisateur réclame, moonpacket vérifie les attributs de l'utilisateur, si `niveau: 12` alors c'est approuvé.

🆔

Récompenses de liaison d'identité

Définissez la règle `kyc == true`. moonpacket vérifie le statut de l'utilisateur, et s'il retourne `kyc: true`, alors les récompenses sont distribuées.

🚀

Filtrage de liste noire

Définir la règle `is_blacklist == false`. Si l'API renvoie `is_blacklist: true`, le retrait est refusé.

Exemple de communication (demande GET)

Mode A 1. Définir les règles (Configuration)

Lors de la soumission des paramètres, renvoyez un JSON contenant des opérateurs.

Demander du contenu
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
Retourner le résultat (200 OK)
{
  "data": {
    "level": {
      "gt": 99
    },
    "status": {
      "eq": "active"
    },
    "is_blacklist": {
      "eq": false
    }
  }
}

Mode B 2. Statut de la requête (Exécution)

Lorsque l'utilisateur réclame, renvoyez des valeurs ou des chaînes pures.

Demander du contenu
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
Retourner le résultat (200 OK)
{
  "data": {
    "level": 100,
    "status": "active",
    "is_blacklist": false
  }
}

Définition de la structure de données (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;
  };
}

🔐 Validation de la Sécurité

Pour garantir l'authenticité des demandes, moonpacket inclura une signature dans l'en-tête. Vous pouvez vous référer au code à droite pour validation :

En-têtes nécessaires

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

Algorithme de signature

Signature = HMAC_SHA256(secret, 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);

⚠️ Remarque

  • Délai d'attente : Assurez-vous que l'API peut renvoyer des résultats dans un délai de 3 secondes.
  • Format : Veuillez strictement respecter la structure JSON, sinon cela entraînera une failure de parsing.

Codes d'état

Code d'état Statut Description
200 OK Demande réussie
400 Bad Request Erreur dans les paramètres de la demande (comme un format incorrect).
401 Unauthorized En-tête d'autorisation manquant ou clé invalide.
403 Forbidden Restriction IP ou accès non autorisé à cette ressource.
404 Not Found L'ID utilisateur n'existe pas (pour le scénario de vérification de l'état de l'utilisateur).
500 Server Error Erreur interne du serveur.

⚠️ Avertissement concernant les API tierces

Les méthodes d'intégration pour les plateformes tierces mentionnées dans ce document sont à titre de référence uniquement. Les développeurs doivent consulter et se conformer à la dernière documentation officielle des développeurs de la plateforme.