Налаштування оплати за 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С-Бітрікс

Оплата за QR-кодом — покупець сканує код на екрані або роздрукованому документі і підтверджує платіж у мобільному додатку банку або через СБП. Популярна в B2B (оплата рахунків), у пунктах видачі та як альтернативний метод для тих, хто не має при собі картки. Технічно QR-оплата на сайті Бітрікс реалізується через СБП (ЦБ РФ) або через власні QR-сервіси банків.

Два типи QR-кодів

Статичний QR — один код для одного магазину/рахунку, суму покупець вводить вручну при оплаті. Простий у реалізації, але незручний: потрібно вручну контролювати, хто і скільки заплатив.

Динамічний QR — кожен платіж генерує унікальний QR з конкретною сумою та ідентифікатором замовлення. Оплата автоматично зіставляється із замовленням. Це правильний варіант для e-commerce.

Динамічний QR через СБП

СБП ЦБ РФ підтримує динамічні QR-коди через банки-учасники. У більшості випадків реалізується через еквайринг:

// Створення QR через ЮКасса (метод sberqr або sbp)
$payment = $yookassaClient->createPayment([
    'amount'              => ['value' => $orderAmount, 'currency' => 'RUB'],
    'payment_method_data' => ['type' => 'sberbank'],  // або 'sbp'
    'capture'             => true,
    'confirmation'        => ['type' => 'qr'],  // тип підтвердження — QR
    'description'         => 'Замовлення №' . $orderId,
], uniqid('', true));

// Отримуємо QR-зображення
$qrCodeUrl = $payment->getConfirmation()->getConfirmationData();
// $qrCodeUrl — URL зображення QR-коду або рядок payload для генерації

// Або через Тінькофф
$qrData = $tinkoffClient->getQr(['PaymentId' => $tinkoffPaymentId]);
$qrString = $qrData['Data'];  // рядок для генерації QR

Генерація QR-зображення на сервері

Якщо еквайринг повертає рядок payload (а не готове зображення):

// Встановити: composer require endroid/qr-code
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\Writer\PngWriter;

$result = Builder::create()
    ->writer(new PngWriter())
    ->data($qrString)
    ->encoding(new Encoding('UTF-8'))
    ->size(300)
    ->margin(10)
    ->build();

// Повертаємо як data URI або зберігаємо у файл
$qrDataUri = $result->getDataUri();

Відображення QR на сторінці замовлення

У шаблоні компонента sale.order.payment.result або на кастомній сторінці оплати:

<div class="qr-payment-block">
    <p>Відскануйте QR-код у додатку вашого банку для оплати</p>
    <img src="<?= $arResult['QR_IMAGE_URL'] ?>"
         alt="QR-код для оплати"
         width="250" height="250">
    <p>Сума до оплати: <strong><?= $arResult['AMOUNT'] ?> грн.</strong></p>
    <p>Код замовлення: <?= $arResult['ORDER_NUMBER'] ?></p>

    <!-- Автоматична перевірка статусу кожні 5 секунд -->
    <div id="qr-status">Очікуємо оплату...</div>
</div>

<script>
const checkInterval = setInterval(async () => {
    const res = await fetch('/bitrix/tools/check_payment_status.php?order=<?= $orderId ?>');
    const data = await res.json();
    if (data.paid) {
        clearInterval(checkInterval);
        window.location.href = '/checkout/success/?order=<?= $orderId ?>';
    }
}, 5000);

// Зупинити перевірку через 15 хвилин
setTimeout(() => clearInterval(checkInterval), 15 * 60 * 1000);
</script>

Polling статусу платежу

// /bitrix/tools/check_payment_status.php
$orderId = (int)($_GET['order'] ?? 0);
$order   = \Bitrix\Sale\Order::load($orderId);

header('Content-Type: application/json');

if (!$order) {
    echo json_encode(['paid' => false, 'error' => 'Order not found']);
    exit;
}

// Перевіряємо через API еквайрингу (не лише через Бітрікс)
$externalId = getExternalPaymentId($orderId);
$status     = $yookassaClient->getPaymentInfo($externalId)->getStatus();

if ($status === 'succeeded' && !$order->isPaid()) {
    // Синхронізуємо статус
    $payment = $order->getPaymentCollection()->current();
    $payment->setPaid('Y');
    $payment->save();
}

echo json_encode(['paid' => $order->isPaid()]);

Терміни

Завдання Термін
Генерація динамічного QR через еквайринг 1 день
Polling статусу + JS-автооновлення сторінки 0.5 дня
Тестування сценаріїв (успіх, таймаут, скасування) 0.5 дня