REST API · JWT

rest-balance REST API: пополнение баланса через ЮKassa

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

Адрес
/api-rest/balance/<метод>
Авторизация
JWT в заголовке token
Назначение
служебные, для мобильного приложения

Счёт на пополнение

POST /api-rest/balance/add

Заводит неоплаченный счёт на сумму в рублях и отдаёт его номер. Если за последние 50 минут уже есть неоплаченный счёт на ту же сумму, ещё не связанный с платежом, вернётся он — повторное нажатие «Оплатить» не плодит счета. Номер передаётся в метаданные платежа ЮKassa как balance_hid.

Параметры query и JSON-тело

  • token string обязательный заголовок
    Access token из user/auth.
  • sum int обязательный
    Сумма пополнения, целые рубли, больше нуля.

Ответ

  • data.payment_id int
    Номер счёта в Пиксель Тулс — для balance/update.

Привязка платежа ЮKassa к счёту

POST /api-rest/balance/update

Записывает в счёт ID созданного платежа ЮKassa — с префиксом kassa_m_payment_. Привязать можно только свой неоплаченный счёт и только один раз.

Параметры query и JSON-тело

  • token string обязательный заголовок
    Access token из user/auth.
  • payment_id int обязательный
    Номер счёта из balance/add.
  • external_id string обязательный
    ID платежа в ЮKassa.

Ответ

В data — счёт после изменения, строка журнала баланса.

  • data.id string
    Номер счёта.
  • data.ext_id string
    Привязанный платёж: kassa_m_payment_<ID ЮKassa>.
  • data.user_id, data.sum, data.date string
    Пользователь, сумма в рублях, дата создания счёта.
  • data.type string
    1 — пополнение.
  • data.status string
    2 — ждёт оплаты, 1 — зачислен.

Подтверждение оплаты

POST /api-rest/balance/confirm

Вызывается после оплаты. Сервер сам запрашивает платёж в ЮKassa и зачисляет деньги, только если платёж в статусе succeeded, а счёт из его метаданных (balance_hid, user_id, sum) ещё не оплачен и совпадает по пользователю и сумме. Если пользователь согласился сохранить карту, она привязывается для автоплатежей.

Параметры query и JSON-тело

  • token string обязательный заголовок
    Access token из user/auth.
  • external_id string обязательный
    ID платежа в ЮKassa — без префикса.
  • source string обязательный
    Платёжная система.
    yookassa
    ЮKassa — единственное значение

Ответ

Успех — code: 200, data пустой. Новый баланс — в user/state/get.

Ошибки

КодСообщениеКогда
470 incorrect request sum add: сумма не передана, не число или не больше нуля. Подробности — в data.errors.
440 empty payment id update: нет payment_id.
450 empty external id update: нет external_id.
404 incorrect payment id update: счёта с таким номером нет.
403 access denied update: счёт другого пользователя.
460 forbidden to change confirmed balance item update: счёт уже оплачен.
470 forbidden to change balance item update: к счёту уже привязан платёж.
404 empty external payment id confirm: нет external_id.
403 unavailable source confirm: source не yookassa.
500 confirm payment error confirm: платёж не оплачен, не найден в ЮKassa, уже зачислен или метаданные не совпали со счётом.
401 Token is not authorized Нет заголовка token или токен недействителен — см. rest-auth.

Порядок вызовов

  1. balance/add — получить номер счёта.
  2. Создать платёж в ЮKassa с метаданными balance_hid (номер счёта), user_id и sum.
  3. balance/update — связать счёт с ID платежа.
  4. После оплаты — balance/confirm. Повторный вызов для уже зачисленного платежа вернёт 500, деньги дважды не зачисляются.

Платёж проверяется в магазине ЮKassa мобильного приложения — платежи, созданные в другом магазине, подтвердить не получится.

Обратная связь и помощь
Если у вас есть идеи, как улучшить данный инструмент или остались вопросы по работе с ним, напишите в нашу службу поддержки, мы обязательно вам поможем.