Налаштування генерації QR-кодів для товарів у 1С-Bitrix
Етикетки з QR-кодами на товарах у офлайн-точці, стійки з кодами для швидкого переходу до карточки в інтернет-магазині, упаковка з QR на інструкцію — сценаріїв багато. Загальна задача: згенерувати QR-код для кожного товару автоматично, без ручної роботи менеджера, і вбудувати в робочі процеси складу або маркетингу.
Бібліотека генерації
У 1С-Bitrix немає вбудованого генератора QR-кодів. Стороння бібліотека підключається через Composer:
composer require endroid/qr-code
Або легша альтернатива:
composer require chillerlan/php-qrcode
endroid/qr-code зручніше для генерації PNG з логотипом у центрі (популярний брендовий варіант). chillerlan/php-qrcode швидше і не потребує розширення GD.
Що кодувати в QR
Можливі варіанти змісту QR для товару:
-
URL карточки товару —
https://shop.ua/catalog/item/ARTICLE-123/— універсальний варіант - UTM-посилання — з мітками джерела для аналітики офлайн/онлайн конверсії
- Артикул — для внутрішнього використання на складі, сканується терміналом
- Посилання на інструкцію або сертифікат — для документної частини
Важливо: URL повинен бути коротким, інакше QR стає щільним і гірше читається дешевими сканерами. Для довгих URL використовуйте власний редиректор:
https://shop.ua/go/A123/ → redirect → https://shop.ua/catalog/item/very-long-slug-here/
Генерація QR для товару в Bitrix
Клас-генератор, інтегрований з інфоблоком:
namespace Custom\Catalog;
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\Writer\PngWriter;
class ProductQrGenerator {
private string $uploadDir;
public function __construct() {
$this->uploadDir = $_SERVER['DOCUMENT_ROOT'] . '/upload/qr/';
if (!is_dir($this->uploadDir)) {
mkdir($this->uploadDir, 0755, true);
}
}
public function generateForProduct(int $productId, string $url): string {
$fileName = 'product-' . $productId . '.png';
$filePath = $this->uploadDir . $fileName;
if (file_exists($filePath)) {
return '/upload/qr/' . $fileName; // Вже згенерований
}
$result = Builder::create()
->writer(new PngWriter())
->data($url)
->encoding(new Encoding('UTF-8'))
->errorCorrectionLevel(ErrorCorrectionLevel::High)
->size(400)
->margin(10)
->build();
$result->saveToFile($filePath);
return '/upload/qr/' . $fileName;
}
public function generateBatch(array $productIds): void {
foreach ($productIds as $id) {
$element = CIBlockElement::GetByID($id)->GetNextElement();
if (!$element) continue;
$fields = $element->GetFields();
$url = 'https://' . SITE_SERVER_NAME . $fields['DETAIL_PAGE_URL'];
$this->generateForProduct($id, $url);
}
}
}
Зберігання посилання на QR у карточці товару
QR-код привязується до товару через властивість інфоблоку типу «Файл» (PROP_QR_CODE) або через UF-поле. Після генерації шлях до файлу зберігається:
// Після генерації — зберігаємо шлях у властивість товару
$qrPath = $generator->generateForProduct($productId, $url);
CIBlockElement::SetPropertyValues($productId, CATALOG_IBLOCK_ID, [
'QR_CODE_URL' => $qrPath,
], 'QR_CODE_URL');
Альтернатива — не зберігати, а генерувати «на льоту» через спеціальний endpoint:
GET /api/qr/product/123/?size=400
Цей підхід простіший, але навантажує сервер при масовій печаті етикеток.
Автоматична генерація при додаванні товару
Обробник подій OnAfterIBlockElementAdd:
AddEventHandler('iblock', 'OnAfterIBlockElementAdd', function(&$fields) {
if ($fields['IBLOCK_ID'] != CATALOG_IBLOCK_ID) return;
$generator = new \Custom\Catalog\ProductQrGenerator();
$url = 'https://' . SITE_SERVER_NAME . '/catalog/item/' . $fields['CODE'] . '/';
$generator->generateForProduct($fields['ID'], $url);
});
Вивід у карточці і адміністративній частині
У шаблоні карточки товара:
<?php if (!empty($arResult['PROPERTIES']['QR_CODE_URL']['VALUE'])): ?>
<div class="product-qr">
<img src="<?= $arResult['PROPERTIES']['QR_CODE_URL']['VALUE'] ?>"
alt="QR-код товару"
width="120" height="120">
<a href="<?= $arResult['PROPERTIES']['QR_CODE_URL']['VALUE'] ?>"
download="qr-<?= $arResult['ID'] ?>.png">Скачати QR</a>
</div>
<?php endif; ?>
Сроки виконання
| Обсяг робіт | Строк |
|---|---|
| Генерація QR + збереження + вивід | 1 день |
| Пакетна генерація + автоматика по подіях | +0,5 дня |
| QR з логотипом + власний редиректор | +1 день |
Налаштована один раз генерація QR працює без участі менеджера — це автоматизація, яку помічають лише результати.







