Настройка генерации QR-кодов на товары 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка генерации QR-кодов на товары 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка генерации 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 работает без участия менеджера — это автоматизация, которую замечают только результаты.