Перейти к основному контенту
Спецификация 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 третьих сторон

Методы интеграции для сторонних платформ, упомянутые в этом документе, предназначены только для справки. Разработчики должны обращаться к последней официальной документации для разработчиков платформы и соблюдать ее.