Как настроить повторяющиеся платежи в Stripe для SaaS-продукта в СНГ: пошагово, без воды

Как настроить повторяющиеся платежи в Stripe для SaaS-продукта в СНГ: пошагово, без воды

Если ты запускаешь SaaS-продукт для клиентов из России, Украины, Беларуси, Казахстана или других стран СНГ — ты уже понимаешь: люди не хотят вводить карту каждый месяц. Они хотят, чтобы всё работало автоматически. И если твой сервис не умеет брать деньги по расписанию — ты теряешь 30–50% потенциальных клиентов. Не потому что они не хотят платить. А потому что ты им создаёшь лишние препятствия.

Stripe — один из немногих платёжных шлюзов, который реально работает для СНГ. Но настроить повторяющиеся платежи (recurring billing) не так просто, как в документации. Многие делают ошибки, которые приводят к высокой отмене подписок, блокировкам карт и жалобам клиентов. Я покажу, как сделать это правильно — без лишних настроек, без сюрпризов и с учётом реальных условий наших пользователей.

Что нужно настроить: три ключевых элемента

В Stripe повторяющиеся платежи работают через три связанных объекта:

  1. Product — то, что ты продаёшь (например, «Pro-план на 990₽/мес»).
  2. Price — цена, частота и валюта (например, 990 рублей, ежемесячно).
  3. Subscription — связка клиента с ценой, с возможностью отмены, приостановки или смены тарифа.

Не путай их. Product — это логическая сущность. Price — это конкретная цена. Subscription — это активный договор между тобой и клиентом. Если ты настроишь только Price, но не привяжешь его к Product — Stripe не поймёт, что именно ты продаёшь. Если не создашь Subscription — клиент не будет платить автоматически.

Как настроить: пошагово

Вот что делать, если ты только начинаешь:

  1. Создай Product в панели Stripe → Products → Create Product. Назови его понятно: «SaaS Pro — ежемесячно». Не пиши «План 3» или «Premium». Клиенты не должны гадать, что это.
  2. Добавь Price к этому Product. Выбери валюту — рубль (RUB). Это важно. Даже если у тебя есть долларовые клиенты — в СНГ почти все платят в рублях. Доллары вызывают вопросы, конвертацию и страх перед курсом. Установи интервал: monthly. Сумму — например, 990. Не 999. Не 1000. 990 — психологически воспринимается как «дешевле», и это работает.
  3. Настрой вебхуки (webhooks). Это не опционально. Stripe будет слать тебе события: «платёж прошёл», «платёж провалился», «подписка отменена». Без этого ты не узнаешь, что клиенту отклонили карту, и не сможешь отправить письмо с просьбой обновить данные. Включи события: invoice.payment_succeeded, invoice.payment_failed, customer.subscription.deleted.
  4. Создавай Subscription через API — не через интерфейс. Даже если ты используешь Stripe Checkout, ты всё равно должен передать price_id и customer_id. Не передавай просто сумму — передавай конкретный Price ID. Иначе ты рискуешь, что при изменении цены старые подписки начнут платить по новой — и клиенты будут злиться.
  5. Не включай автоматическое обновление карт (automatic card updates) сразу. Это звучит хорошо, но в СНГ банки редко поддерживают эту функцию. Вместо этого — настрой уведомление клиенту: «Ваш платёж не прошёл. Обновите карту в личном кабинете».

Пример кода (Node.js) для создания подписки:

const subscription = await stripe.subscriptions.create({
  customer: 'cus_123abc',
  items: [{ price: 'price_xxx123' }],
  payment_behavior: 'default_incomplete',
  expand: ['latest_invoice.payment_intent'],
});

Параметр payment_behavior: 'default_incomplete' — ключевой. Он не создаёт платёж сразу, а только подписку. Ты потом сам запускаешь оплату через payment_intent. Это даёт тебе контроль: если клиент ввёл карту, но она не прошла верификацию (часто бывает в Сбербанке или Тинькофф), ты можешь попросить его проверить данные, а не просто отменить подписку.

Валюты: рубль — только рубль

Многие пытаются сделать «международный» SaaS — и настраивают цены в долларах. Это ошибка.

В СНГ:

  • 90% клиентов используют российские/белорусские/казахстанские карты — они не умеют платить в долларах.
  • Если ты выставляешь счёт в USD, клиенты видят: «$19.99». Они не знают, сколько это в рублях. Им нужно считать. И они не будут это делать.
  • Даже если карта поддерживает USD — банк может заблокировать платёж как «подозрительный».
  • Если курс меняется — ты получаешь жалобы: «Вы повысили цену!» — хотя ты не менял цену, просто курс упал.

Если ты хочешь выйти на международный рынок — создай отдельный Product с ценой в долларах. Но для СНГ — только рубли. И не забывай: Stripe поддерживает RUB, UAH, KZT, BYN. Но UAH и BYN — рискованно из-за политической ситуации. Лучше пока держаться за RUB и KZT.

Способы сбора платежей: что выбрать

У тебя есть три основных пути собрать деньги:

Способ Когда использовать Плюсы Минусы
Stripe Checkout Для новых клиентов, которые только начинают пробовать продукт Просто, быстро, поддерживает Apple Pay, Google Pay, СБП Меньше контроля над дизайном, не подходит для сложных сценариев (например, скидки по промокодам)
Stripe Elements + Custom Form Когда ты хочешь полностью контролировать дизайн и процесс Можно встроить в свой интерфейс, поддержка всех карт, включая Сбер и Тинькофф Требует больше кода, нужно тестировать на всех браузерах и устройствах
Stripe Billing (веб-интерфейс) Для B2B-клиентов, которые платят через корпоративные карты Можно отправить счёт вручную, клиент сам оплачивает Не автоматизирует подписки, не подходит для массового SaaS

Для большинства SaaS-продуктов в СНГ — идеальный выбор: Stripe Elements в своём интерфейсе. Почему? Потому что клиенты доверяют своему интерфейсу. Если ты вставляешь Stripe Checkout — ты выносишь их на чужую страницу. А в СНГ люди боятся переходить по ссылкам. Они думают: «Это фишинг?». Если ты встроил форму в свой сайт — они чувствуют себя в безопасности.

Частые ошибки (и как их избежать)

  1. Не проверяешь статус подписки перед доступом к функциям. Клиент отменил подписку — но ты всё равно даёшь ему доступ. Через 2 дня он вспоминает, что у него ещё есть доступ, и пишет в поддержку: «Почему вы не вернули деньги?». Проверяй статус подписки subscription.status перед каждым запросом к API. Только если active — даёшь доступ.
  2. Отправляешь письма «Платёж не прошёл» сразу после первого провала. Stripe по умолчанию пытается повторить платёж 3 раза (через 1, 3, 5 дней). Если ты сразу пишешь клиенту, что «подписка отменена» — ты теряешь клиента. Жди 5 дней. И только после третьего провала — пиши: «Ваш платёж не прошёл три раза. Обновите карту, чтобы не потерять доступ».
  3. Используешь один Price для всех клиентов. Ты даёшь скидку 20% студентам? Не меняй цену в Price. Создай отдельный Price: «SaaS Pro — студенты, 790₽/мес». Иначе при смене цены все старые подписки начнут платить новую — и клиенты будут в шоке.
  4. Не настраиваешь вебхуки на обработку ошибок. Если клиент ввёл карту с неверным CVV — Stripe вернёт ошибку card_declined. Ты должен поймать это и показать клиенту: «Неверный CVV. Проверьте код на карте». Не просто «платёж не прошёл».
  5. Пытается использовать Stripe без 3D Secure. В России и Беларуси банки требуют 3DS для всех онлайн-платежей. Stripe автоматически включает его, но если ты используешь старый код или не обновлял библиотеки — 3DS может не сработать. Проверь: при оплате должен появляться всплывающий экран от банка. Если его нет — ты рискуешь, что платёж отклонят как «неподтверждённый».

Что выбрать: сценарии

Ты не один. У тебя своя ситуация. Вот что делать в разных случаях:

  • Ты только запускаешь продукт и нет команды разработки. Используй Stripe Checkout. Это займет 2 часа. Не трать время на кастомную форму. Потом, когда клиентов станет больше — перейдёшь на Elements.
  • У тебя B2B-клиенты из крупных компаний (банки, госструктуры). Используй Stripe Billing + отправку счёта по email. Они не хотят вводить карты — они платят по счёту. Создай шаблон счёта с реквизитами, добавь QR-код для СБП — и они будут платить в 2 клика.
  • Ты хочешь дать скидку за годовую оплату. Создай отдельный Price: «SaaS Pro — годовая, 8900₽» (вместо 11880₽). Не скидывай цену вручную — это сбивает логику. Используй отдельный Price. Это чисто, легко отслеживать и не ломает историю платежей.
  • У тебя много клиентов с картами Тинькофф и Сбер. Убедись, что твоя форма поддерживает СБП (Система быстрых платежей). Stripe позволяет добавить СБП как способ оплаты в Elements. Это увеличивает конверсию на 15–25% в СНГ.
  • Ты хочешь, чтобы клиенты могли менять тарифы без остановки. Используй subscription_items и метод update. Не отменяй и не создавай новую подписку. Меняй Price внутри существующей подписки — и клиент не потеряет историю оплаты.

Как лучше сделать: практические рекомендации

  • Тестируй платёж на реальных картах. Возьми карту Тинькофф или Сбер. Запусти процесс оплаты. Смотри: появляется ли экран банка? Успешно ли проходит 3DS? Если нет — ищи ошибку в настройке 3D Secure в Stripe.
  • Пиши письма на русском, с человеческим тоном. Не: «Your payment has failed». А: «Привет! Мы не смогли списать платёж за вашу подписку. Пожалуйста, обновите данные карты в личном кабинете — и всё вернётся в норму. Никаких дополнительных действий не нужно.»
  • Собирай статистику по отменам. Если больше 15% подписок отменяются в первый месяц — это не про цену. Это про то, что клиент не понял, как пользоваться продуктом. Улучшай онбординг, а не цену.
  • Не используй «бесплатный пробный период» без карты. В СНГ это рискованно. Люди могут ввести карту, а потом забыть. Через 30 дней — автоматический платёж. Они удивляются: «Я же не платил!». Всегда требуй карту при регистрации. Даже если пробный период 7 дней — карта нужна. Stripe не снимет деньги до окончания пробника — это безопасно.
  • Проверяй, что твой домен не в чёрных списках. Если ты используешь домен вроде yourapp.ru и он когда-то был у спамера — Stripe может блокировать платежи. Проверь через UrlVoid или VirusTotal. Если домен в чёрном списке — сменить его. Это дороже, чем кажется.

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

Статистика: 40% провалов — это не «карта заблокирована», а «клиент просто забыл, что подписался». Или «карта закончилась, но он не в курсе».

Твой алгоритм действий:

  1. Stripe присылает событие invoice.payment_failed.
  2. Ты ждёшь 24 часа — Stripe сам попытается повторить платёж.
  3. Если снова провал — через 48 часов отправляешь письмо: «Ваш платёж не прошёл. Обновите карту в личном кабинете.»
  4. Если ещё 3 дня — ничего не изменилось — отправляешь второе письмо: «Ваша подписка будет приостановлена через 48 часов. Если хотите продолжить — обновите карту.»
  5. Если после этого — ничего — отменяешь подписку. Но не удаляй данные клиента. Сохрани его в списке «потенциальных к возврату». Через 2 месяца отправь: «Мы скучаем. Вернитесь — скидка 30% на первый месяц».

Этот цикл даёт тебе 70–80% возвратов от отменённых подписок. Без него — ты теряешь клиентов навсегда.

Итог: что делать прямо сейчас

Если ты читаешь это — значит, ты уже на этапе запуска или уже имеешь продукт. Не жди «идеального момента». Сделай три шага:

  1. Создай Product в Stripe с названием «SaaS Pro — ежемесячно».
  2. Добавь Price: 990 RUB, monthly.
  3. Настрой вебхуки на invoice.payment_failed и customer.subscription.deleted.

Потом — включи Stripe Elements на странице оплаты. Не Checkout. Elements. Потому что в СНГ люди доверяют своему сайту. Потом — напиши одно письмо: «Ваш платёж не прошёл. Обновите карту.» — и отправляй его через 5 дней после первого провала.

Это всё. Никаких сложных настроек. Никаких «интеграций с CRM». Никаких «аналитики по отменам». Сначала — просто чтобы платёж работал. Потом — оптимизируй. Но сначала — чтобы люди платили.

Если ты сделаешь это — через месяц у тебя будет 20–30% больше удержания подписок. И ты перестанешь слышать: «Я не понял, как платить».

Информация в статье носит ознакомительный характер. Настройка платёжных систем требует проверки юридических и финансовых рисков в вашей юрисдикции. Перед запуском рекомендуется проконсультироваться с юристом или финансовым консультантом.

platejigid.ru — мир платежей и цифровых финансов