Skip to content

SeverPay

SeverPay (severpay.io) — касса с оплатой картой и СБП. Бот создаёт счёт через POST /api/merchant/payin/create и отправляет юзера на страницу оплаты из ответа. Валюта — RUB.

Подпись у SeverPay живёт в теле запроса, а не в заголовке, и считается одинаково в обе стороны: из payload выкидывается поле sign, добавляются mid и случайный salt (на исходящих), ключи сортируются, JSON сжимается в компактный вид (ensure_ascii=False) и берётся HMAC-SHA256 hex с ключом token. В счёт кладётся свой payment_id (order_id).

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

Мерчант-аккаунт в SeverPay: токен (ключ HMAC-подписи) и mid — числовой ID мерчанта.

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

ПолеЧто этоОбязательное
tokenсекретный токен — ключ HMAC-SHA256 подписи запросов и вебхуковда
midчисловой ID мерчанта, уходит в каждый запросда

Ключи хранятся в БД в зашифрованном виде. Включите тумблер активности провайдера. Кнопка Тест у этого шлюза проверочного запроса к API не делает — правильность ключей подтвердит первый платёж. Дополнительно настраиваются отображаемое имя, комиссия для статистики и формы оплаты, которые видит юзер (карта / СБП).

Вебхук

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

Укажите этот URL как адрес уведомлений в кабинете SeverPay. Подпись приходит в поле sign JSON-тела и проверяется той же формулой: убрать sign, отсортировать ключи, компактный JSON, HMAC-SHA256 с token. Битая или отсутствующая подпись → HTTP 403.

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

Статус SeverPayЧто делает бот
successзачисляет платёж
decline, fail, failed, cancelled, canceledзакрывает платёж как отменённый
остальныеоставляет в ожидании

Особенности

  • Возвраты по API, рекурренты и сохранённые карты не поддерживаются — возврат делаете в кабинете SeverPay, в боте фиксируете результат: /payments/refunds.
  • Опроса статуса у этого шлюза нет — зачисление зависит только от вебхука.
  • Сумма из вебхука сверяется со счётом: меньше 90% ожидаемого — платёж бракуется как недоплата.
  • Подпись считается по пересобранному JSON, а не по сырым байтам — прокси, переформатирующий тело, вебхуки здесь не ломает.
  • Покупателю подставляется синтетический e-mail <telegram_id>@telegram.org и client_id = внутренний ID юзера; возврат после оплаты — на return_url (по умолчанию в Telegram). Счёт создаётся с lifetime: 1440.

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

У SeverPay нет API опроса статуса, поэтому реконсилятор этот шлюз не добьёт — единственный канал зачисления здесь вебхук. Если платежи виснут, проверьте URL уведомлений и token/mid. Как устроен пайплайн вебхуков — /payments/webhooks.

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