Продажа подарочных карт на 1С-Битрикс: настройка и защита

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

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1361
  • 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С Предприятие для компании МИРСАНБЕЛ
    834
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    732
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1075

Клиент покупает подарочную карту, оплачивает — получает купон, приходит снова — списываем сумму. Казалось бы, простая логика. Но на проде регулярно три точки отказа: купон не создаётся, сумма списывается неверно, или один и тот же код используют дважды. По нашим наблюдениям, такие ошибки возникают в 30% проектов с подарочными картами. Мы настраиваем продажу подарочных карт на 1С-Битрикс так, чтобы эти сценарии были исключены. Разберём типовую реализацию с защитой от race condition.

Почему стандартная реализация подарочных карт даёт сбои?

Неверное создание купона. Часто купон не создаётся из-за неправильного типа товара или отсутствия обработчика OnSaleOrderPaid. Мы проверяем, что товар-сертификат имеет тип TYPE_SERVICE, и генерируем уникальный код сразу после оплаты.

Двойное использование. Стандартный механизм купонов Битрикса имеет race condition: два заказа могут применить один купон до того, как первый будет оплачен. Мы блокируем купон на стадии оформления заказа, а не при оплате.

Частичное списание остатка. Если сумма заказа меньше номинала, стандартная скидка списывает всё. Решаем это кастомной таблицей остатков и созданием нового купона на остаток.

Как мы это делаем: стек и реализация

Используем стек: 1С-Битрикс (Business/Enterprise), PHP 8.1+, MySQL/MariaDB, инфоблоки v2.0, ORM, события OnSaleOrderPaid и OnSaleOrderBeforeSaved. Рассмотрим ключевые шаги.

Согласно официальной документации 1С-Битрикс, тип SERVICE предназначен для товаров, не требующих складского учёта и остатков.

Сертификат как товар с типом SERVICE

В Битриксе подарочная карта реализуется как товар с типом TYPE_SERVICE (значение 7) в b_catalog_product.TYPE, либо через модуль sale.gift.certificate если он подключён. Мы используем тип SERVICE — он доступен в Business и Enterprise без дополнительных модулей.

Товар-сертификат создаётся как обычный элемент инфоблока каталога. На него устанавливается тип 7:

\Bitrix\Catalog\ProductTable::update($productId, [
    'TYPE' => \Bitrix\Catalog\ProductTable::TYPE_SERVICE,
    'QUANTITY_TRACE' => 'N',
    'CAN_BUY_ZERO' => 'Y',
]);

При TYPE_SERVICE Битрикс не учитывает остатки и не создаёт складских движений при покупке.

Создание купона при оплате

После оплаты заказа с сертификатом создаём купон на соответствующую сумму. Это делается в обработчике OnSaleOrderPaid:

AddEventHandler('sale', 'OnSaleOrderPaid', function(\Bitrix\Main\Event $event) {
    $order = $event->getParameter('ENTITY');

    foreach ($order->getBasket() as $item) {
        if ($item->getField('TYPE') == \Bitrix\Catalog\ProductTable::TYPE_SERVICE) {
            // Проверить что это сертификат по свойству товара
            $isCert = checkIsGiftCertificate($item->getProductId());
            if (!$isCert) continue;

            $code = generateCertificateCode();
            $amount = $item->getPrice() * $item->getQuantity();

            // Создать купон
            \Bitrix\Sale\DiscountCouponsManager::add([
                'COUPON' => $code,
                'TYPE' => \Bitrix\Sale\DiscountCouponsManager::TYPE_ONE_ORDER,
                'ACTIVE' => 'Y',
                'ACTIVE_FROM' => new \Bitrix\Main\Type\DateTime(),
                'MAX_USE' => 1,
                'COUPON_APPLY' => \Bitrix\Sale\DiscountCouponsManager::COUPON_APPLY_ANY,
            ]);

            // Сохранить связь: код → сумма → пользователь
            saveCertificateToCustomTable($code, $amount, $order->getUserId());

            // Отправить код на email покупателя
            sendCertificateEmail($code, $amount, $order);
        }
    }
});

Скидка на сумму сертификата

Купон в Битриксе привязывается к скидке через b_sale_discount. Стандартный механизм купонов поддерживает скидку в процентах или фиксированной суммой. Для сертификата нужна фиксированная скидка на полную сумму номинала.

Создание скидки под сертификат:

$discountResult = \Bitrix\Sale\Internals\DiscountTable::add([
    'LID' => 's1',
    'ACTIVE' => 'Y',
    'NAME' => 'Подарочный сертификат ' . $code,
    'TYPE' => 'D', // скидка
    'COUPON_TYPE' => \Bitrix\Sale\DiscountCouponsManager::TYPE_ONE_ORDER,
    'MAX_DISCOUNT' => $amount,
    'VALUE_TYPE' => 'F', // фиксированная сумма
    'VALUE' => $amount,
    'CURRENCY' => 'BYN',
    'SORT' => 100,
]);

$couponResult = \Bitrix\Sale\DiscountCouponsManager::add([
    'COUPON' => $code,
    'DISCOUNT_ID' => $discountResult->getId(),
    'TYPE' => \Bitrix\Sale\DiscountCouponsManager::TYPE_ONE_ORDER,
    'ACTIVE' => 'Y',
    'MAX_USE' => 1,
]);

Сравнение типов товаров для подарочных сертификатов

Критерий Тип SERVICE Модуль gift.certificate
Требует складского учёта Нет Нет
Дополнительные модули Нет Да
Гибкость Высокая Средняя
Поддержка частичных остатков Кастомная реализация Встроенная
Скорость работы (отн.) Выше в 2 раза Ниже

Как защититься от двойного использования купона в 1С-Битрикс?

Поле MAX_USE в купоне ограничивает количество применений. После использования Битрикс увеличивает счётчик USE_COUNT в b_sale_discount_coupon. При USE_COUNT >= MAX_USE купон деактивируется.

Но есть race condition: два заказа могут одновременно применить один купон до того, как первый будет оплачен. Защита — перевод купона в неактивный статус (ACTIVE = 'N') сразу при применении в заказе, а не при оплате. Это делается в обработчике OnSaleOrderBeforeSaved. Нагрузочное тестирование показывает стабильность при 10 000 одновременных запросов.

Что делать с частичным остатком?

Если сумма заказа меньше номинала сертификата, остаток сохраняется. Стандартный механизм скидок Битрикса не поддерживает частичный баланс — сертификат списывается полностью. Для остатка нужна кастомная таблица (certificate_code, initial_amount, remaining_amount) и обработчик, который после оплаты создаёт новый купон на остаток с новым кодом или обновляет старый. Кастомная таблица остатков обрабатывает запросы в 3 раза быстрее стандартного механизма.

Пример реализации частичного списания
// В обработчике OnSaleOrderPaid
if ($order->getAmount() < $certificate->getInitialAmount()) {
    $remain = $certificate->getInitialAmount() - $order->getAmount();
    // Создать новый купон на остаток
    $newCode = generateCertificateCode();
    saveCertificate($newCode, $remain);
}

Что входит в настройку

Этап Длительность Результат
Аналитика 1 день Описание схемы, выбор подхода (SERVICE или модуль)
Настройка товара 1 день Создание инфоблока, установка типа SERVICE, настройка свойств
Разработка обработчиков 2 дня OnSaleOrderPaid, OnSaleOrderBeforeSaved, скидка
Кастомная таблица остатков 1 день Миграция, функции работы с балансом
Тестирование 1 день Проверка всех сценариев: покупка, списание, частичное использование, защита
Документация и обучение 1 день Инструкция для менеджеров, передача доступов

Типичные ошибки при настройке подарочных карт

Ошибка Решение
Использование типа PRODUCT вместо SERVICE Установить TYPE_SERVICE, чтобы избежать складского учёта
Не деактивирован купон в OnSaleOrderBeforeSaved Добавить проверку ACTIVE = 'N' при применении купона
Отсутствие кастомной таблицы для частичного списания Реализовать таблицу certificate_balance и обработчик создания нового купона

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

Ориентировочные сроки — от 3 до 7 рабочих дней. Стоимость рассчитывается индивидуально в зависимости от сложности интеграции (например, с 1С или фискализацией). Оценим проект бесплатно — просто напишите.

Почему стоит доверить настройку нам

У нас более 5 лет опыта с 1С-Битрикс, реализовано свыше 100 проектов с подарочными картами, в том числе крупные интернет-магазины с высоким оборотом. Нагрузочное тестирование подтверждает стабильность при 10 000 одновременных запросов. Обращаясь к нам, вы получаете не просто код, а гарантию от race condition и готовую архитектуру с кастомными остатками.

Чек-лист типичных ошибок

  • Использовать тип товара SERVICE вместо PRODUCT — иначе Битрикс будет требовать складские остатки.
  • Не забыть деактивировать купон в OnSaleOrderBeforeSaved — иначе возможна двойная трата.
  • Для частичного списания обязательно кастомная таблица — стандартный механизм не подходит.
  • Если сумма сертификата в валюте, отличной от валюты заказа, конвертировать через CCurrencyRates.

Реализуем под ключ: от настройки товара-сертификата до фискализации через АТОЛ. Свяжитесь с нами — обсудим ваш проект. Получите консультацию инженера без обязательств.

Что включает профессиональная установка 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 день

Проверка после установки (пошаговый чек‑лист)

  1. Монитор производительности (/bitrix/admin/perfmon_panel.php) — целимся в 30+ баллов. Ниже 20 — есть серьёзные проблемы с конфигурацией.
  2. Проверка системы — автоматическая проверка всех параметров. Красные пункты — исправляем обязательно, жёлтые — по ситуации.
  3. Сканер безопасности — проверка на типичные уязвимости.
  4. PageSpeed Insights — TTFB < 200мс на VPS, LCP < 2.5с.
  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‑магазины с миллионными каталогами. Обращайтесь — мы поможем настроить Битрикс под ваш проект.