Оптовая платформа цифровых товаров

API игровых пополнений — схема обработки заказа 2026

Пополнения не выдают код — они зачисляют валюту на чужой аккаунт. Полная схема состояний заказа и работа с ошибками.

API игровых пополнений — схема обработки заказа

Пополнение — единственная категория цифровых товаров, где вы отдаёте не товар, а действие на чужом аккаунте. Кода нет, отката нет, а получатель определяется строкой, которую покупатель ввёл руками. Ниже — полная схема обработки такого заказа и те места, где эта разница ломает архитектуру, скопированную с продажи ключей.

Чем пополнение отличается от кода

Свойство Подарочная карта / ключ Пополнение аккаунта
Что вы получаете от поставщика Строку кода Подтверждение зачисления
Можно ли придержать товар Да, код лежит у вас Нет, зачисление мгновенно и адресно
Получатель определяется Тем, кому вы отдали код ID, введённым покупателем
Откат после выполнения Иногда возможен через эмитента Практически невозможен
Главный риск Код не активируется Валюта ушла не тому аккаунту

Отсюда следует главное проектное правило: вся защита переносится на этап до списания денег. В продаже кодов вы можете исправить многое постфактум. В пополнениях — почти ничего.

Шаг 1. Валидация player ID до списания

Это самая важная часть всей интеграции, и она целиком на вашей стороне.

Валидация формата

Минимум, который вы обязаны проверить до того, как возьмёте деньги:

  • Длина и набор символов. У каждой игры свой формат идентификатора — где-то только цифры, где-то буквенно-цифровой, где-то с разделителем.
  • Серверный регион. Многие игры требуют указать сервер или зону вместе с ID. Без этого пополнение уйдёт не туда либо не пройдёт вовсе.
  • Отсутствие мусора. Пробелы по краям, вставленный из буфера префикс «ID:», лишние символы из мессенджера. Нормализуйте строку перед отправкой.

Проверка существования аккаунта

Некоторые поставщики предоставляют отдельный эндпоинт проверки идентификатора, который возвращает никнейм игрока. Некоторые — нет, и реализация зависит от конкретной игры. Уточните у своего поставщика, доступна ли такая проверка для нужных вам игр.

Там, где проверка есть, используйте её обязательно и показывайте покупателю ник до оплаты. Это самый дешёвый способ предотвратить спор: человек, увидевший чужое имя, исправляет ID сам.

Подтверждение покупателем

Даже без проверки ника, экран подтверждения перед списанием обязателен. На нём:

  • ID в том виде, в котором он уйдёт поставщику.
  • Регион / сервер.
  • Явная формулировка о том, что зачисление необратимо.
  • Отметка времени подтверждения, которая уходит в ваш журнал.

Этот журнал — то, чем вы отвечаете, когда покупатель через неделю утверждает, что вводил другой номер.

Шаг 2. Создание заказа

Заказ создаётся так же, как на любой другой товар, но с дополнительными данными позиции:

curl -X POST "https://public-api.foxreload.com/api/orders" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "itemId": "product_01krgfgww8eth9xvvysd6y7r4j",
        "quantity": 1,
        "note": {"player_id": "123456"}
      }
    ],
    "isMock": false
  }'

У FoxReload идентификатор игрока передаётся в поле note позиции — объект до 10 ключей для дополнительных данных. Какие именно ключи ожидает конкретный товар, смотрите в его attributes и userGuide.

Про идемпотентность. Некоторые API принимают заголовок Idempotency-Key, чтобы повторная отправка не создала второй заказ. Проверьте, поддерживает ли это ваш поставщик — далеко не все. FoxReload его не поддерживает, поэтому при таймауте на создании заказа нельзя ретраить вслепую: сначала запросите список заказов и убедитесь, что заказ не создался. В пополнениях цена такой ошибки выше, чем в кодах, — дубль означает второе зачисление, которое вы уже не вернёте.

Шаг 3. Асинхронное завершение

Заказ проходит состояния последовательно и однонаправленно:

Состояние Что означает Что делает ваша система
active Заказ создан, ожидает списания с баланса Записать order_id, начать опрос
paid Средства списаны с баланса Ничего, ждать дальше
processing Зачисление выполняется поставщиком Продолжать опрос с backoff
completed Валюта зачислена на аккаунт Уведомить покупателя, закрыть заказ
cancelled Заказ отменён, см. cancelReason Вернуть деньги покупателю
failed Выполнение не удалось, см. items[].error Разобрать причину, решить возврат/повтор

Статус узнаётся опросом:

curl "https://public-api.foxreload.com/api/orders/{order_id}" \
  -H "X-API-Key: YOUR_API_KEY"

Проверьте, отдаёт ли ваш поставщик вебхуки. Если отдаёт — используйте как ускоритель, но опрос оставьте как источник истины: доставка вебхука не гарантирована. FoxReload вебхуков не поддерживает, поэтому опрос здесь единственный механизм.

Схема опроса: часто в первую минуту, затем растущий интервал, свой предельный срок и очередь превысивших его заказов. Для пополнений эта очередь особенно важна — покупатель, не увидевший валюту в игре, пишет в поддержку быстрее, чем покупатель ключа.

Подробный разбор проектирования таких машин состояний — в статье про state machine заказа.

Шаг 4. Терминальные и повторяемые ошибки

Разделение ошибок на два класса — то, что отличает работающую интеграцию от сжигающей деньги.

Терминальные — повторять бессмысленно

  • Неверный player ID. Аккаунт не существует или формат не тот. Повтор даст тот же результат. Возврат покупателю, просьба проверить ID.
  • Регион не поддерживается. Товар не может быть зачислен на аккаунт из этого региона. Возврат.
  • Товар недоступен для этого аккаунта. Например, пакет не продаётся игрокам ниже определённого уровня или в этой стране.
  • Ошибки авторизации и валидации запросаHTTP 400, 401, 403. Это ваш баг, а не сбой.

По терминальным ошибкам немедленно снимайте заказ с опроса и передавайте в сценарий возврата.

Повторяемые — имеет смысл попробовать снова

  • HTTP 429 — превышен rate limit. Экспоненциальный backoff с джиттером.
  • HTTP 5xx — сбой на стороне поставщика. Backoff, ограниченное число попыток.
  • Сетевой таймаут. Здесь особая осторожность: сначала проверьте состояние заказа, потом решайте.
  • Временная недоступность игры. Технические работы у издателя — характерная причина зависших processing. Ждать, а не пересоздавать заказ.

Ключевая ошибка, которую делают почти все на старте: обрабатывать таймаут как повторяемую ошибку и сразу создавать новый заказ. В пополнениях это означает двойное зачисление и деньги, которых вы не вернёте.

Шаг 5. Возвраты и реверсы

Здесь нужно честно принять реальность: автоматического отката зачисления не существует.

Возможные сценарии и что с ними делать:

  • Заказ ушёл в cancelled или failed до зачисления. Деньги покупателю возвращаются вашими средствами платежа, средства поставщика возвращаются на ваш баланс по его правилам — уточните эти правила заранее.
  • Зачисление прошло, но покупатель недоволен. Товар предоставлен. Возврат — ваше коммерческое решение, а не техническая операция.
  • Зачисление ушло на ID, который покупатель указал неверно. Технически неисправимо. Ваша позиция — журнал подтверждения. Именно поэтому экран подтверждения не является опциональным.
  • Частичное выполнение многопозиционного заказа. Обрабатывайте позиции независимо: выполненные оставляйте, по невыполненным делайте возврат.

Заложите в юнит-экономику небольшой резерв на спорные случаи. При объёме они неизбежны, и лучше видеть их отдельной строкой, чем удивляться просадке маржи. Как это считается — в материале про юнит-экономику реселлера.

Шаг 6. Сверка

Ежедневная сверка — обязательная гигиена, а не опция.

Забирайте список заказов у поставщика:

curl "https://public-api.foxreload.com/api/orders/?statuses=completed,failed,cancelled&limit=100" \
  -H "X-API-Key: YOUR_API_KEY"

И сравнивайте с тем, что у вас в базе. Что искать:

  • Заказы у поставщика, которых нет у вас. Классический след дубля от слепого ретрая.
  • Заказы у вас со статусом «в процессе», которые у поставщика уже терминальные. Ваш опрос сломался или процесс упал.
  • Расхождения по суммам. Цена на момент заказа отличается от вашей записи — значит, вы фиксируете цену не в тот момент.
  • Списания с баланса без соответствующего заказа. Разбирать немедленно.

Сверка находит проблемы за часы, а не в конце месяца, когда сходить будет уже нечему.

Где брать пополнения оптом

Пополнения имеет смысл брать там же, где и остальной ассортимент, — одна интеграция вместо нескольких. FoxReload — оптовый поставщик цифровых товаров с 900+ SKU: пополнения игровых аккаунтов, подарочные карты, ключи, eSIM и лицензии, всё через один REST API с автоматической выдачей и мультирегиональными SKU. Одна модель заказа и один формат статусов на все категории, включая товары, требующие передачи ID игрока.

Читать дальше

Часто задаваемые вопросы

Чем заказ на пополнение отличается от заказа на подарочную карту?
Подарочная карта возвращает вам строку кода, которую вы храните и отдаёте покупателю — если что-то пошло не так, код остаётся у вас. Пополнение ничего вам не возвращает: поставщик зачисляет валюту напрямую на игровой аккаунт по переданному вами идентификатору. Это значит, что вы не можете «придержать» товар и не можете отменить зачисление после факта. Отсюда все различия в проектировании — жёсткая валидация ID до списания и отдельный ручной сценарий возврата.
Как валидировать player ID до оплаты?
Проверяйте формат на своей стороне — длину, допустимые символы, наличие серверного региона там, где игра его требует. Затем показывайте покупателю всё, что вы знаете об аккаунте, и требуйте явного подтверждения перед списанием. Уточните у своего поставщика, есть ли отдельный эндпоинт проверки идентификатора — реализация зависит от поставщика и от конкретной игры. У FoxReload идентификатор игрока передаётся в поле note позиции заказа, куда помещается до 10 ключей дополнительных данных.
Как узнать, что пополнение завершилось?
Опросом статуса заказа. У FoxReload заказ проходит active, paid, processing и завершается статусом completed либо уходит в cancelled или failed; вебхуков нет, поэтому опрос — штатный механизм. Опрашивайте часто в первую минуту, затем реже, до терминального состояния. Обязательно поставьте собственный предельный срок и очередь заказов, которые его превысили — по пополнениям такие случаи требуют человека.
Что делать, если валюта зачислена не тому игроку?
Практически ничего технически — зачисление на чужой аккаунт откатить нельзя, и издатель игры не обязан вам помогать. Именно поэтому вся защита строится до списания: валидация формата, показ подтверждения покупателю и фиксация подтверждённого ID в вашем журнале с временной меткой. Этот журнал — ваша позиция в споре, когда покупатель утверждает, что ввёл другой ID. Заложите в юнит-экономику небольшой резерв на такие случаи, потому что при объёме они неизбежны.
Смотреть оптовые цены FoxReload

Похожие статьи