Настройка генерации QR-кодов на товары 1С-Битрикс
Этикетки с QR-кодами на товарах в офлайн-точке, стойки с кодами для быстрого перехода к карточке в интернет-магазине, упаковка с QR на инструкцию — сценариев много. Общая задача: сгенерировать QR-код для каждого товара автоматически, без ручной работы менеджера, и встроить в рабочие процессы склада или маркетинга.
Библиотека генерации
В 1С-Битрикс нет встроенного генератора 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.ru/catalog/item/ARTICLE-123/— универсальный вариант - UTM-ссылка — с метками источника для аналитики офлайн/онлайн конверсии
- Артикул — для внутреннего использования на складе, сканируется терминалом
- Ссылка на инструкцию или сертификат — для документной части
Важно: URL должен быть коротким, иначе QR становится плотным и хуже читается дешёвыми сканерами. Для длинных URL используйте собственный редиректор:
https://shop.ru/go/A123/ → redirect → https://shop.ru/catalog/item/very-long-slug-here/
Генерация QR для товара в Битрикс
Класс-генератор, интегрированный с инфоблоком:
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 работает без участия менеджера — это автоматизация, которую замечают только результаты.







