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