Настройка продажи электронных сертификатов на 1С-Битрикс
Подарочные сертификаты в интернет-магазине на 1С-Битрикс — это не просто товар с красивой картинкой. За ним стоит генерация уникального кода, формирование PDF, автоматическая отправка покупателю и механизм активации через купонную систему модуля sale. Разберём реализацию от создания товара до частичного погашения баланса.
Сертификат как товар каталога
Электронный сертификат создаётся как обычный элемент инфоблока каталога, но с особенностями:
- Тип товара — простой товар без складского учёта (количество не ограничено, галочка «Количественный учёт» снята)
- Торговые предложения — создайте SKU по номиналам: 1000, 2000, 5000 рублей. Каждое предложение имеет свою цену, равную номиналу
- Свойство «Тип доставки» — задайте значение «Электронная доставка», чтобы при оформлении заказа не запрашивался адрес
В карточке товара добавьте свойство инфоблока «Номинал сертификата» (тип — число). Оно понадобится обработчику при генерации купона.
Генерация уникального кода
При успешной оплате заказа обработчик события OnSalePayOrder генерирует уникальный код сертификата. Код формируется через Bitrix\Main\Security\Random::getString(12) — 12 символов из набора A-Z, 0-9.
Логика обработчика:
- Проверить, что в заказе есть товар из раздела «Сертификаты» (по ID раздела инфоблока)
- Сгенерировать код
- Создать купон через API
Bitrix\Sale\Internals\DiscountCouponTable::add()с привязкой к правилу корзины - Сохранить код и номинал в свойствах заказа (пользовательские поля
UF_CERTIFICATE_CODE,UF_CERTIFICATE_AMOUNT)
Купон создаётся с типом «На серию заказов» и максимальным количеством применений — это обеспечит частичное использование.
Формирование PDF
Для генерации PDF-сертификата используется библиотека mPDF или Dompdf, подключаемая через Composer. Шаблон сертификата — HTML-файл с подстановкой переменных:
- Код сертификата
- Номинал
- Дата выпуска и срок действия
- QR-код для быстрой активации (генерируется через
chillerlan/php-qrcodeили аналог)
HTML-шаблон хранится в /local/templates/certificate/ и содержит инлайн-стили (mPDF не поддерживает внешние CSS полноценно). Фоновое изображение задаётся через CSS background-image с абсолютным путём к файлу на сервере.
Результат сохраняется в /upload/certificates/ с именем по коду сертификата. Доступ к директории закрывается через .htaccess — файл отдаётся только через PHP-скрипт с проверкой авторизации.
Отправка по email
Почтовое событие CERTIFICATE_CREATED создаётся в разделе Настройки → Почтовые события. Шаблон письма содержит:
| Макрос | Значение |
|---|---|
#CODE# |
Код сертификата |
#AMOUNT# |
Номинал |
#VALID_UNTIL# |
Срок действия |
#PDF_LINK# |
Ссылка на скачивание PDF |
Отправка инициируется из того же обработчика OnSalePayOrder после генерации PDF. Письмо уходит на email покупателя из заказа. Если в заказе указан отдельный email получателя (поле «Email получателя сертификата») — письмо дублируется туда.
Активация и правила корзины
Механизм погашения сертификата работает через модуль sale.discount. При генерации купона создаётся правило корзины:
- Тип скидки — фиксированная сумма, равная номиналу сертификата
- Привязка — купон, код которого совпадает с кодом сертификата
- Область применения — весь заказ (или конкретные разделы каталога, если сертификат категорийный)
Покупатель вводит код сертификата в поле «Купон» при оформлении заказа. Система применяет скидку на сумму номинала.
Частичное использование и баланс
Штатная купонная система Битрикс не поддерживает баланс купона из коробки. Для частичного погашения потребуется доработка:
- Обработчик
OnSaleOrderPaidпроверяет, использован ли купон сертификата в оплаченном заказе - Если сумма заказа меньше номинала — вычисляет остаток
- Обновляет правило корзины: новая сумма скидки = остаток
- Записывает историю использования в отдельную таблицу (custom-таблица
b_certificate_usage)
Если сумма заказа больше или равна номиналу — купон деактивируется через DiscountCouponTable::update() с полем ACTIVE = N.
Баланс сертификата отображается в личном кабинете покупателя через кастомный компонент, который читает данные из b_certificate_usage и текущее правило корзины.
Срок действия
Срок задаётся в правиле корзины через поля ACTIVE_FROM и ACTIVE_TO. Стандартный срок — 12 месяцев с момента покупки. По истечении срока купон автоматически перестаёт применяться, а в личном кабинете сертификат отображается как «Истёк».
Рабочая реализация сертификатов потребует создания модуля или хотя бы набора обработчиков в init.php, кастомной таблицы для истории и шаблона PDF. Объём работы — 20–30 часов в зависимости от требований к дизайну и бизнес-логике.







