Налаштування продажу електронних сертифікатів у 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-скрипт із перевіркою авторизації.
Відправлення по електронній пошті
Поштова подія CERTIFICATE_CREATED створюється у розділі Налаштування → Поштові події. Шаблон листа містить:
| Макрос | Значення |
|---|---|
#CODE# |
Код сертифікату |
#AMOUNT# |
Номінал |
#VALID_UNTIL# |
Термін дії |
#PDF_LINK# |
Посилання на завантаження PDF |
Відправлення ініціюється з того самого обробника OnSalePayOrder після генерації PDF. Лист відправляється на електронну пошту покупця із замовлення. Якщо в замовленні вказана окрема адреса електронної пошти отримувача (поле «Електронна пошта отримувача сертифікату») — лист дублюється туди.
Активація та правила кошика
Механізм погашення сертифікату працює через модуль sale.discount. При генерації купона створюється правило кошика:
- Тип знижки — фіксована сума, рівна номіналу сертифікату
- Прив'язка — купон, код якого збігається з кодом сертифікату
- Область застосування — всі замовлення (або конкретні розділи каталогу, якщо сертифікат категорійний)
Покупець вводить код сертифікату в поле «Купон» при оформленні замовлення. Система застосовує знижку на суму номіналу.
Часткове використання та залишок
Штатна купонна система Бітрикс не підтримує залишок купона з коробки. Для часткового погашення буде потрібна доробка:
- Обробник
OnSaleOrderPaidперевіряє, чи використано купон сертифікату в оплаченому замовленні - Якщо сума замовлення менше номіналу — обчислює залишок
- Оновлює правило кошика: нова сума знижки = залишок
- Записує історію використання в окрему таблицю (користувацька таблиця
b_certificate_usage)
Якщо сума замовлення більша або дорівнює номіналу — купон деактивується через DiscountCouponTable::update() з полем ACTIVE = N.
Залишок сертифікату відображається в особистому кабінеті покупця через користувацький компонент, який читає дані з b_certificate_usage та поточного правила кошика.
Термін дії
Термін встановлюється в правилі кошика через поля ACTIVE_FROM та ACTIVE_TO. Стандартний термін — 12 місяців з моменту покупки. По закінченню терміну купон автоматично перестає застосовуватися, а в особистому кабінеті сертифікат відображається як «Істік».
Робоча реалізація сертифікатів потребуватиме створення модуля або принаймні набору обробників у init.php, користувацької таблиці для історії та шаблону PDF. Обсяг роботи — 20–30 годин залежно від вимог до дизайну та бізнес-логіки.







