Как подключить автоматические списания в Revolut Business: полное руководство по API

Если вы управляете SaaS-проектом, сервисом по подписке или платной рассылкой, вы наверняка сталкивались с одной и той же болью: клиенты забывают продлить оплату, а вы тратите время на ручные инвойсы. Или, наоборот, вы тратите бюджет на платежные шлюзы, которые берут комиссию за каждое действие.

Revolut Business предлагает решение, которое закрывает эти проблемы на уровне архитектуры вашего продукта. Это не просто кнопка «оплатить картой», а полноценный API для управления подписками (Subscriptions API). Он позволяет вам контролировать процесс биллинга, делать списания автоматически и при этом получать лучшие условия по конвертации валют и комиссиям, чем у традиционных шлюзов.

В этой статье я не буду углубляться в абстрактную теорию блокчейна или маркетинговые лозунги. Мы разберем конкретно техническую и практическую сторону: как настроить API, какие события отправлять, как обрабатывать ошибки и как избежать ситуаций, когда сервис перестает работать из-за неоплаты.

Почему это нужно именно вам

Прежде чем писать код, важно понять, зачем вам вообще лезть в API. Стандартная схема с PayPal или Stripe работает, но у нее есть свои нюансы. Revolut Business API подходит не всем, но идеально решает задачи, где важна скорость трансграничных платежей и контроль над деньгами.

Обычно разработчики и бизнес идут к API, когда сталкиваются с тремя проблемами:

  • Высокая стоимость транзакций. Платежные агрегаторы часто берут от 1.5% до 3% + фиксированная сумма. Revolut работает по модели P2G (Person to Business) с фиксированными тарифами, что при больших объемах транзакций значительно дешевле.
  • Проблемы с конвертацией. Если ваши клиенты платят в евро, а вы ведете учет в долларах, вам нужны выгодные курсы. Revolut дает доступ к межбанковским курсам в реальном времени.
  • Необходимость контроля. Вы хотите сами управлять жизненным циклом подписки: приостанавливать доступ, менять тарифы, делать тестовые списания без участия оператора поддержки.

Использование Revolut Business API для подписок — это переход от модели «собрать деньги и забыть» к модели «построить финансовую операционку внутри своего продукта».

Что нужно подготовить до начала разработки

Никакой код не заработает, если у вас нет правильного доступа. Многие разработчики начинают писать запросы сразу, но упираются в блокировку на уровне банка. Вот чек-лист того, что должно быть готово:

  1. Аккаунт Revolut Business. Это обязательно. Личный аккаунт не даст доступа к нужным методам API. Вам нужен тариф Business, Professional или Enterprise, в зависимости от объемов.
  2. Доступ к API-ключам. Зайдите в панель управления Revolut Business, перейдите в раздел Developers. Там нужно сгенерировать пару ключей: Public и Secret. Никогда не передавайте Secret-ключ на фронтенд (в браузер клиента). Он нужен только вашему серверу.
  3. Webhook URL. Revolut не будет гонять ваш сервер с вопросом «оплатил клиент или нет?». Вам нужно поднять endpoint на своем сервере, который будет слушать уведомления от банка. Это критически важный момент.
  4. Тестовая среда (Sandbox). Revolut предоставляет отдельный URL для тестов. Не пытайтесь сразу тестировать на продакшн-ключах. Сделайте несколько тестовых транзакций на реальные деньги (хотя бы 1 евро), чтобы убедиться, что всё идет по плану.

Обратите внимание: для работы с подписками вам понадобится функция Payment Tokenization. Это процесс, когда клиент один раз вводит данные карты, а вы получаете токен, который можно использовать для будущих списаний. Без токенизации вы не сможете делать автоматические списания (recurring payments) — банк просто заблокирует попытку как мошенническую.

Как работает логика подписки через API

Процесс подключения платной подписки через Revolut Business выглядит как цепочка событий. Если вы поймете эту логику, вам будет проще проектировать свою базу данных и архитектуру.

Вот как это происходит в реальности:

Шаг 1: Инициация платежа. Клиент нажимает «Подписаться» на вашем сайте. Вы не перенаправляете его на сайт банка (как было раньше с 3D Secure). Вместо этого вы вызываете метод createPaymentRequest на своем бэкенде, передавая сумму и валюту. Revolut возвращает URL или deep-link.

Шаг 2: Авторизация и токенизация. Клиент переходит по ссылке (или через приложение), вводит данные карты и подтверждает платеж через 3D Secure. В этот момент банк не только списывает первую сумму, но и, если вы попросили, выдает вам токен карты. Этот токен — ключ к будущим списаниям.

Шаг 3: Создание подписки (Subscription). Используя полученный токен, вы вызываете метод создания подписки. Вы указываете периодичность (раз в месяц, раз в год) и сумму. Revolut берет на себя планирование будущих списаний.

Шаг 4: Автоматические списания. В назначенную дату Revolut автоматически отправляет запрос на списание денег с карты клиента. Вам не нужно запускать этот процесс вручную.

Шаг 5: Обработка результатов (Webhooks). Это самый важный этап. Bank отправляет на ваш сервер Webhook-уведомление: «Списание прошло успешно» или «Карта отклонена». Ваш код должен обработать это сообщение: активировать доступ пользователю или заблокировать его.

Здесь кроется главная ошибка новичков: они пытаются опрашивать банк (polling) каждые 5 минут — «изменился ли статус?». Это плохая практика. Вы быстро упретесь в лимиты API, а статус может обновиться с задержкой. Webhook — это единственный надежный способ.

Сценарии: Как выбрать стратегию подключения

Не все подписки одинаковы. В зависимости от вашего продукта, подход к реализации через Revolut может отличаться. Давайте разберем три типичные ситуации.

Сценарий 1: SaaS-сервис с фиксированной ценой
У вас есть тариф «Старт» за 20 евро. Все платят одинаково.
Решение: Используйте готовый виджет Revolut. Он автоматически создает подписку с жестко заданной суммой. Вам не нужно ничего программировать в части расчетов. Вы только слушаете событие subscription.success и выдавайте доступ.

Сценарий 2: Платформа с динамическим счетом (Usage-based)
Вы берете плату за количество обработанных изображений или за объем трафика. Сумма меняется каждый месяц.
Решение: Revolut API позволяет создавать подписки с переменной суммой, но тут есть нюанс. Вам нужно заранее (за 24-48 часов) уведомить клиента, сколько денег будет списано. В этом случае лучше использовать модель Recurring Payment Request, где вы сами инициируете списание суммы, рассчитанной в вашем биллинге, используя сохраненный токен. Это дает гибкость, но требует строгой логики уведомления клиента (email/SMS).

Сценарий 3: Тест-драйв с последующей оплатой
Первый месяц бесплатно или за 1 евро, потом дорого.
Решение: Создавайте подписку с суммой 0 или 1 евро. После истечения пробного периода обновляйте объект подписки через API, меняя сумму и периодичность. Убедитесь, что клиент подтвердил смену условий (обычно это делается через 3D Secure при первом списании).

Для наглядности сравним подход через готовый виджет и через чистый API:

Критерий Готовый виджет (Checkout) Чистый API (Direct Integration)
Скорость внедрения Быстро (несколько часов) Долго (несколько дней/недель)
Дизайн страницы оплаты Стандартный (брендинг Revolut) Полностью ваш (White-label)
Контроль логики Ограниченный (только базовые сценарии) Полный (сложные тарифы, скидки, кэшбэк)
Необходимость Webhooks Обязательно Обязательно
Риски Минимальные Выше (нужно самому обрабатывать ошибки сети и банка)

Частые ошибки при интеграции

В процессе работы с платежными системами ошибки стоят денег. Я видел множество кейсов, когда разработчики теряли выручку из-за банальных оплошностей. Вот на что стоит обратить особое внимание.

Ошибка 1: Игнорирование 3D Secure
Европа живет по правилам PSD2. Без подтверждения через 3D Secure (код из смс или биометрия в приложении банка) транзакция не пройдет. Если вы пытаетесь сделать списание «в лоб», банк вернет ошибку. Всегда закладывайте сценарий, когда клиенту нужно зайти в приложение Revolut или банк-партнер для подтверждения.

Ошибка 2: Отсутствие обработки Webhook-ов (Idempotency)
Интернет — штука ненадежная. Ваш сервер может не ответить банку за 5 секунд. Банк решит, что вы упали, и отправит уведомление еще раз. Если вы не проверите, обрабатывали ли вы уже этот запрос, вы можете дважды выдать доступ, дважды начислить баллы или, что хуже, дважды списать деньги с клиента. Всегда используйте механизм идемпотентности: если пришел запрос с ID X, проверьте, обрабатывали ли вы его ранее.

Ошибка 3: Неправильная работа с отклоненными картами
Клиент не пополнил карту. Банк вернул ошибку «Insufficient funds». Если вы просто запишете это в лог и забудете, клиент останется без доступа, а вы — без денег. Вам нужна стратегия retry (повторных попыток). Обычно банк сам делает до 3 попыток списания в течение 10 дней. Но вы тоже должны уведомлять клиента: «Мы не смогли списать деньги, пожалуйста, обновите данные карты».

Ошибка 4: Сложная валидация валют
Клиент оплатил в USD, а вы пытаетесь отразить это в EUR без конвертации. Курс может измениться за секунду. Всегда используйте курсы, которые предоставил Revolut в момент транзакции, или конвертируйте суммы на лету с учетом комиссии, указанной в ответе API.

Рекомендации по архитектуре и безопасности

Чтобы система работала стабильно и не вызывала вопросов у службы безопасности банка, следуйте этим правилам:

  • Храните токены безопасно. Токен карты — это не пароль, но он позволяет списывать деньги. Храните его в зашифрованном виде. Не кладите его в базу данных в открытом тексте.
  • Разделяйте тест и продакшн. Используйте разные ключи API для тестовой среды. Никогда не отправляйте тестовые запросы на реальные карты клиентов, даже если вы просто проверяете состояние счета.
  • Ведите лог всех событий. Записывайте каждый запрос к Revolut и каждый ответ. Это спасет вас, если клиент напишет: «Я платил, а вы не зачислили». Вы сможете показать ID транзакции и ответ банка.
  • Учитывайте лимиты. У API есть лимиты на количество запросов в секунду (Rate Limits). Если у вас 10 000 подписчиков и все они обновляют подписки одновременно, ваш сервер может получить бан. Используйте очереди (например, RabbitMQ или Redis), чтобы сглаживать пики нагрузки.
  • Оповещение клиентов. Всегда отправляйте email-уведомление клиенту сразу после успешного списания. Это снижает количество обращений в поддержку и повышает доверие.

Разбор конкретной ситуации: Что делать, если клиент не хочет продлевать

Подписка — это не только про то, как забрать деньги, но и про то, как корректно отпустить клиента. В Revolut Business API для этого есть метод отмены подписки (Cancel Subscription).

Если клиент нажал «Отменить» у вас на сайте:

  1. Немедленно вызовите API-метод отмены. Это остановит будущие списания.
  2. Проверьте статус: активна ли она еще до конца оплаченного периода?
  3. Если клиент оплатил месяц вперед, отменяйте подписку с датой окончания через 30 дней. Не блокируйте доступ мгновенно — это вызывает негатив и споры.
  4. Если клиент просто удалил карту, но не отменял подписку, отправьте уведомление: «Карта истекла, пожалуйста, привяжите новую».

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

Пример кода: Как выглядит запрос на создание подписки

Чтобы вы поняли, с чем придется работать, вот сниппет того, как может выглядеть запрос на создание подписки на вашем сервере (на примере Node.js). Это не готовый код для копирования, а схема логики.


// Примерный псевдокод для бэкенда

async function createSubscription(userId, amount, currency) {
    // 1. Получаем токен карты клиента из нашей БД
    const paymentToken = await db.getPaymentToken(userId);

    // 2. Формируем запрос к Revolut API
    const response = await revolutApi.createSubscription({
        payment_token: paymentToken,
        amount: amount,
        currency: currency,
        interval: 'month', // Раз в месяц
        reference: `sub_userId_{Date.now()}` // Уникальный ID для вашего учета
    });

    // 3. Сохраняем ID подписки от Revolut в нашей базе
    await db.saveSubscriptionId(userId, response.id);

    // 4. Возвращаем результат фронтенду
    return { success: true, status: response.status };
}

Обратите внимание на поле reference. Это ваш внутренний идентификатор. Bank вернет его в ответе, и вы сможете точно сопоставить транзакцию с пользователем. Не полагайтесь только на ID от банка — у них они могут быть длинными и непонятными, а вам нужен свой ключ.

Как принимать решения и двигаться дальше

Интеграция Revolut Business API — это не разовая задача, а процесс. Начните с малого.

Если вы только начинаете:

  • Не пишите свой биллинг с нуля. Используйте Revolut API как основу.
  • Сначала настройте разовые платежи (One-off payments), чтобы понять, как работают токены и Webhooks.
  • Только после этого подключайте рекуррентные списания (подписки).

Если у вас уже есть платежная система:

  • Анализируйте статистику отказов. В Revolut процент успешных списаний (authorization rate) часто выше, чем у крупных агрегаторов, особенно для трансграничных платежей.
  • Попробуйте перевести на Revolut часть трафика (например, 20%) и сравните комиссию и конверсию.

Главное — не бойтесь ошибок. API-документация Revolut достаточно подробная, а поддержка отвечает быстро, если вы предоставите им ID транзакции. Но помните: банк не несет ответственности за баги в вашем коде. Если вы не настроили Webhooks правильно и не получили уведомление об успешной оплате — это ваша проблема, а не банка. Поэтому тестирование — это 50% успеха.

В итоге, использование Revolut Business API для подписок дает вам контроль. Вы перестаете быть зависимым от посредников, которые могут заблокировать вас в любой момент, и получаете прямой канал связи с платежной системой. Это путь для тех, кто хочет масштабироваться и оптимизировать расходы.

Информация в статье носит ознакомительный характер. Финансовые операции, интеграция API и использование платежных систем регулируются законодательством вашей юрисдикции и правилами банков. Перед внедрением финансовых решений рекомендуется проконсультироваться с профильными специалистами (юристами, финансовыми аналитиками) и ознакомиться с актуальными условиями использования сервиса Revolut Business.

Platejigid.ru