Когда мне пишут «нужна тильда подписка для курса» или «сделайте оплату каждый месяц на сайте», за этой фразой обычно прячутся две разные задачи. Первая - списывать деньги с карты клиента регулярно без его участия. Вторая - не пускать на закрытую страницу тех, кто не платил или перестал платить. Тильда сама по себе конструктор лендингов и магазинов, а не платформа для SaaS-биллинга, но платёжные интеграции в её настройках дают рабочую базу, поверх которой я обычно достраиваю логику доступа на обычном хостинге клиента.
По теме статьи
Готовое решение
Ограничение доставки по зонам на карте в корзине Tilda
Виджет доставки в шапке сайта + ограничение оформления в корзине по зонам на Яндекс.Карте.
от9 000 ₽
Кастомный скрипт
Когда стандартных блоков не хватает
Доработка сайтов на Тильде: скрипты для корзины, промокоды, зоны доставки, интеграции с CRM и Telegram. Простой скрипт от 3 000
от3 000 ₽
Что считать подпиской на Тильде и как это работает
Подписка распадается на два независимых механизма, и путать их не стоит. Рекуррентный платёж - это списание по сохранённой карте раз в период, которое выполняет платёжная система, а не сама Тильда. Ограничение доступа - это отдельная логика: страница или блок контента должны показываться только тем, у кого подписка активна на текущий момент. Тильда прекрасно принимает разовую оплату через форму и отправляет вебхук о заказе, а вот проверку «эта подписка ещё не истекла» приходится вести на своей стороне, потому что конструктор не хранит статус вашей подписки как отдельную сущность.
На практике такие задачи приходят от владельцев онлайн-курсов, закрытых клубов по подписке, сервисов с платной базой знаний или регулярной рассылкой отчётов. Формат в этих кейсах разный, но техническая начинка почти всегда одна и та же: платёжная система с рекуррентом, база данных подписчиков и точка, которая решает - пускать человека дальше или нет.
Рекуррентные платежи: какие платёжные системы это умеют
В настройках платёжных систем Тильды можно подключить ЮKassa, CloudPayments, Тинькофф Эквайринг (T‑Bank), Robokassa, Stripe и PayPal. Форма на сайте создаёт разовый платёж, но у ЮKassa и CloudPayments есть собственный API для рекуррентных списаний: при первой оплате провайдер сохраняет токен карты, а дальше именно ваш скрипт по расписанию обращается к API провайдера и инициирует повторное списание по этому токену. Тильда в этой цепочке отвечает только за первый платёж и оформление интерфейса оплаты, обращения к API за повторными списаниями и проверку статуса подписки конструктор не делает и делать не должен - это логика на стороне бизнеса.
Повторные списания я обычно реализую PHP-скриптом на обычном хостинге сайта: отдельный сервер под это не нужен, ежедневная задача по крону (или системный планировщик у хостера) проходит по таблице подписчиков, у кого подошёл день оплаты, и дергает API платёжной системы. Отдельная база вроде Postgres тут избыточна, обычной MySQL с таблицей подписчиков и датой следующего списания хватает с запасом.
Доступ по оплате: как закрыть страницу до подтверждения оплаты
Самый надёжный вариант - не полагаться на то, что страница просто «скрыта» в меню. Скрытая страница остаётся доступной по прямой ссылке, поэтому для платного контента я делаю страницу без индексации и без публичной ссылки в меню, а доступ к ней выдаю через уникальную ссылку с токеном, которая приходит клиенту после оплаты.
Схема такая: вебхук об оплате от ЮKassa, CloudPayments или T‑Bank приходит на мой PHP-обработчик, тот создаёт запись в MySQL с уникальным токеном и сроком действия, привязанным к периоду подписки, и отправляет клиенту письмо или сообщение в Telegram-бота со ссылкой вида /access?token=.... На самой странице в Тильде через Zero Block вставляется скрипт, который при загрузке страницы проверяет токен через этот же API-эндпоинт и уже по ответу показывает или прячет блок с материалами. Тильда отдаёт разметку и хостит саму страницу, а решение «пускать или нет» принимает мой сервер - это разделение снимает риск того, что кто-то просто найдёт прямую ссылку на закрытую страницу.
Для клубов и рассылок вместо ссылки на сайт часто удобнее выдавать доступ в закрытый Telegram-канал: бот на aiogram проверяет тот же токен и добавляет пользователя в канал или, наоборот, удаляет при истечении подписки.
Вебхуки, база подписчиков и напоминания о продлении
В таблице подписчиков у меня обычно есть поля вроде user_id, subscription_ends_at и payment_token, а на связку «один вебхук - одна обработка» ставится уникальный индекс, чтобы повторный вебхук от платёжной системы (они иногда дублируются) не продлил подписку дважды. Каждый входящий вебхук об успешном списании сдвигает subscription_ends_at на следующий период и логируется отдельной строкой - это нужно и для сверки с бухгалтерией, и для разбора спорных ситуаций с клиентом.
Напоминания о скором списании или об истечении подписки закрывает тот же крон-скрипт: раз в сутки проверяет, у кого подписка заканчивается через 3 дня, и отправляет уведомление в Telegram через бота или на почту. Если своего разработчика под рукой нет и городить PHP-скрипты не хочется, тот же сценарий - поймать вебхук, проверить дату, отправить напоминание - собирается в n8n без единой строчки кода: я делаю такую автоматизацию в n8n под конкретный набор триггеров и уведомлений. Стоит учитывать, что self-hosted n8n - это отдельный сервер, который надо обновлять и оплачивать помесячно, а облачная версия сервиса снимает это обслуживание с вас, но идёт с собственным тарифом провайдера.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Что происходит при отмене и просрочке оплаты
Когда повторное списание не проходит - карта заблокирована, закончился срок действия, недостаточно средств - я закладываю льготный период в 2-3 дня, в течение которого доступ ещё сохраняется, а скрипт делает 1-2 повторные попытки списания через API провайдера. Если списание так и не проходит, токен доступа помечается недействительным, а клиенту уходит уведомление с просьбой обновить способ оплаты.
Отмену подписки по инициативе клиента без готового личного кабинета обычно обрабатываю вручную через заявку в Telegram-боте или письмо: администратор помечает подписку как отменённую в базе, доступ при этом сохраняется до конца уже оплаченного периода, а не отключается в момент заявки - это ожидаемое поведение для любой подписной модели, и клиенты его понимают.
Сравнение способов организации подписки на Tilda
Выбор конкретной схемы зависит от того, сколько подписчиков ожидается и готовы ли вы поддерживать её вручную первое время.
| Способ | Что даёт | Когда достаточно |
|---|---|---|
| Только платёжная система с рекуррентом | Автоматическое списание, но без проверки доступа | Оплата курса без разграничения контента на сайте |
| Скрытая страница + токен доступа | Контент открывается только по действующей подписке | Закрытый раздел на сайте, курс, база материалов |
| Вебхук на сервер + Telegram-бот | Автовыдача и отзыв доступа в канал, напоминания | Клубная подписка, платный Telegram-канал |
| Комплексная интеграция с CRM | Подписчики видны менеджеру, сверка платежей, отчётность | Активная база от нескольких сотен подписчиков |
Стоимость эквайринга и комиссия платёжной системы зависят от тарифа конкретного банка или провайдера и от вашего оборота, а не от того, лендинг у вас или интернет-магазин - это уточняется напрямую в личном кабинете платёжной системы при подключении.
Простая доработка вроде кастомного скрипта проверки токена на странице у меня укладывается в кастомный скрипт для Tilda, от 3 000 ₽. Если нужна полная связка - вебхук, база подписчиков, CRM и уведомления - это уже комплексная интеграция для Tilda (CRM, эквайринг, СДЭК), от 40 000 ₽.
Условия и возможности Тильды меняются, поэтому перед запуском я уточняю их у самого сервиса.
Частые вопросы
Можно ли принимать регулярные платежи на Тильде без своего сервера?
Первый платёж и приём карты полностью закрывает сама платёжная система, подключённая в настройках Тильды. А вот повторные списания по расписанию и проверку, не истекла ли подписка, ведёт отдельный скрипт на вашем хостинге - без него рекуррент технически работает только на уровне «провайдер хранит токен карты», а автоматического списания по графику не будет.
Как ограничить доступ к странице только для тех, кто оплатил?
Страницу делают без индексации и без ссылки в публичном меню, а доступ выдают по уникальной ссылке с токеном, которая приходит после оплаты. Проверку токена на самой странице встраивают скриптом в Zero Block, который обращается к вашему серверу и решает, показывать контент или нет.
Что будет, если у клиента не спишется повторный платёж?
Обычно закладывается льготный период на 2-3 дня и одна-две повторные попытки списания через API платёжной системы. Если списание так и не проходит, доступ отключается, а клиенту приходит уведомление с просьбой обновить карту.
Сколько стоит настройка подписки на Тильде?
Зависит от объёма задачи. Точечная доработка вроде проверки токена на одной странице - это кастомный скрипт для Tilda, от 3 000 ₽. Полная схема с вебхуком, базой подписчиков, CRM и напоминаниями - комплексная интеграция для Tilda, от 40 000 ₽.