Разработка системы подписок (subscription) на 1С-Битрикс

На Битрикс нет встроенного механизма регулярных платежей. Каждый проект подписок требует кастомной разработки — от проектирования таблиц до интеграции с платёжными шлюзами. За 5+ лет мы реализовали более 30 подписочных проектов: от доступа к закрытому контенту до автоматической доставки товаров. Нап
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка системы подписок (subscription) на 1С-Битрикс
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    764
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    810
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1166

На Битрикс нет встроенного механизма регулярных платежей. Каждый проект подписок требует кастомной разработки — от проектирования таблиц до интеграции с платёжными шлюзами. За 5+ лет мы реализовали более 30 подписочных проектов: от доступа к закрытому контенту до автоматической доставки товаров. Например, для интернет-магазина косметики построили систему ежемесячных подписок на наборы. Она обрабатывает 5 000 активных подписок с автосписанием через ЮKassa, успешность списаний — 95%+. Подписка — бизнес-модель, при которой клиент регулярно платит за продукт или услугу. Если вы столкнулись с нехваткой функционала — вы не одни. Типовые решения не дают гибкости: нужно хранить статусы, управлять периодами, обрабатывать отмены. Мы предлагаем готовую архитектуру на базе ORM Битрикс, которая закрывает эти задачи.

Какие типы подписок бывают на Битрикс?

Прежде чем проектировать, важно понять бизнес-модель. Выделяют три основных типа:

Тип подписки Описание Техническая реализация
Доступ к контенту Платный раздел, закрытые материалы Группы пользователей + ограничение доступа
Товарная подписка Регулярная доставка товаров Автоматическое создание заказов
Сервисная подписка SaaS, лицензия, техподдержка Статус аккаунта + автопродление

Все три типа имеют общее: периодическое списание денег и управление статусом доступа.

Архитектура хранения данных и агенты

Ядро системы — таблица подписок. Создаётся через ORM Битрикс (наследование от \Bitrix\Main\ORM\Data\DataManager). Новая архитектура на ORM в 1.5 раза быстрее в разработке по сравнению с прямыми SQL-запросами.

class SubscriptionTable extends DataManager { public static function getTableName(): string { return 'b_local_subscription'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('USER_ID', ['required' => true]), new IntegerField('PLAN_ID', ['required' => true]), new EnumField('STATUS', ['values' => ['TRIAL', 'ACTIVE', 'PAST_DUE', 'CANCELLED', 'EXPIRED']]), new DatetimeField('CURRENT_PERIOD_START'), new DatetimeField('CURRENT_PERIOD_END'), new DatetimeField('TRIAL_END'), new StringField('PAYMENT_TOKEN'), new IntegerField('PAY_SYSTEM_ID'), new StringField('CANCEL_REASON'), new DatetimeField('CANCELLED_AT'), new DatetimeField('CREATED_AT'), ]; } } class SubscriptionPlanTable extends DataManager { // ID, NAME, PRICE, CURRENCY, PERIOD_DAYS, TRIAL_DAYS, // IBLOCK_SECTION_IDS, FEATURES (JSON) } 

Для обработки подписок каждый день запускается cron-скрипт — агент. Он находит подписки с истекшим периодом и пытается списать средства:

$expiring = SubscriptionTable::getList([ 'filter' => [ 'STATUS' => ['ACTIVE', 'PAST_DUE'], '<=CURRENT_PERIOD_END' => new DateTime(), ] ])->fetchAll(); foreach ($expiring as $sub) { try { $result = chargeSubscription($sub); if ($result->isSuccess()) { SubscriptionTable::update($sub['ID'], [ 'STATUS' => 'ACTIVE', 'CURRENT_PERIOD_START' => new DateTime(), 'CURRENT_PERIOD_END' => (new DateTime())->modify('+' . $planPeriodDays . ' days'), ]); } else { handlePaymentFailure($sub); } } catch (\Exception $e) { logError($e, $sub); } } 

Как настроить рекуррентные платежи?

Самая сложная часть — автоматическое списание. Мы подключаем ЮKassa или CloudPayments — обе поддерживают сохранение карты и повторные платежи через API. Для выбора сравните характеристики:

Параметр ЮKassa CloudPayments
Простота интеграции Высокая Средняя
Гибкость настройки ошибок Базовая Расширенная
Комиссия за успешный платёж 2.5-3.5% 2.3-3.2%

Процесс:

  1. Первый платёж — обычная оплата, получаем payment_method_id.
  2. Сохраняем токен в SubscriptionTable.PAYMENT_TOKEN.
  3. При наступлении CURRENT_PERIOD_END вызываем API с токеном.
$payment = new \YooKassa\Client(); $payment->setAuth($shopId, $secretKey); $response = $payment->createPayment([ 'amount' => ['value' => $plan->getPrice(), 'currency' => 'RUB'], 'payment_method_id' => $subscription->getPaymentToken(), 'capture' => true, 'description' => 'Подписка ' . $plan->getName() . ' #' . $subscription->getId(), ]); 
Подробнее об обработке ошибок списания

Дополнительно реализуем обработку неуспешных списаний с эскалацией: после 3 неудачных попыток подписка переводится в PAST_DUE, клиенту отправляется уведомление. Это снижает риск неожиданной блокировки.

Как управлять доступом по подписке?

Для подписок типа «доступ к контенту» используем группы пользователей Битрикс. Каждому плану — отдельная группа. При активации добавляем пользователя, при истечении удаляем. Права на инфоблоки настраиваются через права групп. Для товарных подписок — автоматическое создание заказов через корзину. Решение масштабируется до 10 000 активных подписок без просадки производительности.

CUser::SetUserGroup($userId, array_merge( CUser::GetUserGroup($userId), [$plan->getGroupId()] )); 

Управление подписками: личный кабинет и уведомления

Минимальный функционал страницы /personal/subscription/:

  • Текущий план и статус.
  • Дата следующего списания и сумма.
  • История платежей.
  • Кнопка «Отменить» (с опциональным вопросом о причине).
  • Смена плана (апгрейд/даунгрейд).
  • Обновление платёжных данных.

При отмене подписки доступ сохраняется до конца оплаченного периода — клиент получает то, за что заплатил. После истечения периода он удаляется из группы доступа. Статус меняется на CANCELLED, затем EXPIRED.

Обязательные почтовые события:

  • SUBSCRIPTION_CREATED — подтверждение подписки.
  • SUBSCRIPTION_PAYMENT_SUCCESS — успешное списание.
  • SUBSCRIPTION_PAYMENT_FAILED — ошибка списания.
  • SUBSCRIPTION_TRIAL_ENDING — за 1-3 дня до конца трайла.
  • SUBSCRIPTION_CANCELLED — подтверждение отмены.
  • SUBSCRIPTION_EXPIRED — доступ закрыт.

Триальный период

При создании подписки с триалом:

$trialEnd = (new DateTime())->modify('+' . $plan->getTrialDays() . ' days'); SubscriptionTable::add([ 'USER_ID' => $userId, 'PLAN_ID' => $planId, 'STATUS' => 'TRIAL', 'TRIAL_END' => $trialEnd, 'CURRENT_PERIOD_END' => $trialEnd, ]); 

Агент за 1 день до окончания трайла уведомляет пользователя. В день окончания — попытка первого списания. Если карта не привязана — подписка переводится в EXPIRED.

Что входит в разработку системы подписок

  • Проектирование архитектуры БД и бизнес-логики.
  • Реализация ORM-сущностей и агентов.
  • Интеграция с платёжной системой (ЮKassa / CloudPayments).
  • Настройка прав доступа и групп пользователей.
  • Разработка личного кабинета (/personal/subscription/).
  • Конфигурация почтовых событий.
  • Документация и обучение администраторов.
  • Пост-релизная поддержка 30 дней.

Сроки и стоимость

Вариант Состав Срок
Без рекуррента Подписка с ручной оплатой, управление доступом 5-7 дней
С рекуррентными платежами Автосписание через ЮKassa или CloudPayments 10-14 дней
Полная платформа Несколько планов, трайл, ЛК, аналитика 15-20 дней

Стоимость рассчитывается индивидуально — зависит от сложности бизнес-логики и количества интеграций. Оставьте заявку — мы оценим ваш проект за 1 рабочий день.

Почему стоит работать с нами

  • Использование готового модуля сокращает время разработки на 40% по сравнению с типовыми решениями.
  • Глубокое понимание ограничений Битрикс и способов их обхода.
  • Более 30 подписочных проектов в портфолио.

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