Налаштування оплати за QR-кодом у 1С-Бітрікс
Коли покупець оформляє замовлення в інтернет-магазині, він хоче заплатити в два кліки — без введення даних карти?
QR-код на сторінці оплати вирішує це завдання: сканування, підтвердження в додатку банку, готово. Але під капотом — зв'язка API еквайра, генерація QR, polling статусу та грамотний UX. Ми спеціалізуємось на таких інтеграціях під ключ для 1С-Бітрікс та Бітрікс24. Наш досвід — понад 10 років, тому ми одразу бачимо вузькі місця. Наприклад, на одному з проєктів з товарним запасом 150 000 SKU ми впровадили QR СБП через Тінькофф. Проблема була в тому, що при піці в 100 одночасних замовлень polling не встигав обробляти статуси, і частина платежів зависала. Ми оптимізували: додали черги через агенти Бітрікс та збільшили інтервал polling до 5 секунд з експоненційним бек-офом. У результаті 99,9% платежів завершувались коректно.
Типи QR-кодів для оплати
QR СБП — через Систему швидких платежів Банку Росії. Працює з будь-яким банком-учасником СБП. Згідно з Положенням Банку Росії № 580-П, перекази зараховуються за секунди. Комісія становить 0,4–0,7% від суми — у 3–5 разів нижче, ніж при картковому еквайрингу. При середньомісячному обороті $9k–13k економія на комісіях досягає 40 тис руб.
QR банку — пропрієтарний формат конкретного банку (SberPay QR, Тінькофф QR). Працює тільки з додатком цього банку. Підходить для монобрендової аудиторії.
QR як картинка посилання — звичайне посилання на сторінку оплати, закодоване в QR. Відкриває мобільний браузер, покупець обирає спосіб оплати на сайті. Простіше в реалізації, але додає зайвий крок.
QR СБП — оптимальний вибір для інтернет-магазину
QR СБП виграє за ключовими параметрами: комісія у 2–3 рази нижча за карткову, гроші надходять миттєво, скасування повернення — також. Для клієнта — звичний сценарій: сканувати QR у будь-якому банківському додатку. За статистикою, 70% користувачів віддають перевагу СБП за наявності вибору. Економія на комісіях може досягати 80% порівняно з картками. Наприклад, при обороті 500 тис руб на місяць економія складе близько 20 тис руб, а при 2 млн — вже 80 тис руб.
Як ми налаштовуємо оплату за QR-кодом у 1С-Бітрікс
Процес налаштування включає кілька кроків:
- Вибір еквайра та реєстрація термінала (Тінькофф, ЮKassa або інші).
- Генерація QR-коду для кожного замовлення через API еквайра.
- Організація polling статусу з клієнтської та серверної сторони.
- Інтеграція у стандартні компоненти 1С-Бітрікс.
- Тестування всіх сценаріїв (успіх, скасування, тайм-аут).
Як підключити QR СБП через Тінькофф
Спочатку створюємо платіж в еквайрі через Init, отримуємо PaymentId. Потім запитуємо QR-код через GetQr. Код PHP:
// Створюємо платіж з типом QR $params = [ 'TerminalKey' => TINKOFF_TERMINAL, 'Amount' => (int)($order->getPrice() * 100), 'OrderId' => $order->getAccountNumber(), 'Description' => 'Замовлення #' . $order->getAccountNumber(), 'NotificationURL' => 'https://shop.ru/bitrix/tools/sale_ps_result.php', 'PayType' => 'O', ]; $params['Token'] = tinkoffSign($params, TINKOFF_SECRET); $initResult = tinkoffPost('/v2/Init', $params); $paymentId = $initResult['PaymentId']; // Запитуємо QR для СБП $qrParams = [ 'TerminalKey' => TINKOFF_TERMINAL, 'PaymentId' => $paymentId, 'DataType' => 'IMAGE', // або 'PAYLOAD' для отримання рядка посилання ]; $qrParams['Token'] = tinkoffSign($qrParams, TINKOFF_SECRET); $qrResult = tinkoffPost('/v2/GetQr', $qrParams); // $qrResult['Data'] — base64-encoded PNG з QR-кодом (при DataType=IMAGE) // або рядок-посилання СБП (при DataType=PAYLOAD) Важно обробляти помилки: якщо платіж не створено, повертати користувачеві зрозуміле повідомлення. Ми завжди додаємо fallback на випадок недоступності API еквайра.
Як реалізувати QR СБП через ЮKassa
ЮKassa формує QR СБП автоматично при створенні платежу з методом sbp:
$payment = $client->createPayment([ 'amount' => ['value' => '1500.00', 'currency' => 'USD'], 'payment_method_data' => ['type' => 'sbp'], 'confirmation' => ['type' => 'qr'], 'description' => 'Замовлення #' . $orderId, ], uniqid('', true)); $qrUrl = $payment->getConfirmation()->getConfirmationData(); // qrUrl — рядок виду https://qr.nspk.ru/... — кодуємо в QR на клієнті Для відтворення QR з URL на клієнті використовуємо JS-бібліотеку qrcodejs або qr-code-styling. Це швидше і не навантажує сервер.
Відображення QR на сторінці та polling статусу
// Показуємо QR та полімо статус платежу async function showQRPayment(orderId) { const resp = await fetch('/api/get-payment-qr.php', { method: 'POST', body: JSON.stringify({ orderId }), }); const data = await resp.json(); document.getElementById('qr-image').src = 'data:image/png;base64,' + data.qrBase64; document.getElementById('qr-block').style.display = 'block'; // Polling: перевіряємо статус кожні 3 секунди const pollInterval = setInterval(async () => { const status = await checkPaymentStatus(orderId); if (status === 'paid') { clearInterval(pollInterval); window.location.href = '/payment/success/'; } if (status === 'expired') { clearInterval(pollInterval); showExpiredMessage(); } }, 3000); // Зупиняємо polling через 15 хвилин setTimeout(() => clearInterval(pollInterval), 15 * 60 * 1000); } Серверний скрипт перевірки статусу:
// local/api/check-payment-status.php $orderId = (int)($_POST['orderId'] ?? 0); $paymentId = getExternalPaymentId($orderId); // збережений PaymentId Тінькофф $params = [ 'TerminalKey' => TINKOFF_TERMINAL, 'PaymentId' => $paymentId, ]; $params['Token'] = tinkoffSign($params, TINKOFF_SECRET); $status = tinkoffPost('/v2/GetState', $params); $map = [ 'CONFIRMED' => 'paid', 'CANCELED' => 'cancelled', 'DEADLINE_EXPIRED' => 'expired', ]; echo json_encode([ 'status' => $map[$status['Status']] ?? 'pending', ]); Polling має бути стійким: при помилці мережі робимо повторну спробу з експоненційною затримкою, не блокуємо інтерфейс.
Типові помилки при налаштуванні QR-оплати
Одна з поширених проблем — тайм-аут при генерації QR через API еквайра. Якщо еквайр не відповідає протягом 10 секунд, необхідно передбачити fallback: показати користувачеві альтернативний спосіб оплати або повторити запит з інтервалом 1-2 секунди. Ми встановлюємо тайм-аут не менше 30 секунд для API Тінькофф і перевіряємо статус платежу в фоні через агенти.
Ще одна часта проблема — відсутність обробки дублюючих сповіщень. Коли еквайр надсилає кілька callback-запитів, потрібно перевіряти статус платежу в БД перед оновленням. Інакше замовлення може бути оплачене двічі. Це легко вирішується транзакційним блокуванням у MySQL.
Що входить у налаштування QR-оплати під ключ
| Компонент | Опис |
|---|---|
| Вибір та підключення еквайра | Тінькофф, ЮKassa або інший банк з СБП |
| Генерація QR-коду на сторінці замовлення | base64-зображення або URL + відтворення на клієнті |
| Polling статусу оплати | Серверний скрипт + клієнтський інтервал з обробкою тайм-аутів |
| Інтеграція з 1С-Бітрікс | Платіжна система, обробники сповіщень, логування |
| Документація та тестування | Інструкція для адміністратора, тести всіх сценаріїв |
| Підтримка після запуску | Гарантія 1 місяць, консультації щодо доопрацювань |
Орієнтовні терміни
| Етап | Час |
|---|---|
| QR СБП через Тінькофф/ЮKassa | 1–2 дні |
| Polling статусу + UX оновлення | 0,5–1 день |
| Інтеграція в сторінку оформлення замовлення | 0,5–1 день |
| Разом (з тестуванням) | від 2 до 4 днів |
Зв'яжіться з нами — оцінимо ваш проєкт і запропонуємо оптимальне рішення. Досвід інтеграцій — понад 10 років, гарантуємо стабільну роботу платежів. Отримайте оцінку вашого проєкту — залиште заявку. Додаткові матеріали: Система швидких платежів, QR-код.







