Перейти до основного контенту
Специфікація API v2.3

API аутентифікації

Через стандартизований інтерфейс запиту GET, moonpacket активно отримує 'правила винагороди' та 'атрибути користувача' з вашого сервера. Усі логічні судження обробляються moonpacket.

Логіка взаємодії

Увесь процес поділено на дві фази: 'Фаза налаштування' та 'Фаза виконання'. moonpacket надсилатиме запити до вашого API, використовуючи метод GET:

moonpacket Клієнт / Сервер Логічний матч (Локальний) Правила збережено: Level >= 10 Статус користувача: Level = 12 ✓ Розподілити винагороди ⚙️ Ваш API GET /check ?user_id=... 1. Під час налаштування: Правила отримання (GET) 2. Під час вимоги: Запитати статус (GET) JSON дані
← 左右滑動查看流程 →
Крок перший

Фаза 1: Визначити правила (налаштування)

Тригерна подія: коли URL заповнено у 'Налаштування умов отримання' і подано

GET GET
RET Повертає об'єкт визначення правила з операторами (gt, eq, lt...)
Крок другий

Фаза 2: Перевірка користувача (під час виконання)

Тригери події: коли користувач намагається отримати Red Packet

GET ?user_id=...
RET Повертає фактичне значення атрибута конкретного користувача (проста величина або рядок)

💡 Підтримувані оператори: `eq` (дорівнює, підтримує рядки/числа), `gt` (більше ніж), `gte` (більше або дорівнює), `lt` (менше ніж), `lte` (менше або дорівнює). Значення для операторів, відмінних від `eq`, повинні бути числами.

Сценарії використання

🎮

Інтеграція GameFi

Визначте правило `level >= 10`. Коли користувач заявляє, moonpacket перевіряє атрибути користувача, якщо `level: 12`, то це затверджується.

🆔

Нагорода за прив'язку особи

Визначте правило `kyc == true`. moonpacket перевіряє статус користувача, і якщо він повертає `kyc: true`, то винагороди розподіляються.

🚀

Фільтрація чорного списку

Визначте правило `is_blacklist == false`. Якщо API повертає `is_blacklist: true`, претензія відхиляється.

Приклад комунікації (GET запит)

Mode A 1. Визначити правила (Налаштування)

Під час подання налаштувань поверніть JSON, що містить операторів.

Запит Контенту
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
Повернути результат (200 OK)
{
  "data": {
    "level": {
      "gt": 99
    },
    "status": {
      "eq": "active"
    },
    "is_blacklist": {
      "eq": false
    }
  }
}

Mode B 2. Статус запиту (Стан виконання)

Коли користувач отримує, поверніть чисті значення або рядки.

Запит Контенту
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
Повернути результат (200 OK)
{
  "data": {
    "level": 100,
    "status": "active",
    "is_blacklist": false
  }
}

Визначення структури даних (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;
  };
}

🔐 Перевірка безпеки

Для забезпечення автентичності запитів, moonpacket включить підпис у Заголовок. Ви можете посилатися на код справа для перевірки:

Необхідні заголовки

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

Алгоритм підпису

Підпис = HMAC_SHA256(секрет, тіло + мітка часу + нонс)
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);

⚠️ Примітка

  • Тайм-аут: Переконайтеся, що API може повернути результати протягом 3 секунд.
  • Формат: Будь ласка, строго дотримуйтесь структури JSON, інакше це призведе до помилки парсингу.

Коди статусу

Код статусу Статус Опис
200 OK Запит успішно виконано
400 Bad Request Помилка параметра запиту (наприклад, неправильний формат).
401 Unauthorized Відсутній заголовок авторизації або ключ недійсний.
403 Forbidden IP обмеження або несанкціонований доступ до ресурсу.
404 Not Found ID користувача не існує (для запитів статусу користувача).
500 Server Error Внутрішня помилка сервера.

⚠️ Відмови від відповідальності щодо API третіх сторін

Методи інтеграції для сторонніх платформ, згадані в цьому документі, наведені лише для довідки. Розробники повинні проконсультуватися та дотримуватися останньої офіційної документації для розробників цієї платформи.