Кошелёк и оплата
Баланс игрока, пополнение через ЮKassa и уведомления ЮKassa.
Кошелёк игрока #
/v1/walletДоступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.
Баланс в рублях и последние 30 операций: пополнения, брони, возвраты, прокат, доли.
Заголовки
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
Authorization | строка | да | Bearer <токен игрока> |
Пример запроса
curl -X GET "https://адрес-вашего-сервера/api/v1/wallet" \
-H "Authorization: Bearer <токен игрока>"Ответы
| Код | detail | Значение |
|---|---|---|
| 200 | — | Успешный ответ; пример ниже |
| 401 | no_token | Нет токена в заголовке Authorization |
| 401 | invalid_token | Токен просрочен или подделан — обновите его через /v1/auth/refresh |
Пример ответа
{
"balance": 4200,
"transactions": [
{
"id": "71b3e9d0-5c2a-4e86-9f14-a8d6c3b0e275",
"amount": 5000,
"kind": "topup",
"status": "done",
"note": "Оплата ЮKassa 2f1a…",
"at": "2026-10-02T09:12:44+00:00"
}
]
}Пополнить кошелёк #
/v1/wallet/topupДоступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.
Создаёт платёж ЮKassa и возвращает confirmationUrl — страницу оплаты, которую нужно открыть игроку. Деньги зачисляются только после подтверждения статуса у ЮKassa. Сумма — целые рубли в пределах, заданных в облаке (по умолчанию 100–100 000). Если онлайн-оплата не подключена — 503.
Заголовки
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
Authorization | строка | да | Bearer <токен игрока> |
Тело запроса application/json
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
amount | целое | да | Сумма в целых рублях больше 0; не больше 100000 |
Пример запроса
curl -X POST "https://адрес-вашего-сервера/api/v1/wallet/topup" \
-H "Authorization: Bearer <токен игрока>" \
-H "Content-Type: application/json" \
-d '{"amount": 5000}'Ответы
| Код | detail | Значение |
|---|---|---|
| 200 | — | Успешный ответ; пример ниже |
| 401 | no_token | Нет токена в заголовке Authorization |
| 401 | invalid_token | Токен просрочен или подделан — обновите его через /v1/auth/refresh |
| 400 | bad_amount | Сумма вне допустимого диапазона; в ответе min и max |
| 503 | payments_provider_not_configured | Онлайн-оплата не подключена |
| 502 | payment_create_failed | ЮKassa не создала платёж |
| 422 | […] | Ошибка проверки параметров или тела: detail — список ошибок |
Пример ответа
{
"ok": true,
"status": "pending",
"paymentId": "e4a19c7d-6b3f-4c21-8d5e-0f2a7b9c1d36",
"confirmationUrl": "https://yoomoney.ru/checkout/payments/v2/contract?orderId=<id>"
}Статус пополнения после возврата со страницы оплаты #
/v1/wallet/payments/{payment_id}Доступ: Токен игрока Заголовок Authorization: Bearer <токен игрока> — токен по SMS-входу.
Статус пополнения после возврата со страницы оплаты. Если платёж ещё ждёт (pending), облако само перепрашивает статус у ЮKassa и при успехе зачисляет деньги. Статусы: pending, succeeded, canceled.
Параметры пути
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
payment_id | строка (uuid) | да | paymentId из ответа на пополнение |
Заголовки
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
Authorization | строка | да | Bearer <токен игрока> |
Пример запроса
curl -X GET "https://адрес-вашего-сервера/api/v1/wallet/payments/e4a19c7d-6b3f-4c21-8d5e-0f2a7b9c1d36" \
-H "Authorization: Bearer <токен игрока>"Ответы
| Код | detail | Значение |
|---|---|---|
| 200 | — | Успешный ответ; пример ниже |
| 401 | no_token | Нет токена в заголовке Authorization |
| 401 | invalid_token | Токен просрочен или подделан — обновите его через /v1/auth/refresh |
| 404 | payment_not_found | Платёж не найден или не ваш |
| 422 | […] | Ошибка проверки параметров или тела: detail — список ошибок |
Пример ответа
{
"paymentId": "e4a19c7d-6b3f-4c21-8d5e-0f2a7b9c1d36",
"status": "succeeded",
"amount": 5000,
"balance": 9200
}Уведомление ЮKassa #
/v1/wallet/yookassa/webhookДоступ: Только для ЮKassa Без авторизации: тело уведомления не принимается на веру, статус платежа перепрашивается у ЮKassa.
Адрес для уведомлений ЮKassa. Из тела берётся только object.id; статус и сумма перепрашиваются у ЮKassa по ключу магазина и сверяются с записью облака. Деньги зачисляются ровно один раз, повторные уведомления ничего не меняют. Чужой платёж — ответ 200 с ignored=true.
Тело запроса
Тело — объект уведомления ЮKassa; облако читает из него только object.id.
Пример запроса
curl -X POST "https://адрес-вашего-сервера/api/v1/wallet/yookassa/webhook" \
-H "Content-Type: application/json" \
-d '{
"type": "notification",
"event": "payment.succeeded",
"object": {"id": "<id платежа ЮKassa>", "status": "succeeded"}
}'Ответы
| Код | detail | Значение |
|---|---|---|
| 200 | — | Успешный ответ; пример ниже |
| 400 | no_payment_id | В уведомлении нет object.id |
| 422 | […] | Ошибка проверки параметров или тела: detail — список ошибок |
Пример ответа
{"ok": true, "status": "succeeded"}