Регулярные платежи (СБП)
Регулярные списания по СБП позволяют списывать с плательщика фиксированную сумму по расписанию. Плательщик один раз подтверждает условия на платёжной форме RollyPay и оплачивает первый платёж — дальше списания выполняются автоматически, без его участия, пока подписка не будет остановлена.
Ключевые свойства:
- Сумма и период фиксируются в мо мент создания подписки и после подтверждения не меняются.
- Первое и каждое последующее успешное списание создаёт обычный платёж в вашем списке платежей — со способом оплаты
sbp_recurrentи полемsubscription_id. - По каждому такому платежу приходит обычный вебхук
payment.paidна вашcallback_url. - Валюта — только рубли (
RUB).
Сценарии (subscription plans)
Подписка всегда создаётся на основе сценария — заранее согласованной и подключённой к вашей кассе конфигурации регулярных списаний. Сценарии подключает RollyPay при настройке кассы: через API их создать нельзя.
Сценарий задаёт:
- период списаний (
interval); - максимально допустимую сумму одного списания для этого периода (
cap_amount_rub); - текст согласия плательщика и версию политики, которые показываются на форме;
- ограничение по числу циклов (
max_cycles), если оно предусмотрено.
Что задаёт мерчант при создании подписки: сценарий (plan_id) и сумму списания (amount) в пределах лимита этого сценария.
Список доступных сценариев кассы возвращает GET /api/v1/subscription-plans (см. ниже).
Поддерживаемые периоды
interval | Периодичность списаний |
|---|---|
day | раз в сутки |
month | раз в месяц |
quarter | раз в 3 месяца |
year | раз в год |
Дата следующего списания рассчитывается по календарю в московском времени: например, для month — то же число следующего месяца, а если такого числа в месяце нет, берётся последний день месяца.
Лимиты сумм по периодам
Сумма одного списания не может превышать лимит, установленный для периода:
| Период | Максимальная сумма одного списания |
|---|---|
day | 500,00 ₽ |
month | 4 000,00 ₽ |
quarter | 9 000,00 ₽ |
year | 24 000,00 ₽ |
Сумма должна быть больше нуля. Принимаются записи вида 1000, 1000.50, 1000,50 — значение нормализуется до двух знаков после запятой. При превышении лимита вернётся 400 с текстом вида сумма не может превышать 4000,00 ₽ для периода «раз в месяц».
Флоу интеграции
- Получите список сценариев —
GET /api/v1/subscription-plans?terminal_id=.... Возьмитеidнужного сценария и его лимитcap_amount_rub. - Создайте подписку —
POST /api/v1/subscriptionsсterminal_id,plan_id,amountи заголовкомIdempotency-Key. - Перенаправьте плательщика по
pay_urlиз ответа. Подписка создана в состоянииprovider_state: "new",billing_status: "consent_pending"— списаний ещё нет. - Плательщик подтверждает условия на форме RollyPay: видит название магазина, сумму, период и текст согласия, ставит подтверждение.
- Плательщик оплачивает первый платёж по СБП. Подписка переходит в
billing_status: "pending"— идёт проверка оплаты. - Подписка становится активной: после подтверждения первой оплаты
provider_state→active,billing_status→enabled, заполняютсяactivated_atиnext_charge_at. Создаётся платёж со статусомpaidи уходит вебхукpayment.paid. - Последующие списания выполняются автоматически при наступлении
next_charge_at. Каждое успешное списание — снова платёжpaidи вебхукpayment.paid,next_charge_atсдвигается на период вперёд. - Остановка —
POST /api/v1/subscriptions/{subscriptionID}/stopв любой момент.
Пока плательщик не подтвердил условия и не оплатил первый платёж, подписка не становится активной и списаний по ней не происходит. Никаких действий с вашей стороны между шагами 3 и 6 не требуется.
Эндпоинты
Все запросы — с заголовками X-API-Key и X-Nonce (см. Аутентификация).
Список доступных сценариев
GET /api/v1/subscription-plans?terminal_id={terminalID}
| Параметр | Обязательный | Описание |
|---|---|---|
terminal_id | да | UUID кассы |
Возвращает только активные сценарии, подключённые к этой кассе.
curl "https://rollypay.io/api/v1/subscription-plans?terminal_id=d290f1ee-6c54-4b01-90e6-d701748f0851" \
-H "X-API-Key: rpk_live_ВАШ_КЛЮЧ" \
-H "X-Nonce: $(uuidgen)"