При навантаженні 500+ замовлень на день кустарна реалізація подарункових сертифікатів дає збої: дублі кодів, пропущені листи, злетілі купони. Ми переписували модулі для 15 проєктів — помилки повторювалися: неправильні коди, відсутність часткового погашення, проблеми з фіскалізацією. Продумана архітектура знижує витрати на підтримку на 20–30% і окупається за 2–3 місяці. У 95% випадків проблеми виникають через некоректне налаштування купонів: середній час виправлення одного інциденту — 4 години. Кастомний модуль працює в 2-3 рази швидше за готові рішення з Маркетплейсу, особливо при навантаженні понад 500 замовлень на день. Розберемо, як налаштувати електронні сертифікати на 1С-Бітрікс від товару до балансу, використовуючи штатні механізми та кастомні доробки. Середня вартість такого рішення — від 500$ до 2000$ залежно від обсягу.
Як генерується унікальний код?
Налаштування продажу електронних сертифікатів: від товару до балансу. Електронний сертифікат створюється як звичайний елемент інфоблоку, але з особливостями. Тип товару — простий товар без складського обліку (кількість не обмежена, знято галочку «Кількісний облік»). Торгові пропозиції створіть за номіналами: 1000, 2000, 5000 гривень. Кожна пропозиція має свою ціну, рівну номіналу. Властивість «Тип доставки» задайте значенням «Електронна доставка», щоб при оформленні замовлення не запитувалася адреса. У картці товару додайте властивість інфоблоку «Номінал сертифіката» (тип — число). Воно знадобиться обробнику при генерації купона.
При успішній оплаті замовлення обробник події OnSalePayOrder генерує унікальний код сертифіката через Bitrix\Main\Security\Random::getString(12) — 12 символів з набору A-Z, 0-9. Логіка обробника:
- Перевірити, що в замовленні є товар з розділу «Сертифікати» (за ID розділу інфоблоку).
- Згенерувати код.
- Створити купон через
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. Лист надходить на email покупця із замовлення. Якщо в замовленні вказано окремий email отримувача (поле «Email отримувача подарунка») — лист дублюється туди.
Електронні сертифікати замість купонів
Штатна купонна система Бітрікс не підтримує баланс купона з коробки. Порівняємо її з кастомним рішенням:
| Параметр | Штатна система купонів | Кастомний модуль |
|---|---|---|
| Часткове погашення | Ні | Так |
| Історія використання | Ні | Так |
| Відображення балансу в ОК | Ні | Так |
| Інтеграція з 1С | Складно, через API | Готові обробники |
| Швидкодія при 500+ замовленнях | Обмежена | Висока (у 2-3 рази швидше) |
Для часткового погашення знадобиться доробка:
- Обробник
OnSaleOrderPaidперевіряє, чи використано купон в оплаченому замовленні. - Якщо сума замовлення менша за номінал — обчислює залишок.
- Оновлює правило кошика: нова сума знижки = залишок.
- Записує історію використання в окрему таблицю (custom-таблиця
b_certificate_usage).
Якщо сума замовлення більша або дорівнює номіналу — купон деактивується через DiscountCouponTable::update() з полем ACTIVE = N. Баланс купона відображається в особистому кабінеті покупця через кастомний компонент, який читає дані з b_certificate_usage і поточне правило кошика. В одному проєкті ми реалізували такий механізм для мережі магазинів електроніки — він обробляв 3000 операцій на день без жодного збою за 3 роки роботи.
Як налаштувати часткове погашення?
Активація електронного сертифіката. Механізм погашення працює через модуль sale.discount. При генерації купона створюється правило кошика:
- Тип знижки — фіксована сума, рівна номіналу купона.
- Прив'язка — купон, код якого збігається з кодом ваучера.
- Область застосування — все замовлення (або конкретні розділи каталогу, якщо купон категорійний).
Покупець вводить код купона в поле «Купон» при оформленні замовлення. Система застосовує знижку на суму номінала.
Встановлення терміну дії. Термін задається в правилі кошика через поля ACTIVE_FROM і ACTIVE_TO. Стандартний термін — 12 місяців з моменту покупки. Після закінчення терміну купон автоматично перестає застосовуватися, а в особистому кабінеті купон відображається як «Закінчився». Для контролю термінів ми налаштовуємо агент, який за 7 днів до закінчення надсилає нагадування покупцю.
Готові модулі з Маркетплейсу часто не підтримують часткове погашення, інтеграцію з 1С і кастомізацію шаблону PDF. Вони працюють лише зі сценаріями 100% списання. Якщо ваш бізнес потребує гнучкості, краще написати власний обробник. Ми так зробили для мережі магазинів електроніки — рішення окупилося за 2 місяці.
Типові помилки при налаштуванні
- Невірно задано тип купона: замість «На серію замовлень» вказано «На одне замовлення» — купон списується повністю.
- Відсутність кешування запитів до таблиці купонів — при 500+ замовленнях навантаження на БД зростає в 10 разів.
- Неправильний ID розділу інфоблоку в обробнику — генерація коду не спрацьовує.
- Ігнорування обробника
OnSaleCancelOrder— при скасуванні замовлення код не звільняється.
Що входить у послугу
- Розробка модуля для генерації кодів, купонів та історії використання.
- Інтеграція з платіжними системами та 1С через CommerceML.
- Шаблон PDF-документа з QR-кодом.
- Налаштування поштових подій та відправка листа з вкладенням.
- Документація та передача вихідного коду.
- Технічна підтримка протягом місяця після запуску.
Ми маємо 5-річний досвід розробки модулів для 1С-Бітрікс, гарантуємо якість та надаємо підтримку. Вартість розробки починається від 500$ і залежить від складності. Зверніться до нас для оцінки вашого проєкту — ми підготуємо комерційну пропозицію протягом одного робочого дня. Замовте розробку модуля — терміни від 20 годин. Наші сертифіковані інженери забезпечать коректну фіскалізацію та інтеграцію з будь-якими платіжними системами. Отримайте консультацію за вашим сценарієм.







