API аутентификации
С помощью стандартизированного интерфейса GET-запроса moonpacket активно извлекает 'правила вознаграждений' и 'атрибуты пользователей' с вашего сервера. Все логические рассуждения обрабатываются moonpacket.
Логика взаимодействия
Весь процесс делится на две фазы: 'Фаза настройки' и 'Фаза выполнения'. moonpacket будет отправлять запросы к вашему API с использованием метода GET:
Этап 1: Определение правил (конфигурация)
⚡ Событие срабатывания: когда URL заполнен в 'Установке условий требований' и отправлен
Этап 2: Проверка пользователя (в реальном времени)
⚡ Событие триггера: когда пользователь пытается получить Red Packet
💡 Поддерживаемые операторы: `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 {
"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 {
"data": {
"level": 100,
"status": "active",
"is_blacklist": false
}
} Определение структуры данных (TypeScript)
// 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 включит подпись в заголовок. Вы можете обратиться к коду справа для проверки:
Необходимые заголовки
Алгоритм подписи
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 третьих сторон
Методы интеграции для сторонних платформ, упомянутые в этом документе, предназначены только для справки. Разработчики должны обращаться к последней официальной документации для разработчиков платформы и соблюдать ее.