Налаштування генерації QR-кодів на товари 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування генерації QR-кодів на товари 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

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