Настройка подписочных платежей на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка подписочных платежей на 1С-Битрикс
Простой
~1 день
Часто задаваемые вопросы

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

Этапы разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1360
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    948
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    694
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    832
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    732
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1075

Настройка подписочных платежей на 1С-Битрикс

Подписочная монетизация — бизнес-логика поверх рекуррентных платежей. В Битрикс нет нативного модуля подписок, реализация всегда кастомная. Сложность не в самом списании (оно решается за 1–2 дня), а в управлении жизненным циклом: смена тарифа, триальный период, отмена с сохранением доступа до конца периода, retry при неудачном платеже.

Мы разрабатываем такие решения для клиентов уже более семи лет. За это время столкнулись с типичными проблемами: несовместимость API платежных шлюзов, дублирование платежей, потеря данных при сбоях cron, сложность обработки частичных возвратов. Наш опыт показывает, что без продуманной архитектуры подписочный бизнес теряет до 20% выручки из-за неудачных списаний и утечки клиентов. Например, при среднем чеке 10 000 руб./мес и 1000 активных подписчиков отток в 5% из-за ошибок биллинга обходится в 500 000 руб./мес. Правильная реализация спасает эти деньги.

Проблемы, которые решаем

Гибкое управление тарифами

Готовые модули часто не поддерживают сложные сценарии: триалы, фримиум, семейные планы. Мы создаём кастомную логику, адаптированную под ваш бизнес.

Надёжный биллинг

Планировщик с retry-механизмом минимизирует потери от неудачных платежей. Каждая попытка логируется, при исчерпании попыток подписка приостанавливается, а клиент получает уведомление.

Интеграция с эквайрингом

Требуется корректная настройка rebill_id через API Тинькофф, Сбера или ЮKassa. Мы обеспечиваем бесшовную передачу токенов и обработку холдов.

Как мы это делаем

Стек: PHP 8.1+, Битрикс (инфоблоки v2.0, ORM), MariaDB, cron, REST API. Для хранения тарифов и подписок используем отдельные таблицы (см. структуру ниже). Кэширование тегированное — кеш сбрасывается при изменении подписки. Все критические операции обёрнуты в транзакции.

CREATE TABLE b_subscription_plans (
    id           SERIAL PRIMARY KEY,
    code         VARCHAR(32)   UNIQUE NOT NULL,
    name         VARCHAR(128),
    price        DECIMAL(10,2),
    currency     CHAR(3)       DEFAULT 'RUB',
    period_days  INT           NOT NULL,
    trial_days   INT           DEFAULT 0,
    is_active    BOOLEAN       DEFAULT TRUE
);

CREATE TABLE b_user_subscriptions (
    id                   SERIAL PRIMARY KEY,
    user_id              INT           NOT NULL,
    plan_id              INT           REFERENCES b_subscription_plans(id),
    rebill_id            VARCHAR(128),
    status               VARCHAR(16)   DEFAULT 'trialing',
    trial_ends_at        TIMESTAMP,
    period_start         TIMESTAMP,
    period_end           TIMESTAMP,
    cancel_at_period_end BOOLEAN       DEFAULT FALSE,
    retry_count          INT           DEFAULT 0,
    last_payment_at      TIMESTAMP,
    created_at           TIMESTAMP     DEFAULT NOW()
);

Статусы: trialing → active → past_due → paused / cancelled / expired.

Пример кода биллинг-планировщика:

// /local/cron/subscription_billing.php
// Cron: 0 9 * * * php /var/www/shop/local/cron/subscription_billing.php

define('NO_KEEP_STATISTIC', true);
require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';

$db = Bitrix\Main\Application::getConnection();

$due = $db->query("
    SELECT s.id, s.user_id, s.rebill_id, p.price, p.currency, p.period_days, u.EMAIL
    FROM b_user_subscriptions s
    JOIN b_subscription_plans p ON p.id = s.plan_id
    JOIN b_users u ON u.ID = s.user_id
    WHERE s.status = 'active'
      AND s.cancel_at_period_end = FALSE
      AND DATE(s.period_end) = CURRENT_DATE
");

while ($row = $due->fetch()) {
    try {
        $success = chargeRebill($row['rebill_id'], $row['price'], $row['currency']);

        if ($success) {
            $db->query("UPDATE b_user_subscriptions SET
                period_start    = period_end,
                period_end      = period_end + INTERVAL '" . (int)$row['period_days'] . " days',
                retry_count     = 0,
                last_payment_at = NOW()
                WHERE id = " . (int)$row['id']);

            createBitrixOrderForSubscription($row);
        } else {
            $db->query("UPDATE b_user_subscriptions
                SET status = 'past_due', retry_count = retry_count + 1
                WHERE id = " . (int)$row['id']);
            sendPaymentFailedNotification($row['EMAIL']);
        }
    } catch (\Exception $e) {
        logError('billing', $row['id'], $e->getMessage());
    }
}

Как управлять жизненным циклом подписки?

После успешного списания обновляются даты периода и сбрасывается счётчик retry. При отказе в списании статус переводится в past_due, запускается цепочка повторных попыток. Если клиент отменяет подписку, мы сохраняем доступ до конца оплаченного периода (cancel_at_period_end = TRUE). Планировщик не будет создавать новый платёж по такой подписке.

Пример функции проверки активной подписки:

function userHasSubscription(int $userId, string $planCode = null): bool
{
    $db = Bitrix\Main\Application::getConnection();

    $sql = "SELECT COUNT(1) FROM b_user_subscriptions s
            JOIN b_subscription_plans p ON p.id = s.plan_id
            WHERE s.user_id = " . (int)$userId . "
              AND s.status IN ('active', 'trialing')
              AND s.period_end > NOW()";

    if ($planCode) {
        $sql .= " AND p.code = '" . $db->getSqlHelper()->forSql($planCode) . "'";
    }

    return (int)$db->queryScalar($sql) > 0;
}

// В шаблоне закрытого раздела
if (!userHasSubscription($USER->GetID(), 'premium')) {
    LocalRedirect('/subscribe/?redirect=' . urlencode($APPLICATION->GetCurPage()));
}

Почему кастомная реализация лучше готовых решений?

Готовые модули (например, из Маркетплейса) часто ограничены стандартными сценариями: они не позволяют гибко настроить retry, пропорциональное биллинг, или интеграцию с уникальной CRM. Кастомное решение даёт полный контроль над логикой — вы сами решаете, когда списывать, какие уведомления отправлять, как обрабатывать возвраты. Кроме того, мы можем интегрировать подписочную систему с любым эквайрингом: Тинькофф, Сбер, ЮKassa, АТОЛ.

Характеристика Готовый модуль Кастомное решение
Гибкость тарифов Ограничена Полная свобода
Retry-логика Базовая Настраиваемая цепочка
Интеграция с CRM Отсутствует Любая CRM
Пропорциональный биллинг Нет Есть

Кейс: SaaS-платформа, переход на подписки

Наш клиент — B2B-сервис автоматизации отчётности на Битрикс. До этого — единовременные лицензии. Задача: перевести клиентов на ежемесячную подписку с автоматическим продлением. Сделали: три тарифных плана, биллинг через Тинькофф с rebill_id, отдельный ЛК управления подпиской, email-уведомления за 3 дня до списания, retry через 1/3/7 дней. Интеграция с системой доступов — через проверку userHasSubscription() в каждом защищённом компоненте. Результат: отток клиентов снизился на 15%, регулярный доход вырос в 2 раза.

Что входит в работу

  • Анализ бизнес-требований и проектирование архитектуры.
  • Создание БД и модели данных.
  • Разработка API для управления подписками (создание, смена, отмена).
  • Интеграция с эквайрингом (Тинькофф, Сбер, ЮKassa).
  • Настройка cron-планировщиков и retry-логики.
  • Тестирование всех сценариев и нагрузочное тестирование.
  • Документация по API и администрированию.
  • Обучение ваших разработчиков.
  • Гарантийная поддержка 3 месяца.

Процесс работы

  1. Аналитика — обсуждаем тарифную сетку, сценарии подписок, варианты оплаты.
  2. Проектирование — создаём схему БД, API, документацию.
  3. Разработка — пишем код на PHP, версионируем через Git.
  4. Тестирование — unit-тесты, интеграционные сценарии, проверка на боевых данных.
  5. Деплой — настройка cron, миграции, нагрузочное тестирование.
  6. Поддержка — мониторинг, доработки, 24/7 на связи.

Сроки ориентировочно

Задача Срок
Структура БД и бизнес-модели 1–2 дня
Страница выбора плана и оформления 2–3 дня
Биллинг-планировщик 1–2 дня
ЛК управления подпиской 1–2 дня
Уведомления и retry 1 день

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

Как избежать типичных ошибок при подключении платёжных систем на 1С-Битрикс

Самая частая ошибка при интеграции — забыть про callback. Покупатель оплатил заказ, деньги списались, а статус в b_sale_order не обновился: менеджер видит «Ожидание оплаты» и начинает звонить клиенту. Причина — неправильный URL в настройках шлюза или обработчик, падающий с 500 при нестандартной структуре ответа. Мы предлагаем услуги по подключению платёжных систем на 1С-Битрикс с полным тестированием всех сценариев: успешная оплата, отказ, таймаут, частичный возврат, повторный callback.

Почему callback-уведомления критичны?

Каждый платёжный шлюз присылает уведомление на ваш сервер. Если обработчик не гарантирует идемпотентность — двойной вызов приведёт к двойному списанию. Мы всегда реализуем проверку по ID уведомления (external_id) и блокировку повторной обработки в \Bitrix\Sale\Order. Также критично настроить URL callback в личном кабинете агрегатора — /bitrix/tools/sale_ps_result.php для штатного модуля. Если используете кастомный обработчик, проверяем, что он отдаёт HTTP 200 даже при ошибке параметров (шлюз не должен повторять запрос бесконечно).

Пример простого обработчика callback с проверкой подписи
use Bitrix\Sale\Order;
use Bitrix\Main\Application;

// Получаем данные уведомления
$data = Application::getInstance()->getContext()->getRequest()->toArray();
// Проверяем подпись (зависит от агрегатора)
if (!checkSignature($data, 'SECRET_KEY')) {
    die('FAIL');
}
// Ищем заказ по внешнему ID
$order = Order::loadByExternalId((int)$data['order_number']);
if ($order && $order->isPaid() === false) {
    $order->setField('PAYED', 'Y');
    $order->save();
}
echo 'OK';

Как выбрать платёжный агрегатор для 1С-Битрикс?

Выбор агрегатора зависит от географии покупателей, среднего чека и потребности в рассрочке. Для России базовый набор — ЮKassa (все основные методы, фискализация из коробки) и CloudPayments (виджет на странице без редиректа, Apple Pay). Если работаете с крупными корпоративными клиентами — добавьте Сбербанк (SberPay, СБП). Для международных продаж — Stripe или PayPal. Мы часто используем двухуровневую схему: основной агрегатор + резервный (автопереключение при падении).

Какие платёжные агрегаторы и способы оплаты мы используем

ЮKassa

Один договор — все основные способы: карты Visa/MasterCard/МИР, ЮMoney, SberPay, интернет-банки, рассрочка. Фискализация по 54-ФЗ из коробки (через модуль sale). Штатный обработчик /bitrix/modules/sale/handlers/paysystem/yandexpay/ покрывает базовые сценарии. Для холдирования (двухстадийная оплата), подписок или сплит-платежей — кастомная интеграция через YooKassa API v3. Callback настраиваем на /bitrix/tools/sale_ps_result.php, парсим notification и обновляем \Bitrix\Sale\Order через setField('PAYED', 'Y').

CloudPayments

Заточен на конверсию: виджет оплаты прямо на странице чекаута, без редиректа на внешний домен. Покупатель не уходит с сайта — процент отказов на этапе оплаты падает. Поддерживает рекуррентные платежи (токенизация карты через cryptogram), Apple Pay и Google Pay. 3D Secure с интеллектуальной маршрутизацией — запрашивается только при высоком риске фрода. Интеграция с Битрикс — через REST API CloudPayments и кастомный обработчик в модуле sale.

Тинькофф Оплата

API-интеграция через TinkoffPaymentAPI (готовый модуль или ручная реализация). QR-код для оплаты через приложение, рассрочка «Тинькофф Кредит» — критично для дорогих товаров. Частичные возвраты через метод Cancel — без звонков в банк, всё из админки Битрикс.

Сбербанк (SberPay и СБП)

SberPay — оплата по push-уведомлению или QR, СБП — комиссия 0.4–0.7% против 1.5–2.5% по картам. На объёме это ощутимая экономия. Холдирование через API registerPreAuth / deposit. Учитываем, что для SberPay требуется подписание отдельного договора с банком.

Apple Pay и Google Pay

Оплата в два касания, без ввода данных карты. Подключаются через агрегатор (ЮKassa, CloudPayments, Тинькофф). Важные нюансы:

  • Apple Pay требует верификации домена: файл apple-developer-merchantid-domain-association в /.well-known/. Без него кнопка не появится.
  • Размещение кнопок строго по гайдлайнам Apple и Google — иначе отказ в ревью.
  • Фоллбэк на стандартную форму оплаты, если устройство не поддерживает бесконтактную оплату.
Способ оплаты Устройства Браузеры
Apple Pay iPhone, iPad, Mac Safari
Google Pay Android, Chrome Chrome, Firefox, Edge
Samsung Pay Samsung Galaxy Samsung Internet

Рассрочка, BNPL и работа с 54-ФЗ

Если средний чек от 30 000 ₽ и конверсия проседает — рассрочка снимает ценовой барьер. Мы подключаем:

  • Тинькофф Рассрочка (3–24 месяца)
  • Покупай со Сбером
  • Мокка / Долями — BNPL: 4 платежа, 0% для покупателя

Интеграция: виджет с расчётом ежемесячного платежа на карточке товара («от 2 500 ₽/мес»), передача данных заказа в банк через API, обработка статусов (одобрение, отказ, ожидание документов) в обработчиках OnSaleStatusOrder.

Фискализация по 54-ФЗ — обязательное требование. Штраф за отсутствие чека — до 100% от суммы расчёта. В соответствии с Федеральным законом № 54-ФЗ кассовый чек должен быть отправлен покупателю в электронной форме. Подключаем АТОЛ Онлайн, Orange Data, Модуль.Касса, Эвотор, Штрих-М. Настройка в Битрикс — раздел «Кассы» в модуле sale:

  • Ставка НДС, предмет и способ расчёта — ошибка в любом поле может привести к штрафу при проверке.
  • Чеки при предоплате и частичной оплате (два чека: при оплате и при отгрузке).
  • Чеки возврата при отмене через \Bitrix\Sale\Cashbox\Cashbox::addChecks().
  • Мониторинг: если чек не ушёл — алерт менеджеру.

При торговле обувью, одеждой, парфюмерией обязательна передача кодов маркировки в чеке. Интеграция с «Честный ЗНАК», сканирование DataMatrix при сборке заказа, автоматический вывод из оборота при продаже через \Bitrix\Catalog\Product\Marking.

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

Возвраты

Полный и частичный возврат без звонков в банк — через API агрегатора (refund / cancel). Чек возврата формируется автоматически, обновляется статус заказа, пересчитывается сумма, уведомляется покупатель. Сроки: электронные кошельки и СБП — 1–3 дня, банковская карта — до 30 рабочих дней (зависит от банка-эмитента).

Мультивалюта

Типы цен в b_catalog_price для каждой валюты, курсы через API ЦБ (\Bitrix\Currency\CurrencyManager::updateCBRFRates()) или ручной ввод. Конвертация на уровне каталога — покупатель видит цены в своей валюте. Для приёма долларов/евро подключаем Stripe, PayPal. Учитываем комиссии за конвертацию при расчёте маржинальности.

Безопасность

Данные карт обрабатываются на стороне сертифицированного шлюза (PCI DSS) — номер карты никогда не проходит через ваш сервер. Антифрод на уровне агрегатора. Логирование всех событий в b_sale_order_change для аудита. Мониторинг аномалий: скачок транзакций, нетипичная география — алерт.

Как мы работаем и ориентировочные сроки

  1. Анализ — какие способы оплаты нужны, рынки, объём транзакций, текущий агрегатор.
  2. Подбор решений — иногда два агрегатора лучше одного: ЮKassa как основной, CloudPayments как резерв — при падении одного трафик уходит на второй.
  3. Интеграция — тестируем каждый сценарий: успешная оплата, отказ 3DS, таймаут шлюза, двойной callback, частичный возврат.
  4. Фискализация — онлайн-касса, проверка корректности чеков на тестовых заказах.
  5. Мониторинг — алерты при сбоях шлюза, дашборд конверсии на этапе оплаты.
Задача Ориентировочный срок
Подключение одной платёжной системы 2–5 дней
Комплексная настройка платежей (несколько агрегаторов) 1–2 недели
Подключение онлайн-кассы (54-ФЗ) 3–5 дней
Интеграция рассрочки 3–5 дней
Настройка мультивалютности 1 неделя
Полная платёжная инфраструктура 3–5 недель

Что входит в работу

  • Полная настройка выбранных платёжных систем в 1С-Битрикс: модули, обработчики, callback, тестирование.
  • Документация по интеграции (схема работы шлюзов, описание обработчиков, логи).
  • Обучение вашего менеджера работе с платёжными модулями и возвратами.
  • Техническая поддержка на этапе запуска и первые 2 недели эксплуатации.
  • Мониторинг — настраиваем алерты на ошибки и падение конверсии.

Все работы выполняются сертифицированными разработчиками 1С-Битрикс. Гарантируем работоспособность каждого сценария. Для быстрой оценки вашего проекта получите консультацию — просто оставьте заявку на сайте. Закажите интеграцию платёжных систем под ключ с фискализацией и защитой данных. Свяжитесь с нами, чтобы подобрать оптимальное решение для вашего бизнеса — мы поможем с выбором агрегатора и реализуем полный цикл интеграции.