Перейти к содержанию
Innovialabs

Рекуррентные платежи и токенизация карт: как работает автосписание

Основы3 мин

Коротко

При первой оплате платёжный провайдер сохраняет карту и выдаёт магазину токен; дальше магазин списывает деньги по этому токену по расписанию, а провайдер и банк проверяют, что у клиента есть согласие на такие списания.

Как это работает в двух словах

Рекуррентный платёж — списание с карты клиента без его участия в момент оплаты: раз в месяц за подписку, после каждой доставки коробки, при исчерпании баланса. Чтобы это было возможно, карту нужно «запомнить», но хранить номер карты у себя магазину нельзя — это зона жёстких требований PCI DSS.

Поэтому используется токенизация: данные карты остаются у платёжного провайдера, а магазин получает токен — случайную строку, которая ничего не значит за пределами связки «этот магазин + этот провайдер». Украденный токен бесполезен без ключей доступа магазина к API провайдера.

Жизненный цикл: от первой оплаты до автосписания

  1. Первая оплата с согласием. Клиент вводит карту в форме провайдера, проходит 3-D Secure или подтверждение по SMS и отмечает согласие на будущие списания.
  2. Сохранение карты. Провайдер возвращает магазину токен и, как правило, маску карты (последние цифры, срок действия) для показа в личном кабинете.
  3. Хранение. Магазин сохраняет токен в своей базе рядом с подпиской: тариф, сумма, дата следующего списания.
  4. Списание по инициативе магазина. В нужный день сервер магазина вызывает API провайдера с токеном и суммой. Такие операции называются MIT (merchant-initiated transaction) — клиент в них не участвует, повторный 3-D Secure обычно не требуется.
  5. Результат. Провайдер возвращает успех или код ошибки, магазин обновляет статус подписки и уведомляет клиента.

Упрощённо запрос на списание выглядит так:

{
  "token": "tok_7f3a9c...",
  "amount": 99000,
  "currency": "UZS",
  "order_id": "sub-1042-2026-11",
  "description": "Подписка, ноябрь"
}

Поле order_id должно быть уникальным для каждой попытки — это защищает от двойного списания при повторной отправке запроса.

Что делать, если списание не прошло

Отказ — нормальная часть рекуррентных платежей. Важно различать причины:

ПричинаЧто делать
Недостаточно средствПовторить попытку позже по расписанию, предупредить клиента
Карта заблокирована или токен отозванНе повторять, попросить привязать новую карту
Срок действия карты истёкПопросить обновить карту; у части провайдеров есть сервис обновления данных
Технический сбойПовторить через короткое время, проверить статус операции перед повтором

Хорошая практика — dunning: серия повторных попыток с паузами плюс письма или сообщения клиенту. Подписка не отключается сразу, а переходит в статус «ожидает оплаты» на ограниченный срок. Слишком частые повторы при одном и том же отказе могут привести к санкциям со стороны банка или провайдера, поэтому число попыток стоит ограничить.

Согласие клиента: что обязательно

Автосписание без понятного согласия — прямой путь к чарджбэкам и блокировке. Клиент до первой оплаты должен видеть:

  • сумму и периодичность списаний;
  • дату первого списания, особенно если есть пробный период;
  • как отменить подписку — и это должно быть не сложнее, чем оформить её;
  • что произойдёт при изменении цены.

Дополнительно стоит:

  • присылать уведомление перед списанием, особенно после бесплатного периода;
  • давать в личном кабинете кнопку «отвязать карту»;
  • хранить запись о согласии: дату, текст условий, IP или идентификатор сессии.

Примеры: коробки и сервисы

Подписочная коробка (кофе, корм для животных, косметика). Списание привязано к циклу сборки: деньги списываются за несколько дней до отправки, чтобы при отказе успеть приостановить сборку. Клиенту удобно дать возможность пропустить месяц.

Сервис или SaaS. Фиксированная сумма раз в месяц или год. Важны апгрейд и даунгрейд тарифа в середине периода и корректный пересчёт.

Пополнение баланса. Списание срабатывает по событию — например, когда баланс опустился ниже порога. Здесь особенно важен лимит, чтобы ошибка в логике не списала лишнее.

Частые ошибки

  • Сохранять номер карты в своей базе вместо токена.
  • Не делать запросы идемпотентными и получать двойные списания.
  • Повторять списание бесконечно при отказе «карта заблокирована».
  • Прятать кнопку отмены подписки.
  • Не обрабатывать уведомления (webhook) провайдера и полагаться только на ответ запроса.

Частые вопросы

Токен привязан к конкретному провайдеру. Перенос данных карт между провайдерами иногда возможен через их процедуры миграции, но это отдельный процесс; иначе клиентам придётся привязать карту заново.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.