Настройка единой программы лояльности онлайн и оффлайн в 1С-Битрикс
Мы сталкивались с ситуацией: клиент накопил 500 бонусов на сайте, приходит в магазин — кассир их не видит. Или покупка в магазине не начисляет баллы на онлайн-аккаунт. Разрыв между онлайн и оффлайн программой лояльности — это не только UX-проблема, но и прямые потери повторных продаж. Мы настраиваем единую систему лояльности под ключ: интеграция сайта и касс, синхронизация бонусов в реальном времени, полная прозрачность для клиента.
Как устроена лояльность в Битрикс
Модуль sale реализует дисконтную систему через b_sale_user_discount (персональные скидки) и бонусную систему через b_sale_discount (правила корзины). Для полноценной программы лояльности с накопительными баллами требуется либо отдельный модуль, либо интеграция с внешней системой. В Битрикс24 есть CRM-модуль с бонусами (b_crm_loyalty_bonus_transaction), но для интернет-магазина без Битрикс24 чаще применяется либо модуль marketingcrm, либо собственная таблица транзакций. По нашему опыту, кастомная реализация даёт наибольшую гибкость и надёжность — вы не привязаны к ограничениям типового модуля.
Структура хранения бонусов: таблицы и транзакции
Минимальная структура для единой программы:
CREATE TABLE bl_loyalty_account (
id SERIAL PRIMARY KEY,
user_id INT UNIQUE, -- b_user.ID (онлайн)
card_number VARCHAR(20) UNIQUE, -- номер карты для оффлайн
balance NUMERIC(10,2) DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE bl_loyalty_transaction (
id SERIAL PRIMARY KEY,
account_id INT NOT NULL REFERENCES bl_loyalty_account(id),
amount NUMERIC(10,2) NOT NULL, -- положительное=начисление, отрицательное=списание
type VARCHAR(20) NOT NULL, -- 'earn_online', 'earn_offline', 'spend', 'expire'
order_id INT, -- b_sale_order.ID или внешний ID оффлайн-чека
source VARCHAR(20) NOT NULL, -- 'web', 'pos', 'mobile'
created_at TIMESTAMP DEFAULT NOW()
);
Транзакционная модель с историей — единственный надёжный способ хранить бонусы. Никогда не обновляйте balance напрямую без записи транзакции. balance — это либо денормализованный агрегат (обновляется триггером БД), либо считается как SUM(amount) по таблице транзакций. Последний подход безопаснее, но медленнее при частых запросах баланса.
Как идентифицировать клиента на оффлайн-кассе?
Ключевая задача: кассир должен найти аккаунт клиента. Способы идентификации:
- Номер карты лояльности (физическая карта или штрихкод в мобильном приложении)
- Номер телефона (самый распространённый)
- QR-код с токеном (генерируется в личном кабинете сайта)
При идентификации по телефону кассовое ПО отправляет запрос к API Битрикс:
// /local/ajax/loyalty/find-account.php
$phone = normalizePhone($_POST['phone']);
$bitrixUser = \CUser::GetList([], ['PERSONAL_PHONE' => $phone])->Fetch();
if ($bitrixUser) {
$account = getLoyaltyAccount($bitrixUser['ID']);
echo json_encode(['balance' => $account['balance'], 'account_id' => $account['id']]);
}
Начисление бонусов при онлайн-заказе
Обработчик смены статуса заказа — после доставки/завершения:
AddEventHandler('sale', 'OnSaleStatusOrderChange', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$status = $order->getField('STATUS_ID');
if ($status !== 'F') return; // Только завершённые заказы
$userId = $order->getUserId();
$bonus = round($order->getPrice() * BONUS_RATE); // BONUS_RATE = 0.05 (5%)
addLoyaltyTransaction($userId, $bonus, 'earn_online', $order->getId(), 'web');
});
Списание бонусов при онлайн-оплате
Бонусы применяются через правило корзины или через кастомный платёжный метод. Правило корзины (b_sale_discount) может давать скидку фиксированной суммой. Для более гибкой схемы — собственный «платёжный метод» типа «Оплата бонусами», который при проведении заказа списывает транзакцию из bl_loyalty_transaction.
Почему транзакционное списание критически важно?
Оффлайн-касса вызывает три endpoint:
-
GET /loyalty/balance?phone=... — проверить баланс
-
POST /loyalty/spend — списать бонусы при продаже (должен быть транзакционным: начало продажи → резервирование → подтверждение)
-
POST /loyalty/earn — начислить бонусы после продажи
Резервирование при списании — критически важный шаг. Без него два параллельных запроса от разных касс могут одновременно прочитать баланс 500 бонусов и дважды списать по 500, уйдя в минус. Резервирование через SELECT ... FOR UPDATE в PostgreSQL или через строгое UPDATE с проверкой результата:
UPDATE bl_loyalty_account
SET balance = balance - :amount
WHERE id = :account_id AND balance >= :amount
RETURNING balance;
-- Если обновлено 0 строк — недостаточно бонусов
Этот подход надёжнее использования блокировок на уровне приложения.
Сравнение подходов: кастомная таблица vs модуль Битрикс
| Критерий |
Кастомная реализация |
Модуль marketingcrm |
Битрикс24 CRM |
| Гибкость |
Полная |
Ограниченная |
Средняя |
| Производительность |
Высокая |
Средняя |
Средняя |
| Сложность интеграции с кассой |
Средняя |
Низкая |
Низкая |
| Поддержка оффлайн-транзакций |
Да |
Ограниченно |
Да |
| Стоимость лицензии |
Бесплатно |
Входит в редакцию |
Требует Битрикс24 |
Кастомная таблица проигрывает модулям по скорости внедрения, но в 2-3 раза надёжнее при высоких нагрузках и нестандартных бизнес-логиках.
Что входит в работу
- Проектирование структуры таблиц
bl_loyalty_account и bl_loyalty_transaction
- Разработка REST API для кассовых систем (баланс, начисление, списание)
- Создание обработчиков событий
OnSaleStatusOrderChange для онлайн-начислений
- Механизм идентификации клиента по телефону/карте
- Транзакционное списание с защитой от race condition
- Административный интерфейс для просмотра и отмены транзакций
- Документация по API и инструкция для кассиров
- Тестирование и гарантия 30 дней
Сроки и бюджет
Настройка единой программы лояльности занимает от 5 до 15 рабочих дней в зависимости от сложности (количество касс, необходимость интеграции с 1С, требования к отчётности). Стоимость рассчитывается индивидуально после аудита текущей системы. Оценим ваш проект за 1 день.
Типичные ошибки при настройке
- Обновление баланса напрямую без транзакции — потеря данных при сбое.
- Отсутствие блокировок при списании — двойное списание.
- Игнорирование API-логирования — сложно отлаживать.
- Использование только модуля marketingcrm для оффлайн — не поддерживает резервирование.
Избежать этих ошибок помогает опыт — мы реализовали более 30 проектов по лояльности на Битрикс, включая сети с 50+ кассами.
Свяжитесь с нами для консультации: расскажем, как объединить онлайн и оффлайн лояльность в вашем бизнесе.
Что включает профессиональная установка 1С-Битрикс
Мы начинаем установку 1С-Битрикс с проверки innodb_buffer_pool_size. Дефолтное значение MySQL (128 МБ) — приговор для интернет-магазина с каталогом на 10 000+ товаров. Мы ставим 70–80% от доступной RAM на выделенном сервере, 50% на VPS. Одна эта настройка ускоряет сайт в 2–3 раза по сравнению с дефолтом. Оценим ваш проект за один день — получите консультацию. Обращайтесь, чтобы заказать установку под ключ с гарантией производительности.
Как выбрать хостинг и редакцию для установки 1С-Битрикс?
BitrixVM — виртуальная машина с предустановленным стеком: nginx + Apache, PHP-FPM, MySQL/MariaDB, Sphinx, Push‑сервер. Для VPS — лучший старт. Всё уже сконфигурировано под Битрикс, включая OPcache, логротацию и firewall. Управление через веб‑панель на порту 8890.
VPS/VDS — золотая середина. Минимальная конфигурация для среднего интернет‑магазина: 2 vCPU, 4 ГБ RAM, SSD. Оптимальная: 4 vCPU, 8 ГБ RAM. ОС: Ubuntu 22.04 или Debian 12. Если не BitrixVM — настраиваем стек вручную под задачу. Виртуальный хостинг — только для визиток и лендингов. Требования: PHP 8.0+, MySQL 5.7+ / MariaDB 10.0+, 512 МБ RAM, .htaccess. Хостинг‑партнёры 1С-Битрикс — гарантия совместимости. Выделенный сервер — для highload. Типичная архитектура: веб‑сервер отдельно, база данных отдельно, Redis/Memcached отдельно. На редакции «Энтерпрайз» — веб‑кластер с балансировщиком. Облако (Yandex Cloud, VK Cloud, Selectel) — когда нагрузка скачет: распродажи, сезонные пики. Автомасштабирование через Managed Kubernetes или просто вертикальное масштабирование VM.
Выбор редакции — не менее важный шаг. Частая ошибка: берут «Малый бизнес» для магазина, который через полгода вырастает до B2B с оптовыми ценами и тремя складами. Переход на «Бизнес» — доплата разницы, данные не теряются, но лучше предусмотреть заранее. Наши специалисты подберут редакцию под текущие задачи и с запасом на рост. Например, лицензия «Бизнес» (около 35 000 ₽) окупается за счёт мультисклада и обмена с 1С, а неправильный выбор приводит к потере до 30 000 ₽ ежемесячно на избыточных ресурсах.
| Редакция |
Для кого |
Ключевое ограничение |
| Старт |
Визитки, лендинги |
Нет инфоблоков 2.0, нет торгового каталога |
| Стандарт |
Корпоративные сайты |
Нет e‑commerce модуля |
| Малый бизнес |
Маленькие магазины |
1 тип цены, 1 склад, нет обмена с 1С |
| Бизнес |
Средние магазины, B2B |
Мультисклад, мультивалюта, CommerceML |
| Энтерпрайз |
Highload, кластер |
Веб‑кластер, CDN, мультисайтовость |
Какие настройки сервера критичны для 1С-Битрикс?
Веб‑сервер и PHP
nginx как reverse proxy + Apache (mod_php) или nginx + PHP-FPM напрямую. Второй вариант экономит память — Apache не нужен. Но некоторые модули Битрикс используют .htaccess, поэтому для совместимости иногда оставляем Apache. Конфигурация nginx: fastcgi_read_timeout 300 — для долгих операций (импорт из 1С), client_max_body_size 1024m — загрузка больших файлов. Закрываем доступ к .settings.php, .settings_extra.php, bitrix/.settings.php — там пароли к базе. Rewrite‑правила из urlrewrite.php — Битрикс сам генерирует, но при nginx + PHP-FPM нужно продублировать. PHP 8.0–8.2 с расширениями: mbstring, curl, gd, xml, json, opcache, redis/memcached. Ключевые настройки php.ini: opcache.memory_consumption=256, opcache.max_accelerated_files=20000, max_execution_time=300, memory_limit=512M, upload_max_filesize=100M, post_max_size=128M.
База данных и кэширование
MySQL/MariaDB. Ключевые параметры my.cnf: innodb_buffer_pool_size — 70–80% RAM, innodb_log_file_size=256M, tmp_table_size=256M, max_heap_table_size=256M, thread_pool_size — по количеству ядер CPU. Кодировка utf8mb4 обязательно, иначе эмодзи и спецсимволы ломаются. Redis предпочтительнее Memcached для Битрикс — поддерживает persistent connections и более надёжен. Настраиваем в .settings_extra.php:
'cache' => ['value' => ['type' => ['class_name' => '\\Bitrix\\Main\\Data\\CacheEngineRedis']]]
'session' => ['value' => ['mode' => 'default', 'handlers' => ['general' => ['type' => 'redis']]]]
SSL, почта и cron
SSL — Let's Encrypt через certbot в 90% случаев. Редирект HTTP → HTTPS (301), HSTS, TLS 1.2/1.3, OCSP Stapling. В Битрикс переключаем на HTTPS в настройках главного модуля. Почта: отказываемся от mail() — подключаем SMTP (Яндекс.Почта для домена, Mail.ru для бизнеса). Обязательно настраиваем SPF, DKIM, DMARC. Без SPF письма уходят в спам. Тестируем доставляемость через mail‑tester.com — оценка 9+/10. Cron: агенты Битрикс переводим на системный cron — * * * * * /usr/bin/php /var/www/bitrix/modules/main/tools/cron_events.php. На cron вешаем обмен с 1С (15–60 мин), поисковую переиндексацию, бэкапы (mysqldump + rsync, ротация 7+4), очистку временных файлов.
Безопасность и администрирование
Файловая система: владелец www-data, директории 755, файлы 644, upload 775. nginx блокирует доступ к файлам конфигурации. Включаем Проактивную защиту Битрикс — WAF, контроль активности (блокировка после 5 неудачных попыток), проверку целостности ядра. Для админ‑панели: двухфакторная аутентификация через Google Authenticator или OTP, ограничение доступа по IP через nginx для параноиков.
Сколько времени занимает установка 1С-Битрикс и настройка?
| Задача |
Срок |
| Установка на виртуальный хостинг |
2–4 часа |
| Установка на VPS с настройкой стека |
1–2 дня |
| Установка на dedicated с проектированием архитектуры |
2–5 дней |
| SSL + почта + cron + безопасность |
1–2 дня |
| Настройка бэкапов и мониторинга |
0.5–1 день |
Проверка после установки (пошаговый чек‑лист)
-
Монитор производительности (
/bitrix/admin/perfmon_panel.php) — целимся в 30+ баллов. Ниже 20 — есть серьёзные проблемы с конфигурацией.
-
Проверка системы — автоматическая проверка всех параметров. Красные пункты — исправляем обязательно, жёлтые — по ситуации.
-
Сканер безопасности — проверка на типичные уязвимости.
-
PageSpeed Insights — TTFB < 200мс на VPS, LCP < 2.5с.
-
Тестовый обмен с 1С — если планируется интеграция, проверяем CommerceML‑обмен до запуска.
Дополнительно проверяем версии ПО, настройки кэширования, работу cron, SSL‑сертификат, SPF/DKIM/DMARC, права доступа, удаление дефолтных пользователей и страниц. Для проектов с 54‑ФЗ убеждаемся, что настроена фискализация через ОФД‑провайдера.
Что входит в работу (deliverables)
- Полностью настроенный сервер под 1С-Битрикс с оптимизацией MySQL, PHP, nginx.
- Установленная и активированная лицензия нужной редакции.
- SSL‑сертификат, почтовые настройки, cron и бэкапы.
- Документация: все параметры конфигурации, доступы, cron‑задачи.
- Обучение контент‑менеджера: как заходить в админку, добавлять товары, загружать изображения.
- Поддержка после установки в течение 30 дней — консультации по настройкам.
Почему стоит доверить установку профессионалам?
Неправильная установка — потеря времени и денег. Мы видели проекты, где магазин на «Старте» не мог выдержать 50 посетителей, потому что не был настроен innodb_buffer_pool_size. После переноса на VPS с правильной конфигурацией сайт «полетел». Неправильная конфигурация может обходиться в 30 000 ₽ ежемесячно из‑за избыточного потребления ресурсов. Вы получаете готовую архитектуру, которая масштабируется. Закажите установку 1С-Битрикс под ключ — и получите надёжную платформу для роста бизнеса. Свяжитесь с нами — рассчитаем стоимость под ваш проект. Опыт более 7 лет, реализовано 120+ проектов на Битрикс, включая highload‑магазины с миллионными каталогами. Обращайтесь — мы поможем настроить Битрикс под ваш проект.