Saltar para o conteúdo principal
Especificação da API v2.3

API de Autenticação

Através de uma interface de consulta GET padronizada, moonpacket recupera ativamente as 'regras de recompensa' e 'atributos do utilizador' do seu servidor. Todos os julgamentos lógicos são geridos pelo moonpacket.

Lógica de Interação

O processo completo está dividido em duas fases: 'Fase de Configuração' e 'Fase de Execução'. A moonpacket enviará solicitações à sua API utilizando o método GET:

moonpacket Cliente / Servidor Correspondência Lógica (Local) Regras Armazenadas: Level >= 10 Estado do Utilizador: Level = 12 ✓ Distribuir Recompensas ⚙️ A sua API GET /check ?user_id=... 1. Durante a Configuração: Regras de Recuperação (GET) 2. Durante a Reivindicação: Consultar Estado (GET) JSON data
← 左右滑動查看流程 →
Passo Um

Fase 1: Definir Regras (Configuração)

Evento de disparo: quando a URL é preenchida nas 'Configurações de Condições de Reivindicação' e enviada

GET GET
RET Retorna o objeto de definição de regra com operadores (gt, eq, lt...)
Passo Dois

Fase 2: Validar Usuário (Tempo de Execução)

Evento desencadeador: quando o usuário tenta reivindicar o Red Packet

GET ?user_id=...
RET Retorna o valor do atributo real desse usuário específico (valor puro ou string)

💡 Operadores suportados: `eq` (igual, suporta strings/números), `gt` (maior que), `gte` (maior ou igual a), `lt` (menor que), `lte` (menor ou igual a). Os valores para operadores não-`eq` devem ser números.

Cenários de Aplicação

🎮

Integração GameFi

Defina a regra `level >= 10`. Quando o utilizador reivindica, a moonpacket verifica os atributos do utilizador, se `level: 12` então é aprovado.

🆔

Recompensa de Vinculação de Identidade

Defina a regra `kyc == true`. A moonpacket verifica o status do utilizador, e se retornar `kyc: true`, então as recompensas são distribuídas.

🚀

Filtragem de Lista Negra

Defina a regra `is_blacklist == false`. Se a API retornar `is_blacklist: true`, a reivindicação é rejeitada.

Exemplo de Comunicação (Pedido GET)

Mode A 1. Definir Regras (Configuração)

Ao submeter as definições, devolva JSON contendo operadores.

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

Mode B 2. Estado da Consulta (Runtime)

Quando o utilizador reivindica, retornar valores ou strings puros.

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

Definição da Estrutura de Dados (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;
  };
}

🔐 Validação de Segurança

Para garantir a autenticidade dos pedidos, a moonpacket incluirá uma assinatura no Cabeçalho. Pode consultar o código à direita para validação:

Cabeçalhos Necessários

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

Algoritmo de Assinatura

Assinatura = HMAC_SHA256(secreto, corpo + 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

  • Tempo limite: Assegure-se de que a API pode retornar resultados em 3 segundos.
  • Formato: Por favor, adhere estritamente à estrutura JSON, caso contrário, isso levará a uma falha de análise.

Códigos de Status

Código de Status Estado Descrição
200 OK Pedido bem-sucedido
400 Bad Request Erro no parâmetro de solicitação (por exemplo, formato incorreto).
401 Unauthorized Cabeçalho de autorização ausente ou chave inválida.
403 Forbidden Restrições de IP ou acesso não autorizado ao recurso.
404 Not Found ID do usuário não existe (para consulta de cenários de status do usuário).
500 Server Error Erro interno do servidor.

⚠️ Isenção de responsabilidade da API de terceiros

Os métodos de integração para plataformas de terceiros mencionados neste documento são apenas para referência. Os desenvolvedores devem consultar e seguir a documentação oficial mais recente para desenvolvedores da plataforma.