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 используется для запуска демо-режима
  • при необходимости можно добавить дополнительные валюты по запросу