- Как настроить повторяющиеся платежи в Stripe для SaaS-продукта в СНГ: пошагово, без воды
- Что нужно настроить: три ключевых элемента
- Как настроить: пошагово
- Валюты: рубль — только рубль
- Способы сбора платежей: что выбрать
- Частые ошибки (и как их избежать)
- Что выбрать: сценарии
- Как лучше сделать: практические рекомендации
- Что делать, если платёж не прошёл
- Итог: что делать прямо сейчас
Как настроить повторяющиеся платежи в Stripe для SaaS-продукта в СНГ: пошагово, без воды
Если ты запускаешь SaaS-продукт для клиентов из России, Украины, Беларуси, Казахстана или других стран СНГ — ты уже понимаешь: люди не хотят вводить карту каждый месяц. Они хотят, чтобы всё работало автоматически. И если твой сервис не умеет брать деньги по расписанию — ты теряешь 30–50% потенциальных клиентов. Не потому что они не хотят платить. А потому что ты им создаёшь лишние препятствия.
Stripe — один из немногих платёжных шлюзов, который реально работает для СНГ. Но настроить повторяющиеся платежи (recurring billing) не так просто, как в документации. Многие делают ошибки, которые приводят к высокой отмене подписок, блокировкам карт и жалобам клиентов. Я покажу, как сделать это правильно — без лишних настроек, без сюрпризов и с учётом реальных условий наших пользователей.
Что нужно настроить: три ключевых элемента
В Stripe повторяющиеся платежи работают через три связанных объекта:
- Product — то, что ты продаёшь (например, «Pro-план на 990₽/мес»).
- Price — цена, частота и валюта (например, 990 рублей, ежемесячно).
- Subscription — связка клиента с ценой, с возможностью отмены, приостановки или смены тарифа.
Не путай их. Product — это логическая сущность. Price — это конкретная цена. Subscription — это активный договор между тобой и клиентом. Если ты настроишь только Price, но не привяжешь его к Product — Stripe не поймёт, что именно ты продаёшь. Если не создашь Subscription — клиент не будет платить автоматически.
Как настроить: пошагово
Вот что делать, если ты только начинаешь:
- Создай Product в панели Stripe → Products → Create Product. Назови его понятно: «SaaS Pro — ежемесячно». Не пиши «План 3» или «Premium». Клиенты не должны гадать, что это.
- Добавь Price к этому Product. Выбери валюту — рубль (RUB). Это важно. Даже если у тебя есть долларовые клиенты — в СНГ почти все платят в рублях. Доллары вызывают вопросы, конвертацию и страх перед курсом. Установи интервал: monthly. Сумму — например, 990. Не 999. Не 1000. 990 — психологически воспринимается как «дешевле», и это работает.
- Настрой вебхуки (webhooks). Это не опционально. Stripe будет слать тебе события: «платёж прошёл», «платёж провалился», «подписка отменена». Без этого ты не узнаешь, что клиенту отклонили карту, и не сможешь отправить письмо с просьбой обновить данные. Включи события:
invoice.payment_succeeded,invoice.payment_failed,customer.subscription.deleted. - Создавай Subscription через API — не через интерфейс. Даже если ты используешь Stripe Checkout, ты всё равно должен передать
price_idиcustomer_id. Не передавай просто сумму — передавай конкретный Price ID. Иначе ты рискуешь, что при изменении цены старые подписки начнут платить по новой — и клиенты будут злиться. - Не включай автоматическое обновление карт (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 — ты выносишь их на чужую страницу. А в СНГ люди боятся переходить по ссылкам. Они думают: «Это фишинг?». Если ты встроил форму в свой сайт — они чувствуют себя в безопасности.
Частые ошибки (и как их избежать)
- Не проверяешь статус подписки перед доступом к функциям. Клиент отменил подписку — но ты всё равно даёшь ему доступ. Через 2 дня он вспоминает, что у него ещё есть доступ, и пишет в поддержку: «Почему вы не вернули деньги?». Проверяй статус подписки
subscription.statusперед каждым запросом к API. Только еслиactive— даёшь доступ. - Отправляешь письма «Платёж не прошёл» сразу после первого провала. Stripe по умолчанию пытается повторить платёж 3 раза (через 1, 3, 5 дней). Если ты сразу пишешь клиенту, что «подписка отменена» — ты теряешь клиента. Жди 5 дней. И только после третьего провала — пиши: «Ваш платёж не прошёл три раза. Обновите карту, чтобы не потерять доступ».
- Используешь один Price для всех клиентов. Ты даёшь скидку 20% студентам? Не меняй цену в Price. Создай отдельный Price: «SaaS Pro — студенты, 790₽/мес». Иначе при смене цены все старые подписки начнут платить новую — и клиенты будут в шоке.
- Не настраиваешь вебхуки на обработку ошибок. Если клиент ввёл карту с неверным CVV — Stripe вернёт ошибку
card_declined. Ты должен поймать это и показать клиенту: «Неверный CVV. Проверьте код на карте». Не просто «платёж не прошёл». - Пытается использовать 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% провалов — это не «карта заблокирована», а «клиент просто забыл, что подписался». Или «карта закончилась, но он не в курсе».
Твой алгоритм действий:
- Stripe присылает событие
invoice.payment_failed. - Ты ждёшь 24 часа — Stripe сам попытается повторить платёж.
- Если снова провал — через 48 часов отправляешь письмо: «Ваш платёж не прошёл. Обновите карту в личном кабинете.»
- Если ещё 3 дня — ничего не изменилось — отправляешь второе письмо: «Ваша подписка будет приостановлена через 48 часов. Если хотите продолжить — обновите карту.»
- Если после этого — ничего — отменяешь подписку. Но не удаляй данные клиента. Сохрани его в списке «потенциальных к возврату». Через 2 месяца отправь: «Мы скучаем. Вернитесь — скидка 30% на первый месяц».
Этот цикл даёт тебе 70–80% возвратов от отменённых подписок. Без него — ты теряешь клиентов навсегда.
Итог: что делать прямо сейчас
Если ты читаешь это — значит, ты уже на этапе запуска или уже имеешь продукт. Не жди «идеального момента». Сделай три шага:
- Создай Product в Stripe с названием «SaaS Pro — ежемесячно».
- Добавь Price: 990 RUB, monthly.
- Настрой вебхуки на
invoice.payment_failedиcustomer.subscription.deleted.
Потом — включи Stripe Elements на странице оплаты. Не Checkout. Elements. Потому что в СНГ люди доверяют своему сайту. Потом — напиши одно письмо: «Ваш платёж не прошёл. Обновите карту.» — и отправляй его через 5 дней после первого провала.
Это всё. Никаких сложных настроек. Никаких «интеграций с CRM». Никаких «аналитики по отменам». Сначала — просто чтобы платёж работал. Потом — оптимизируй. Но сначала — чтобы люди платили.
Если ты сделаешь это — через месяц у тебя будет 20–30% больше удержания подписок. И ты перестанешь слышать: «Я не понял, как платить».
Информация в статье носит ознакомительный характер. Настройка платёжных систем требует проверки юридических и финансовых рисков в вашей юрисдикции. Перед запуском рекомендуется проконсультироваться с юристом или финансовым консультантом.



