Skip to content

WATA

WATA (wata.pro) — платёжные ссылки с оплатой картой, СБП, TPay и SberPay. Бот создаёт одноразовую ссылку (POST /api/h2h/links), юзер уходит на hosted-страницу WATA и после оплаты возвращается в бота. Валюта шлюза — RUB.

В заказ бот кладёт свой payment_id (orderId), поэтому вебхук привязывается к платежу и по нему, и по transactionId от WATA.

Что понадобится

Мерчант-аккаунт в WATA и API-токен H2H-API — он ходит в заголовке Authorization: Bearer. Больше ничего: публичный ключ для проверки подписи вебхуков бот забирает у WATA сам.

Настройка в кабинете

ПолеЧто этоОбязательное
api_tokenAPI-токен H2H из кабинета WATA; хранится в БД в зашифрованном видеда

Включите тумблер активности провайдера и нажмите Тест — бот запросит GET /api/h2h/public-key с вашим токеном: ответ 200 значит, что токен принят. Дополнительно у провайдера настраиваются отображаемое имя, комиссия для статистики и формы оплаты, которые видит юзер (карта / СБП / TPay / SberPay).

Вебхук

https://ваш-домен/api/v1/payments/wata

Укажите этот URL как адрес уведомлений в кабинете WATA. Каждый вебхук WATA подписывает RSA-SHA512 по сырому телу запроса; base64-подпись приходит в заголовке X-Signature. Бот проверяет её публичным ключом, который сам получает с GET /api/h2h/public-key и кэширует до перезапуска процесса. Битая или отсутствующая подпись → HTTP 403.

Маппинг статуса из поля transactionStatus:

Статус WATAЧто делает бот
paidзачисляет платёж
declinedзакрывает платёж как отменённый
остальныеоставляет в ожидании

Прокси, переписывающий тело, ломает подпись

Подпись считается строго по сырым байтам тела — фолбэка с пересериализацией у этого шлюза нет. Если между WATA и ботом стоит прокси/CDN, который переформатирует JSON, каждый вебхук будет падать с 403. В этом случае платежи всё равно зачислит реконсилятор, но лучше пустить вебхуки мимо такого прокси.

Особенности

  • Возвраты по API, рекурренты и сохранённые карты не поддерживаются — возврат делаете в кабинете WATA, в боте фиксируете результат: /payments/refunds.
  • Шлюз умеет опрос статуса (GET /api/h2h/transactions/{id}) — реконсилятор сам добивает платежи с потерянным вебхуком.
  • Ссылка создаётся с type: OneTime, описание обрезается до 100 символов; success/fail редиректы ведут на return_url, по умолчанию — в Telegram.

Платёж прошёл, а подписки нет?

Реконсилятор опрашивает WATA каждые 5 минут и сам зачисляет зависшие оплаты. Как это работает — /payments/webhooks.

MIT License · сделано для тех, кто продаёт VPN, а не настраивает ботов