Рекуррентные платежи

Как работают подписки

Один раз получите согласие клиента, после чего Cashera будет принимать регулярные платежи по заданному расписанию

Схема интеграции

  1. Создайте подписку методом POST /integration/subscriptions. По умолчанию используется h2h с email; в режиме hosted email необязателен
  2. Перенаправьте клиента на полученный confirmation_url. Подписка не активируется без подтверждения клиента на стороне платёжного провайдера
  3. Дождитесь вебхука subscription.status_updated со статусом active
  4. Каждое автоматическое списание создаёт обычную транзакцию. Результат приходит событиемtransaction.status_updated и доступен в истории списаний
  5. Когда подписка больше не нужна, вызовите метод отмены
Отдельный метод оплаты

Для подписок используется sbp_recurring. Он должен быть подключён к мерчанту Cashera. Передавать этот код в обычный POST /integration/transactions нельзя - подписка создаётся только через POST /integration/subscriptions.

Интервалы списаний

interval задаёт единицу периода, а необязательный interval_count — сколько таких единиц проходит между списаниями. По умолчанию используется 1, поэтому запросы существующих интеграций продолжают работать без изменений.

intervalДопустимый interval_countЕдиница периода
daily1–31День
weekly1–4Неделя
monthly1–12Месяц
yearly1–3Год

Для 3, 6 или 9 месяцев передавайте monthly и соответствующий interval_count. Для 24 месяцев — yearly и 2. Готовые тела запросов приведены в примерах создания. Сумму, интервал и ближайшую дату действующей подписки можно изменить отдельным запросом update. Числовые значения 1–4 вместо строки interval не поддерживаются.

Период не гарантирует бесплатного времени до первого списания. Расписание задаёт провайдер; следующее списание отражается в next_charge_at. Создание и подтверждение подписки сами по себе не подтверждают оплату первого периода.

Суммы и зачисление

Все суммы API передаются целыми числами в копейках. amount — сумма одного списания; interval_count не умножает её или комиссию. Каждое успешное списание проходит как обычный RUB-платёж: применяются сохранённые при создании подписки комиссия и холд, после чего средства зачисляются через стандартный ledger Cashera. Неуспешное списание баланс не увеличивает.

Не отгружайте по статусу подписки

Статус active означает только то, что подписка действует. Товар или услугу за конкретный период выдавайте исключительно после transaction.status_updated со статусомpaid, предварительно сверив сумму, валюту и идентификатор подписки.

Управление действующей подпиской

НужноМетодДеньги
Проверить доступность измененияGET update-supportedНичего не списывает
Изменить цену, ближайшую дату или периодPOST updateНичего не списывает
Запустить отдельную попытку сейчасPOST charge-nowОплата подтверждается отдельно; основное расписание сохраняется
Прекратить будущие списанияPOST cancelНе возвращает прошлые оплаты

Для update и charge-now обязателен Idempotency-Key. Сохраните ключ и параметры до отправки; при сетевом сбое используйте их повторно. Создание подписки по-прежнему защищается через external_id, менять существующую интеграцию для обычных регулярных оплат не требуется. Все URL принимают UUID Cashera; провайдерские ID и ключи клиенту не нужны.

Сценарий «19 ₽ на пять дней, затем 290 ₽ ежемесячно» подробно разобран в инструкции по триалу. Изменение тарифа организует ваш сервер, встроенных полей тарифных этапов нет. Новые методы требуют версии Cashera с поддержкой управления подписками; перед запуском интеграции согласуйте их доступность для вашей кассы. Для ошибок и повторов используйте отдельную инструкцию.

Неудачное списание и отмена

Одна неудачная попытка не отменяет подписку. У платежа может бытьcanceled или failed, а у подписки past_due. Отмена подписки обозначается cancelled. Фиксированного срока автоматической отмены или гарантированного графика повторов API не задаёт. Не показывайте следующую попытку, если next_charge_at отсутствует.