RollyPay
RollyPay (rollypay.io) — касса с оплатой картой, СБП и криптовалютой (в формах оплаты бота — СБП и крипта). Бот создаёт платёж через POST /api/v1/payments с API-ключом в заголовке X-API-Key, юзер уходит на pay_url и после оплаты возвращается по success_redirect_url. Валюта счёта — RUB, сумма передаётся строкой вида 199.00.
В платёж кладётся свой payment_id (order_id) — по нему вебхук привязывается к платежу; дополнительно сохраняется payment_id от RollyPay, по которому шлюз умеет опрашивать статус.
Что понадобится
Мерчант-аккаунт в RollyPay. Из кабинета нужны API-ключ (аутентификация запросов) и секрет подписи вебхуков (signing secret).
Настройка в кабинете
| Поле | Что это | Обязательное |
|---|---|---|
api_key | API-ключ из кабинета RollyPay — заголовок X-API-Key | да |
signing_secret | секрет подписи вебхуков | да |
Оба ключа хранятся в БД в зашифрованном виде. Включите тумблер активности провайдера. Кнопка Тест у этого шлюза проверочного запроса к API не делает — правильность ключей подтвердит первый платёж. Дополнительно настраиваются отображаемое имя, комиссия для статистики и формы оплаты, которые видит юзер (СБП / крипта).
Вебхук
https://ваш-домен/api/v1/payments/rollypayУкажите этот URL как адрес уведомлений в кабинете RollyPay. Подпись приходит в заголовке X-Signature: HMAC-SHA256 с ключом signing_secret от строки {timestamp}.{сырое тело}, где timestamp берётся из заголовка X-Timestamp. Привязка подписи к времени отсекает replay-атаки. Оба заголовка обязательны; битая подпись → HTTP 403.
Маппинг статуса из поля status:
| Статус RollyPay | Что делает бот |
|---|---|
paid | зачисляет платёж |
expired, canceled, cancelled, chargeback | закрывает платёж как отменённый |
| остальные | оставляет в ожидании |
Особенности
- Шлюз умеет опрос статуса (
GET /api/v1/payments/{id}) — реконсилятор сам добивает платежи с потерянным вебхуком. - Возвраты по API, рекурренты и сохранённые карты не поддерживаются — возврат делаете в кабинете RollyPay, в боте фиксируете результат: /payments/refunds.
chargebackзакрывает платёж как отменённый — подписка при этом не отзывается автоматически, разбирайтесь руками.- Сумма из вебхука сверяется со счётом: меньше 90% ожидаемого — платёж бракуется как недоплата.
- Описание платежа обрезается до 128 символов.
Платёж прошёл, а подписки нет?
Реконсилятор опрашивает RollyPay каждые 5 минут и сам зачисляет зависшие оплаты. Как это работает — /payments/webhooks.
