Чек-лист интеграции API казино: что построить, протестировать и мониторить до запуска
Интеграция API казино-игр ломается в предсказуемых местах: повторный debit списан дважды, пришёл откат ставки, которую вы не видели, валюта с тремя знаками после запятой. Этот чек-лист проходит каждый слой в том порядке, в каком с ним сталкивается разработчик, и для каждого пункта указывает, от какого сбоя он защищает.
Этот чек-лист интеграции API казино — для разработчика, у которого уже есть API-ключи и дедлайн. Он идёт в том порядке, в каком всё встречается на практике: сначала контракт между вашим кошельком и провайдером, затем лобби, затем запуск игр, затем тестирование и первая неделя в продакшене.
Каждый пункт здесь потому, что без него что-то ломается. Отмечайте их в общем документе, а открытые отправляйте команде интеграции вендора в виде вопросов.
0. До первой строки кода
- У вас полная документация API, а не PDF от отдела продаж: все эндпоинты, все коды ошибок, примеры payload.
- Вы понимаете модель кошелька. Seamless (провайдер вызывает ваш сервер на каждую ставку и выигрыш) или transfer (вы переводите деньги на баланс на стороне провайдера). Этот чек-лист исходит из seamless — именно его продаёт большинство агрегаторов.
- Тестовые учётные данные и тестовый URL колбэков отделены от продакшена.
- Подпись запросов понятна: какой заголовок, какой алгоритм (обычно HMAC-SHA256), какие поля подписываются и в каком порядке.
- Вы знаете исходящие IP-адреса провайдера, если он хочет, чтобы вы внесли их в allow-list.
- У вас есть конкретный технический контакт и канал, где отвечают в пределах нескольких часов.
1. Колбэки кошелька
Провайдер будет вызывать ваш сервер по четырём поводам. Постройте их раньше всего остального.
- Balance. Возвращает текущий доступный баланс игрока в его валюте.
- Debit (ставка). Списывает ставку, если хватает средств, и возвращает новый баланс. Нехватка средств возвращает документированный код ошибки, а не 500.
- Credit (выигрыш). Начисляет выигрыш. Credit на ноль — валидный вызов и должен проходить успешно: многие студии отправляют его, чтобы закрыть проигрышный раунд.
- Rollback (возврат). Отменяет конкретный предыдущий debit.
- Каждый ответ подписывается или валидируется так, как требует документация.
- Вы проверяете входящую подпись на каждом вызове и отклоняете неверные документированным кодом.
- Ваш эндпоинт отвечает с большим запасом до таймаута провайдера. Найдите эту цифру в документации. Если там 3 секунды, цельтесь в 300 мс на 99-м перцентиле.
- Суммы хранятся как целые числа в минимальных единицах или как десятичные с фиксированной точкой. Никогда как float.
- Debit и credit несут ID раунда и ID игры. Храните оба.
Сценарий. Игрок на медленном мобильном соединении делает спин. Ваш debit проходит, но ответ идёт 4 секунды, а провайдер сдаётся через 3. Теперь провайдер присылает rollback или повторяет debit — в зависимости от своих правил. Разделы 2 и 3 существуют ради этого момента.
2. Идемпотентность
- В таблице транзакций стоит уникальное ограничение на ID транзакции провайдера.
- Повторный debit или credit с тем же ID транзакции не двигает деньги ещё раз. Он возвращает исходный ответ с теми же значениями баланса.
- Повторный вызов с тем же ID, но другой суммой отклоняется и громко логируется. Это баг провайдера или атака.
- Изменение баланса и запись транзакции происходят в одной транзакции БД. Нет окна, в котором одно есть, а другого нет.
- Параллельные вызовы для одного игрока сериализуются (блокировка строки или аналог). Два одновременных debit из двух открытых вкладок не должны пройти оба, если баланса хватает только на один.
3. Откаты
- Rollback ссылается на debit, который он отменяет. Ищите его по ID транзакции провайдера.
- Rollback для debit, который вы так и не получили: запишите его как «надгробие» и верните успех (или документированный код). Если debit придёт позже, надгробие не даст его списать.
- Rollback для уже откатанного debit возвращает исходный ответ.
- Rollback debit, по раунду которого уже есть выигрыш: следуйте документации буквально. Одни провайдеры это запрещают, другие ждут, что вы откатите оба.
- Откаты никогда не приводят баланс в необъяснимое состояние. Если они могут увести его в минус, определите правило сейчас и запишите его.
4. Раунды и незавершённые игры
- Вы видите, какие раунды открыты (debit получен, закрывающего credit нет).
- Вы знаете, как провайдер закрывает зависшие раунды: автоматический credit по таймауту, ручной инструмент или тикет в поддержку.
- Выигрыши с бонусов и free rounds помечаются, чтобы ваша бонусная логика обрабатывала их иначе, чем денежные.
- Ваш бэк-офис показывает полную историю раундов по игроку: каждый вызов, каждый ответ, метки времени.
5. Валюты
- У каждого игрока одна фиксированная валюта: задаётся при регистрации, передаётся при запуске и повторяется в каждом колбэке.
- Вы проверяете, что валюта колбэка совпадает с валютой игрока, и отклоняете несовпадения.
- Число знаков после запятой верное для каждой валюты. Большинство фиатных используют два, некоторые ноль, некоторые три. Крипта может использовать восемь и больше — согласуйте с вендором точность, которая идёт в API.
- Каждая игра в вашем списке действительно поддерживает валюту, в которой вы её показываете. Студия может поддерживать EUR и USD, но не BDT или ETB.
- Лимиты ставок в каждой валюте имеют смысл. Минимальная ставка, мелкая в EUR, может выглядеть странно в IDR или оказаться огромной в BTC.
- Валюта отображения и валюта расчётов не путаются в отчётах.
6. Синхронизация списка игр
- Список игр забирается из API по расписанию, минимум раз в день, и хранится локально.
- Отключённые или удалённые игры исчезают из лобби при следующей синхронизации, а не в следующем квартале.
- Новые игры попадают в статус проверки, а не сразу в лобби, если вы курируете витрину.
- Вы храните стабильный ID игры от провайдера, а не название. Названия меняются.
- Картинки кешируются на вашей стороне или отдаются в размере, подходящем для мобильных.
- У каждой игры есть категория, студия, поддержка устройств и валют, чтобы фильтры лобби не врали.
- Студии, выключенные для рынка, отфильтровываются вашими собственными правилами, а не оставлены на волю случая.
7. Ссылки запуска
- Запуск на реальные деньги передаёт короткоживущий токен сессии, привязанный к игроку. Никогда не пароль и не многоразовый ID.
- Истечение токена обработано: в старой вкладке понятное сообщение, а не сломанный фрейм.
- Язык, валюта, тип устройства и URL возврата в лобби задаются при запуске.
- URL депозита или кассы передаётся там, где игра это поддерживает, чтобы «недостаточно средств» куда-то вело.
- Игра корректно открывается и в iframe, и в новом окне. Некоторые студии блокируют iframe на определённых доменах или браузерах.
- Демо-запуски, если они есть, никогда не трогают реальный кошелёк. Проверьте это отдельно.
- Время от клика до первого кадра измерено на телефоне среднего класса в 4G. Больше 5 секунд — и игроки уходят.
8. Тестирование
- Тестовый игрок на каждую валюту, которую вы будете поддерживать.
- Один полный раунд на каждый тип игр: слот, лайв-стол, краш, настольная игра, виртуальный спорт.
- Принудительные сбои: ваш сервер отдаёт таймаут, 500, код нехватки средств. Смотрите, что провайдер сделает дальше.
- Дубли, воспроизведённые вручную: debit дважды, credit дважды, rollback дважды.
- Вызовы не по порядку: rollback до debit, credit после rollback.
- Две вкладки, один игрок, спины одновременно.
- Истечение сессии посреди игры.
- Крупный выигрыш и нулевой выигрыш.
- Ваш отчёт сверки совпадает с отчётом провайдера за тестовый период до цента.
9. Go-live
- Продакшен-ключи и URL колбэков подменены, тестовая среда для реальных игроков отключена.
- Мониторинг задержки колбэков, доли ошибок и сбоев подписи, с алертами живому человеку, а не в дашборд, который никто не открывает.
- Ежедневная задача сверки: ваши итоги по каждой игре и валюте против итогов провайдера.
- На предоплатных моделях — алерт о низком кредите задолго до нуля и человек, который может пополнить баланс в воскресенье.
- Рубильник для каждой игры и каждой студии в вашем бэк-офисе.
- Канал поддержки вендора и контакт для эскалации записаны в вашем ранбуке.
10. Первые семь дней
- Проверяйте сверку каждое утро.
- Разбирайте все отклонённые колбэки и открытые раунды.
- Следите за ошибками запуска по студиям: одна плохая студия может утянуть вниз всё лобби.
- Попросите у вендора его сторону логов ошибок и сравните.
Небольшая команда, запускающая крипто-бренд, может пройти этот список за неделю, если документация вендора крепкая. Если документация тонкая, список заодно становится хорошим тестом для вендора: посчитайте, сколько пунктов вам пришлось уточнять. Рейтинг агрегаторов с seamless wallet и страница агрегаторов для новых операторов оценивают вендоров именно по такой интеграционной работе.
Что спрашивают покупатели
Сколько длится интеграция API казино?
С seamless wallet API и разработчиком, который уже делал такое раньше, базовый запуск занимает от нескольких дней до пары недель. Основное время уходит на колбэки кошелька и их пограничные случаи, а не на запуск игры. Команде, которая делает это впервые, стоит заложить две–четыре недели с тестированием.
Что самое сложное в интеграции API казино-игр?
Кошелёк. Ваш сервер должен быстро отвечать на вызовы balance, debit, credit и rollback, применять каждую транзакцию ровно один раз и сохранять согласованность, когда вызовы приходят с опозданием, дважды или не по порядку.
Что означает идемпотентность для колбэков кошелька казино?
Если провайдер прислал одну и ту же транзакцию дважды, ваш кошелёк применяет её один раз и оба раза возвращает один и тот же ответ. Это обеспечивается уникальным ключом по ID транзакции провайдера и хранением отправленного ответа.
Нужно ли синхронизировать список игр автоматически?
Да. Забирайте список по расписанию, минимум раз в день. Студии добавляют, переименовывают и отключают игры, не предупреждая операторов. Ручной список устаревает за несколько недель, и игроки натыкаются на мёртвые плитки.
Что мониторить после запуска?
Время ответа и долю ошибок колбэков, неудачные и повторённые транзакции, ежедневную сверку с отчётом провайдера, а на предоплатных моделях — кредитный баланс. Ставьте алерт на каждый показатель, чтобы узнать о проблеме раньше игроков.