For the complete documentation index, see llms.txt. This page is also available as Markdown.

Управление балансом

О транзакциях

Управление балансом мастер-аккаунта происходит через транзакции. Каждая транзакция — это одна операция по изменению баланса пользователя. Все транзакции логируются и сохраняются в системе для аудита.

При отправке нескольких транзакций в одном запросе каждая обрабатывается независимо:

  • Если транзакция валидна и успешна — она выполняется и баланс изменяется

  • Если транзакция имеет ошибку (пользователь не найден, недостаточно средств и т.д.) — она не выполняется

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

Это означает, что в одном запросе некоторые транзакции могут пройти успешно, а некоторые — не пройти. В этом случае возвращается код PARTIAL_FAILURE

Типы операций:

  • credit — пополнение баланса

  • debit — снятие с баланса

Типы баланса:

  • main — основной баланс

  • bonus — бонусный баланс (требуется плагин: бонусный баланс)


Описание

Endpoint позволяет создавать транзакции для изменения баланса мастер-аккаунта. Можно обрабатывать до 50 транзакций в одном запросе.

Все операции логируются. Если хотя бы одна из них не прошла, возвращается статус 422 с кодом PARTIAL_FAILURE, но успешные транзакции остаются в системе.


Endpoint

Content-Type: application/json


Структура запроса

Запрос содержит массив transactions, каждый элемент которого описывает одну операцию:


Параметры

Общие параметры

Параметр
Тип
Описание

transactions

array

Массив транзакций. Максимум 50 элементов

Параметры каждой транзакции

Параметр
Тип
Обязателен
Описание

transaction_type

string

Да

credit (пополнение) или debit (снятие)

balance_type

string

Да

main (основной) или bonus (бонусный)

amount

number

Да

Сумма операции. Должна быть > 0

user_id

integer

Да*

Идентификатор пользователя

email

string

Да*

Email пользователя

server_id

integer

Да

Идентификатор сервера или 0 для общего баланса

lifetime

integer

Нет

Время жизни бонусов в часах. Только для balance_type=bonus

*Необходимо передать либо user_id, либо email

На что влияет server_id:

  • server_id=0 — операция с общим балансом мастер-аккаунта

  • server_id > 0 — операция с балансом на конкретном сервере


Примеры

Пополнить основной баланс

Пополнить бонусный сервера (со сроком действия бонусов)

Пакетная операция с несколькими пользователями


Ответы

Все транзакции успешны (200 OK)

Часть транзакций не прошла (422 Unprocessable Entity)

Ошибка валидации (400 Bad Request)

Слишком много транзакций (400 Bad Request)


Коды ошибок

На уровне запроса (HTTP 400)

Код
Описание
Решение

VALIDATION_ERROR

Ошибка в структуре или параметрах запроса

Проверьте формат JSON и обязательные поля

BATCH_TOO_LARGE

Передано более 50 транзакций

Разделите запрос на несколько с максимум 50 транзакциями

На уровне отдельной транзакции

Код
HTTP Status
Описание
Когда встречается

VALIDATION_ERROR

422

Проблемы с параметрами транзакции

amount <= 0, отсутствуют user_id и email

SERVER_NOT_FOUND

422

Сервер не найден

Передан server_id > 0, но такого сервера нет в системе

USER_NOT_FOUND

422

Пользователь не найден

Пользователь с указанным user_id или email не существует

BONUS_BALANCE_DISABLED

422

Бонусный баланс отключен

Попытка операции с balance_type=bonus, но бонусный баланс отключен для проекта

INSUFFICIENT_FUNDS

422

Недостаточно средств

Попытка снять (debit) больше, чем есть на балансе

Общий результат

Код
HTTP Status
Описание

success: true

200

Все транзакции выполнены успешно

PARTIAL_FAILURE

422

Некоторые транзакции не прошли, результаты в массиве transactions


Особенности и рекомендации

Бонусный баланс (bonus)

  • Может быть отключен/не приобретен модуль на уровне проекта — в этом случае любая операция вернет BONUS_BALANCE_DISABLED

  • При credit (пополнении) можно указать lifetime в часах (автоматически истекут через указанное время)

  • Если lifetime не указан, бонусы остаются неограниченными по времени

Обработка результатов

  • Каждая транзакция имеет свой index — используйте его для маппинга результатов на исходные данные

  • Если success: false на уровне запроса, проверьте код ошибки и структуру

  • Если PARTIAL_FAILURE, обработайте каждый результат отдельно

  • Балансы в ответе — это строки для сохранения точности при работе с дробными числами

Пакетная обработка

  • Максимум 50 транзакций за раз

  • Проверка серверов кэшируется в рамках одного запроса (если несколько транзакций на один server_id, проверка происходит один раз)

  • Если в одном запросе разные server_id, каждый проверяется отдельно


Примечания

  • Все операции логируются на платформе с полной информацией (пользователь, сумма, тип операции, источник)

  • lifetime применяется только к бонусному балансу и отсчитывается от момента получения

  • Используйте server_id=0 для работы с общим балансом, независимо от конкретного сервера

Last updated

Was this helpful?