rest-balance REST API: пополнение баланса через ЮKassa
Служебные методы мобильного приложения Пиксель Тулс: через них оно пополняет баланс пользователя оплатой в ЮKassa. Сам платёж приложение создаёт в своём магазине ЮKassa, а эти методы заводят счёт в Пиксель Тулс, связывают его с платежом и зачисляют деньги после оплаты. Для сторонних интеграций они не подходят — пополнить баланс можно в личном кабинете.
- Адрес
/api-rest/balance/<метод>- Авторизация
- JWT в заголовке
token - Назначение
- служебные, для мобильного приложения
Счёт на пополнение
/api-rest/balance/add
Заводит неоплаченный счёт на сумму в рублях и отдаёт его номер. Если за последние 50 минут уже есть неоплаченный счёт на ту же сумму, ещё не связанный с платежом, вернётся он — повторное нажатие «Оплатить» не плодит счета. Номер передаётся в метаданные платежа ЮKassa как balance_hid.
Параметры query и JSON-тело
-
tokenstring обязательный заголовокAccess token из user/auth. -
sumint обязательныйСумма пополнения, целые рубли, больше нуля.
Ответ
-
data.payment_idintНомер счёта в Пиксель Тулс — для balance/update.
Привязка платежа ЮKassa к счёту
/api-rest/balance/update
Записывает в счёт ID созданного платежа ЮKassa — с префиксом kassa_m_payment_. Привязать можно только свой неоплаченный счёт и только один раз.
Параметры query и JSON-тело
-
tokenstring обязательный заголовокAccess token из user/auth. -
payment_idint обязательныйНомер счёта из balance/add. -
external_idstring обязательныйID платежа в ЮKassa.
Ответ
В data — счёт после изменения, строка журнала баланса.
-
data.idstringНомер счёта. -
data.ext_idstringПривязанный платёж:kassa_m_payment_<ID ЮKassa>. -
data.user_id, data.sum, data.datestringПользователь, сумма в рублях, дата создания счёта. -
data.typestring1— пополнение. -
data.statusstring2— ждёт оплаты,1— зачислен.
Подтверждение оплаты
/api-rest/balance/confirm
Вызывается после оплаты. Сервер сам запрашивает платёж в ЮKassa и зачисляет деньги, только если платёж в статусе succeeded, а счёт из его метаданных (balance_hid, user_id, sum) ещё не оплачен и совпадает по пользователю и сумме. Если пользователь согласился сохранить карту, она привязывается для автоплатежей.
Параметры query и JSON-тело
-
tokenstring обязательный заголовокAccess token из user/auth. -
external_idstring обязательныйID платежа в ЮKassa — без префикса. -
sourcestring обязательныйПлатёжная система.
Ответ
Успех — 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. |
Порядок вызовов
balance/add— получить номер счёта.- Создать платёж в ЮKassa с метаданными
balance_hid(номер счёта),user_idиsum. balance/update— связать счёт с ID платежа.- После оплаты —
balance/confirm. Повторный вызов для уже зачисленного платежа вернёт500, деньги дважды не зачисляются.
Платёж проверяется в магазине ЮKassa мобильного приложения — платежи, созданные в другом магазине, подтвердить не получится.