Saltar al contenido principal
Especificación de API v2.3

API de Autenticación

A través de una interfaz de consulta GET estandarizada, moonpacket recupera activamente 'reglas de recompensa' y 'atributos de usuario' de su servidor. Todos los juicios lógicos son manejados por moonpacket.

Lógica de Interacción

El proceso completo se divide en dos fases: 'Fase de Configuración' y 'Fase de Ejecución'. moonpacket enviará solicitudes a su API utilizando el método GET:

moonpacket Cliente / Servidor Coincidencia Lógica (Local) Reglas almacenadas: Level >= 10 Estado del usuario: Level = 12 ✓ Distribuir Recompensas ⚙️ Tu API GET /check ?user_id=... 1. Durante la configuración: Reglas de recuperación (GET) 2. Durante la reclamación: Consultar estado (GET) Datos JSON
← 左右滑動查看流程 →
Paso Uno

Fase uno: Definir reglas (Configuración)

Momento de activación: cuando se ingresa la URL en 'Configuración de condiciones para recibir' y se envía

GET GET
RET Devuelve un objeto de definición de reglas con operadores (gt, eq, lt...)
Paso Dos

Fase dos: Verificación del usuario (Runtime)

Momento de activación: El usuario intenta reclamar el Red Packet

GET ?user_id=...
RET Devuelve el valor de propiedad real de ese usuario específico (valor numérico puro o cadena)

💡 Operadores compatibles: `eq` (igual a, soporta cadenas/números), `gt` (mayor que), `gte` (mayor o igual que), `lt` (menor que), `lte` (menor o igual que). Los valores para operadores no `eq` deben ser números.

Escenarios de aplicación

🎮

Integración de GameFi

Defina la regla `nivel >= 10`. Cuando el usuario reclama, moonpacket verifica los atributos del usuario; si `nivel: 12`, entonces se aprueba.

🆔

Recompensas por vinculación de identidad

Define la regla `kyc == true`. moonpacket verifica el estado del usuario, y si devuelve `kyc: true`, entonces se distribuyen las recompensas.

🚀

Filtro de lista negra

Definir la regla `is_blacklist == false`. Si la API devuelve `is_blacklist: true`, entonces se rechaza la reclamación.

Ejemplo de Comunicación (Solicitud GET)

Mode A 1. Definir Reglas (Configuración)

Al enviar la configuración, devuelve JSON que contenga operadores.

Solicitar Contenido
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
Devolver Resultado (200 OK)
{
  "data": {
    "level": {
      "gt": 99
    },
    "status": {
      "eq": "active"
    },
    "is_blacklist": {
      "eq": false
    }
  }
}

Mode B 2. Estado de Consulta (Tiempo de Ejecución)

Cuando el usuario reclama, devuelve valores o cadenas puras.

Solicitar Contenido
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
Devolver Resultado (200 OK)
{
  "data": {
    "level": 100,
    "status": "active",
    "is_blacklist": false
  }
}

Definición de Estructura de Datos (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;
  };
}

🔐 Validación de Seguridad

Para garantizar la autenticidad de las solicitudes, moonpacket incluirá una firma en el encabezado. Puedes consultar el código a la derecha para la validación:

Encabezados Necesarios

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

Algoritmo de firma

Firma = HMAC_SHA256(secreto, cuerpo + 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);

⚠️ Nota

  • Tiempo de espera: Asegúrate de que la API pueda devolver resultados en 3 segundos.
  • Formato: Por favor, adhierase estrictamente a la estructura JSON, de lo contrario llevará a un fallo de análisis.

Códigos de Estado

Código de estado Estado Descripción
200 OK Solicitud exitosa
400 Bad Request Error en los parámetros de la solicitud (por ejemplo, formato incorrecto).
401 Unauthorized Falta el encabezado de autorización o la clave es inválida.
403 Forbidden Restricción de IP o sin derecho a acceder a ese recurso.
404 Not Found ID de usuario no existe (para el escenario de consulta de estado del usuario).
500 Server Error Error interno del servidor.

⚠️ Aviso de Exención de Responsabilidad de API de Terceros

Los métodos de integración para plataformas de terceros mencionados en este documento son solo para referencia. Los desarrolladores deben consultar y ajustarse a la última documentación oficial para desarrolladores de la plataforma.