Skip to content

Документация по интеграции веб игр ​

Документация по интеграции партнера с игровым сервисом веб-игр.

Изменения ​

ДатаВерсияОписание
18.05.170.1Создание документации
20.04.260.2Документация обновлена: удалены неподдерживаемые методы, убран live_slot, обновлен GetListGames, уточнен language, добавлены поддерживаемые валюты
27.04.260.3Уточнены запуск на реальные деньги, partner_api_url, работа с токеном и диагностика
13.05.260.4Схема взаимодействия (Web Games API / iframe / Partner API); описаны партнёрские Credit и Debit; добавлена ссылка на расширенный каталог игр

Введение ​

В этом документе описан процесс интеграции партнера с сервисом веб-игр.

Интеграция состоит из двух частей:

  • Web Games API — публичные методы сервиса: получить список игр и открыть игру
  • Partner API — методы на стороне партнёра, которые сервис вызывает для авторизации и операций с балансом игрока

В demo-режиме игра открывается без вызовов кошелька партнёра. В real-money режиме сервис перед запуском игры вызывает Authorization, а во время игры — Credit для списания ставки и Debit для начисления выигрыша.

Общее ​

  • Протокол: HTTPS
  • Публичные методы сервиса вызываются через GET
  • Методы API партнера вызываются через POST
  • Формат тела POST-запросов: application/json
  • Успешный ответ: code = 0

Базовый сценарий интеграции ​

  1. Partner API партнёра запрашивает каталог игр через GET /GetListGames.
  2. Игрок выбирает игру на платформе партнёра. Платформа открывает игровое окно: на десктопе обычно iframe со страницей Web Games API GET /game, на мобильных — прямую ссылку на ту же страницу.
  3. Если currency=DMO, игра запускается в demo-режиме. Partner API для кошелька не вызывается.
  4. Если это real-money запуск, партнёр передаёт player_id и token. Сервис вызывает POST /Authorization на Partner API.
  5. Во время real-money игры сервис вызывает POST /Credit для ставки и POST /Debit для выигрыша.

Участники ​

УчастникРоль
Partner APIВзаимодействует с сервисом со стороны партнёра: запрашивает каталог, формирует запуск игры и принимает Authorization, Credit, Debit
Web Games APIОтдаёт каталог, страницу игры и управляет игровой сессией
Iframe игрокаКлиент игры в браузере игрока

Получение каталога ​

Каталог обычно запрашивает Partner API партнёра до показа игры пользователю.

Запуск real-money игры ​

При запуске на реальные деньги сервис проверяет игрока через Partner API до того, как отдаст страницу игры.

Операции во время игры ​

Credit списывает ставку с кошелька игрока у партнёра. Debit начисляет выигрыш. Если выигрыша нет, Debit может не вызываться.

Имена полей JSON ​

Ответ Partner API должен возвращать ключи только в нижнем регистре: code, message, balance и т.д. Ключи вида Code, CODE или Balance не принимаются нашим API.

Подпись запросов ​

Все подписи считаются через md5.

Строка для подписи собирается по правилу:

text
<MethodName>/ + <value1> + <value2> + ... + <api_key>

Важно:

  • между значениями нет разделителей
  • слеш после имени метода обязателен
  • порядок значений должен строго соответствовать описанию метода

Пример для Authorization:

js
const crypto = require('crypto');

function calcSignature(method, values, apiKey) {
  const source = `${method}/${values.join('')}${apiKey}`;

  return crypto.createHash('md5').update(source).digest('hex');
}

const method = 'Authorization';
const values = [42, 2, 'Aj4BAnMZBepwoYqavIjwg3m3'];
const apiKey = 'secret';

const source = `${method}/${values.join('')}${apiKey}`;
const hash = calcSignature(method, values, apiKey);

console.log(source);
// Authorization/422Aj4BAnMZBepwoYqavIjwg3m3secret

console.log(hash);
// bac2df62b8873884dea9b0a918733554

1. GetListGames ​

Возвращает список игр, доступных партнеру.

Запрос ​

GET /GetListGames

Параметры:

ПолеТипОбязательноОписание
partner_idintДаИдентификатор партнера
typestringДаТип игр. Поддерживаемое значение: web_slot
hashstringДаmd5("GetListGames/" + partner_id + type + api_key)

Пример:

text
GET /GetListGames?partner_id=<partner_id>&type=web_slot&hash=<md5_signature>

Успешный ответ ​

json
{
  "code": 0,
  "message": "Ok",
  "games": [
    {
      "id": 11,
      "title": "Chicago Deluxe",
      "url": "/game",
      "icon": "/icon/novomatic-deluxe/206x206/chicago_deluxe.jpg",
      "class": "Novomatic Deluxe"
    }
  ]
}

Поля ответа:

ПолеТипОписание
codeintКод результата
messagestringОписание результата
gamesarrayСписок игр
games[].idintИдентификатор игры
games[].titlestringНазвание игры
games[].urlstringURL запуска игры
games[].iconstringURL иконки игры
games[].classstringКатегория или класс игры

Дополнительный каталог игр доступен в Google Sheets. В нём есть ID игр, провайдеры, RTP, игровые фичи и ссылки на иконки 206x206 и 287x193.

Коды ответа ​

КодОписание
0Успешно
10Hash mismatch
15Unavailable type
101Partner is not found
1Internal Error

2. Запуск игры ​

Для запуска игры используется метод GET /game.

Запрос ​

GET /game

Параметры:

ПолеТипОбязательноОписание
partner_idintДаИдентификатор партнера
game_idintДаИдентификатор игры
languagestringНетЯзык игры. Параметр опционален
currencystringДаВалюта игрока
player_idint или stringДля игры на реальные деньгиИдентификатор игрока у партнера
tokenstringДля игры на реальные деньгиОдноразовый токен игрока

Имена параметров чувствительны к регистру. Используйте имена ровно в таком виде: partner_id, game_id, language, currency, player_id, token.

Значение currency — это код валюты, например USD или EUR, а не внутренний идентификатор валюты.

Запуск в браузере и на мобильных устройствах ​

В браузерной версии игра обычно открывается внутри iframe.

На мобильных устройствах рекомендуется открывать прямую ссылку на игру.

Демо-режим ​

Для запуска demo-версии используйте валюту DMO.

В демо-режиме метод Authorization на стороне партнера не вызывается, поэтому демо-режим не подходит для проверки работы токена в real-money сценарии.

Пример:

text
GET /game?partner_id=<partner_id>&game_id=<game_id>&language=eng&currency=DMO

Игра на реальные деньги ​

Пример:

text
GET /game?partner_id=<partner_id>&player_id=<player_id>&game_id=<game_id>&language=eng&currency=<currency>&token=<token>

Для запуска игры на реальные деньги партнер должен передавать player_id и token.

token генерируется на стороне партнера. Тот же token должен быть передан в GET /game и будет отправлен сервисом в партнерский метод Authorization.

Результат ​

При успешном запросе сервис возвращает HTML страницы игры.

Коды ответа ​

КодОписание
12Game is not found
13Partner API return null
101Partner is not found
102Currency is not found
1Internal Error

3. Authorization ​

Метод должен быть реализован на стороне партнера для запуска игры на реальные деньги.

Запрос ​

POST <partner_api_url>/Authorization

partner_api_url — это базовый URL, который предоставляет партнер. Он не должен включать финальную часть /Authorization и не должен заканчиваться слешем.

Пример:

Полный endpoint AuthorizationЗначение для partner_api_url
https://example.com/callbacks/Authorizationhttps://example.com/callbacks

Тело запроса:

json
{
  "player_id": "<player_id>",
  "game_id": "<game_id>",
  "token": "<token>",
  "hash": "<md5_signature>"
}

Подпись:

text
md5("Authorization/" + player_id + game_id + token + api_key)

Успешный ответ ​

Ответ должен быть валидным JSON. Пустой ответ, HTML-страница ошибки или другой не-JSON ответ не могут быть обработаны как успешный результат авторизации.

json
{
  "code": 0,
  "message": "Ok",
  "player_id": 42,
  "currency": "RUB",
  "nick": "Player42",
  "balance": 10000.12,
  "external_session": "session-123"
}

Поля ответа:

ПолеТипОписание
codeintКод результата
messagestringОписание результата
player_idint или stringИдентификатор игрока
currencystringВалюта игрока
nickstringНик игрока
balancenumberБаланс игрока
external_sessionstringНеобязательный идентификатор внешней сессии

Коды ответа ​

КодОписание
0Успешно
10Hash mismatch
11Player not found
14Non-valid token
1Internal Error

4. Credit (Partner API) ​

Вызывается Web Games API во время спина в real-money, чтобы списать ставку с кошелька игрока у партнёра.

Запрос ​

POST <partner_api_url>/Credit

Тело запроса:

ПолеТипОписание
tokenstringТот же одноразовый токен, что и для /Authorization
player_idintИдентификатор игрока у партнёра
round_idintИдентификатор раунда на стороне партнёра
game_idintИдентификатор игры
transaction_idlongУникальный идентификатор операции
amountnumberСумма ставки (десятичная, в той же шкале, что и balance из Authorization)
is_closeboolЕсли true, по раунду не должно быть дальнейших операций
hashstringПодпись md5

Пример тела запроса:

json
{
  "transaction_id": 2234,
  "player_id": 1223,
  "round_id": 12,
  "token": "Aj4BAnMZBepwoYqavIjwg3m3",
  "is_close": false,
  "game_id": 3,
  "amount": 42.6,
  "hash": "556c56d640c622659d001b4f344a2814"
}

Подпись:

text
md5("Credit/" + player_id + round_id + game_id + transaction_id + token + api_key)

Успешный ответ ​

ПолеТипОписание
codeint0 — успех
messagestringОписание
balancenumberБаланс после списания
external_session_idintСсылка на операцию у партнёра

Повторный запрос с тем же сочетанием player_id, round_id, transaction_id должен вернуть тот же результат без повторного списания (идемпотентность).

Типовые коды ответа ​

КодОписание
0Успешно
2Недостаточно средств
4Игрок заблокирован
5Раунд закрыт
8Раунд не найден
10Hash mismatch
11Игрок не найден
14Невалидный токен
1Internal Error

5. Debit (Partner API) ​

Вызывается Web Games API, когда нужно начислить выигрыш на кошелёк у партнёра.

Запрос ​

POST <partner_api_url>/Debit

Тело запроса:

ПолеТипОписание
tokenstringТокен сессии
player_idintИдентификатор игрока у партнёра
round_idintИдентификатор раунда на стороне партнёра
game_idintИдентификатор игры
transaction_idlongУникальный идентификатор операции
amountnumberСумма выигрыша
bet_amountnumberСумма связанной ставки (передаёт Web Games API)
is_closeboolЕсли true, по раунду не должно быть дальнейших операций
hashstringПодпись md5

Пример тела запроса:

json
{
  "transaction_id": 2235,
  "player_id": 1223,
  "round_id": 12,
  "token": "Aj4BAnMZBepwoYqavIjwg3m3",
  "is_close": true,
  "game_id": 3,
  "bet_amount": 42.6,
  "amount": 20,
  "hash": "82a9d01a912b3562b5496c74d7f9fcc8"
}

Подпись:

text
md5("Debit/" + player_id + round_id + game_id + transaction_id + token + api_key)

Успешный ответ ​

Формат как у Credit: code, message, balance, external_session_id.

Те же правила идемпотентности, что и для Credit (player_id, round_id, transaction_id).

Типовые коды ответа ​

КодОписание
0Успешно
4Игрок заблокирован
5Раунд закрыт
8Раунд не найден
10Hash mismatch
11Игрок не найден
14Невалидный токен
1Internal Error

6. Диагностика запуска на реальные деньги ​

Если игра на реальные деньги не открывается корректно, сначала проверьте партнерский endpoint Authorization.

Что обычно нужно проверить:

  • partner_api_url является базовым URL и не включает финальную часть /Authorization или слеш в конце
  • endpoint доступен из публичного интернета
  • firewall или IP allowlist пропускают входящие запросы от сервиса
  • endpoint принимает POST запросы с application/json
  • endpoint возвращает JSON и для успешной авторизации, и для ошибок
  • player_id и token переданы в GET /game для запуска на реальные деньги

Partner API return null обычно означает, что сервис не получил валидный JSON-ответ от партнерского endpoint Authorization.

При обращении с проблемой запуска в интеграционный чат отправляйте полный URL, которым открывается iframe, включая все query-параметры. Это позволяет обеим сторонам воспроизвести тот же запрос и проверить те же параметры.

7. Поддерживаемые валюты ​

Сейчас поддерживается 122 валютных кода:

AED, ALL, AMD, AOA, ARS, AUD, AZN, BAM, BDT, BGN, BHD, BOB, BRL, BSX, BTC, BYN, CAD, CDF, CFA, CHF, CLP, CNY, COP, CZK, DASH, DEEX, DKK, DMO, DOP, DTC, DZD, EGP, ETB, ETH, EUR, FAU, FBu, GAME, GBP, GEL, GHS, GMC, GMD, GNF, HC, HKD, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JOD, JPY, KES, KGS, KM, KRW, KWD, KZT, LBP, LTC, MAD, MDL, MKD, MMK, MNT, MVR, MXN, MYR, MZN, NGN, NIS, NOK, NZD, OMR, PEN, PHP, PICK, PKR, PLN, PRB, PYG, QAR, RON, RSD, RUB, RUR, SAR, SDG, SEK, SGD, THB, TJS, TMT, TND, TRY, TWD, TZS, UAH, UGX, USD, USDC, USDT, UYU, UZS, VEF, VND, XAF, XEM, XMR, XOF, ZAR, ZEC, ZMW, ZWL, mBT, mETH, uBTC

Примечания:

  • DMO используется для запуска демо-режима
  • при необходимости можно добавить дополнительные валюты по запросу