Авторизация запросов¶
Все запросы между агентом и платформой защищены с помощью криптографической подписи на основе HMAC SHA-256. Это обеспечивает безопасность и целостность данных.
Авторизация запросов к платформе¶
Когда агент отправляет запрос к платформе, необходимо подписать запрос с помощью API токена.
Алгоритм подписи¶
Подготовка данных¶
- Все данные запроса должны быть в JSON формате в теле запроса (body)
- Данные должны быть отсортированы по ключам в алфавитном порядке (для консистентности)
Генерация подписи¶
- Преобразовать отсортированные данные в JSON строку
- Вычислить HMAC SHA-256 подпись используя API токен как секретный ключ
- Подпись передается в HTTP заголовке
X-Signature
Обязательные поля в запросе¶
agent_id(integer) - ID агентаtimestamp(integer) - Unix timestamp запроса (в секундах)
Формат запроса¶
POST /api/games/{endpoint} HTTP/1.1
Host: api.example.com
Content-Type: application/json
X-Signature: {подпись}
{
"agent_id": 1,
"timestamp": 1640995200,
...другие поля...
}
Пример генерации подписи¶
<?php
$data = [
'agent_id' => 1,
'timestamp' => time(),
'game_id' => 123,
'player_id' => 'player_123'
];
// Сортируем данные по ключам
ksort($data);
// Преобразуем в JSON
$jsonData = json_encode($data);
// Генерируем подпись
$apiToken = 'your-api-token-here';
$signature = hash_hmac('sha256', $jsonData, $apiToken);
// Отправляем запрос
$ch = curl_init('https://api.example.com/api/games/get_game_link');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-Signature: ' . $signature
]);
$response = curl_exec($ch);
curl_close($ch);
Таймаут запросов¶
Запросы имеют ограничение по времени жизни. Если разница между текущим временем и timestamp в запросе превышает 300 секунд (5 минут), запрос будет отклонен.
Важно
Всегда используйте актуальное время сервера для генерации timestamp.
Возможные коды ошибок¶
signature_required(401) - отсутствует заголовок X-Signatureinvalid_signature(403) - неверная подписьagent_not_found(404) - агент с указанным agent_id не найденapi_token_not_found(404) - у агента не настроен API токен
Авторизация коллбеков от платформы¶
Когда платформа отправляет коллбек агенту, запрос также подписывается. Агент должен проверить подпись перед обработкой запроса.
Формат коллбека¶
POST /callback HTTP/1.1
Host: your-domain.com
Content-Type: application/json
X-Signature: {подпись}
{
"agent_id": 1,
"session_id": "session-uuid",
"player_id": "player_123",
"type": "makeBet",
"bet": 10.50,
"win": 25.00
}
Алгоритм проверки подписи¶
Извлечь подпись¶
- Подпись находится в HTTP заголовке
X-Signature - Извлечь подпись из заголовка запроса
Подготовка данных¶
- Взять все данные из тела запроса (JSON)
- Отсортировать по ключам в алфавитном порядке
Генерация ожидаемой подписи¶
- Преобразовать отсортированные данные в JSON строку
- Вычислить HMAC SHA-256 используя ваш API токен
Сравнение подписей¶
- Сравнить полученную подпись с ожидаемой (используйте безопасное сравнение, например
hash_equalsв PHP)
Пример проверки подписи¶
<?php
function verifyCallbackSignature(array $data, string $signature, string $apiToken): bool
{
// Проверяем наличие подписи
if (empty($signature)) {
return false;
}
// Сортируем данные
ksort($data);
// Преобразуем в JSON
$jsonData = json_encode($data);
// Генерируем ожидаемую подпись
$expectedSignature = hash_hmac('sha256', $jsonData, $apiToken);
// Безопасное сравнение
return hash_equals($expectedSignature, $signature);
}
// Использование
$callbackData = json_decode(file_get_contents('php://input'), true);
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
$apiToken = 'your-api-token-here';
if (!verifyCallbackSignature($callbackData, $signature, $apiToken)) {
http_response_code(403);
echo json_encode(['error' => 'Invalid signature']);
exit;
}
// Обработка коллбека
// ...
Важно
Всегда проверяйте подпись перед обработкой коллбека
Получение API токена¶
API токен выдается менеджером платформы при настройке вашего аккаунта. Если у вас нет токена или вы хотите его перегенерировать, обратитесь к вашему менеджеру.