Налаштування оформлення замовлення в розстрочку 1С-Бітрікс
Розстрочка — це специфічний спосіб оплати, який вимагає більше даних від покупця, ніж звичайний чекаут. При оплаті карткою достатньо натиснути кнопку і ввести CVV. При розстрочці потрібні: паспортні дані, телефон для SMS-верифікації, іноді — другий документ. Завдання налаштування оформлення замовлення в розстрочку — вибудувати правильний флоу: показати розстрочку в потрібний момент, не перевантажити форму зайвими полями, коректно передати дані до банку.
Коли показувати розстрочку
Розстрочка має мінімальну суму замовлення (зазвичай 50–300 BYN/UAH). Показувати кнопку «Оформити в розстрочку» потрібно тільки коли сума кошика відповідає умовам. Це вирішується в методі isAvailable обробника платіжної системи.
На фронті — динамічне приховування/показ кнопок при зміні кошика:
document.addEventListener('basket:updated', function(e) {
const total = e.detail.price;
const minInstallment = window.INSTALLMENT_MIN_AMOUNT || 50;
document.querySelectorAll('.installment-pay-btn').forEach(btn => {
btn.style.display = total >= minInstallment ? 'inline-flex' : 'none';
});
if (total >= minInstallment) {
document.getElementById('installment-monthly')
.textContent = 'від ' + Math.ceil(total / 12) + ' грн/міс.';
}
});
Флоу оформлення замовлення з розстрочкою
Стандартний чекаут 1С-Бітрікс (bitrix:sale.order.ajax) потрібно адаптувати під розстрочку. Два підходи:
Підхід 1: Єдиний чекаут з умовними полями. У формі замовлення присутні всі поля, але додаткові (для розстрочки) показуються тільки при виборі відповідного способу оплати:
BX.bind(document.getElementById('pay-system-select'), 'change', function() {
const isInstallment = this.value === 'installment';
document.getElementById('installment-fields-block').style.display =
isInstallment ? 'block' : 'none';
// Встановлюємо required для полів розстрочки
document.querySelectorAll('.installment-required').forEach(el => {
el.required = isInstallment;
});
});
Підхід 2: Окрема сторінка підтвердження. Покупець оформлює замовлення стандартно, потім на сторінці оплати бачить кнопки: «Оплатити карткою» та «Оформити в розстрочку». При кліку на розстрочку — редирект на сторінку банку.
Підхід 2 простіший у реалізації і менше порушує користувацький досвід. Саме він найчастіше застосовується при інтеграції з білоруськими сервісами розстрочки (Халва, Черепаха, Магніт, Картка покупок).
Додаткові властивості замовлення для розстрочки
Для передачі даних до банку створюємо властивості замовлення через модуль sale:
// Програмно додаємо властивості замовлення для розстрочки
$propsToAdd = [
'INSTALLMENT_TERM' => ['NAME' => 'Термін розстрочки (міс.)', 'TYPE' => 'NUMBER'],
'INSTALLMENT_PROVIDER' => ['NAME' => 'Провайдер розстрочки', 'TYPE' => 'STRING'],
'INSTALLMENT_APP_ID' => ['NAME' => 'ID заявки в банку', 'TYPE' => 'STRING'],
'INSTALLMENT_STATUS' => ['NAME' => 'Статус розстрочки', 'TYPE' => 'STRING'],
];
foreach ($propsToAdd as $code => $params) {
$prop = new \CSaleOrderProps();
$prop->Add([
'PERSON_TYPE_ID' => 1,
'NAME' => $params['NAME'],
'TYPE' => $params['TYPE'],
'CODE' => $code,
'ACTIVE' => 'Y',
'USER_PROPS' => 'N',
'IS_LOCATION' => 'N',
'IS_EMAIL' => 'N',
'IS_NAME' => 'N',
'IS_PHONE' => 'N',
'SORT' => 500,
]);
}
При створенні замовлення через розстрочку заповнюємо INSTALLMENT_TERM та INSTALLMENT_PROVIDER. При отриманні рішення від банку — INSTALLMENT_APP_ID і INSTALLMENT_STATUS.
Вибір терміну розстрочки в кошику
Перед переходом до оплати через розстрочку показуємо покупцеві вибір терміну:
// Компонент вибору умов розстрочки
$availableTerms = [
['months' => 6, 'monthly' => ceil($orderTotal / 6)],
['months' => 12, 'monthly' => ceil($orderTotal / 12)],
['months' => 24, 'monthly' => ceil($orderTotal / 24)],
];
<div class="installment-terms">
<?php foreach ($availableTerms as $term): ?>
<label class="term-option">
<input type="radio" name="installment_months" value="<?= $term['months'] ?>">
<span class="term-label">
<strong><?= $term['months'] ?> місяців</strong>
<span><?= $term['monthly'] ?> грн/міс.</span>
</span>
</label>
<?php endforeach; ?>
</div>
Вибраний термін зберігається в сесії та передається в обробник платіжної системи через getBusinessValue.
Сторінка успішного оформлення
Після повернення з сайту банку (success_url) показуємо спеціальну сторінку «Заявку на розстрочку прийнято»:
- Якщо банк схвалив миттєво — «Розстрочку оформлено, замовлення підтверджено»
- Якщо розгляд займе час — «Заявка на розгляді. Ви отримаєте SMS про рішення»
- Якщо відхилено — «Заявку відхилено. Ви можете обрати інший спосіб оплати» з кнопкою «Оплатити карткою»
Статус визначається з GET-параметра, який повертає банк, або з нашої БД (bl_mtbank_orders.status, bl_bnovo_reservations, залежно від провайдера).
Логування та моніторинг
Всі спроби оформлення розстрочки пишемо в лог bl_installment_log:
CREATE TABLE bl_installment_log (
id SERIAL PRIMARY KEY,
order_id INT NOT NULL,
provider VARCHAR(32) NOT NULL, -- 'halva', 'karta_pokupok', 'cherepaha', 'magnit'
amount NUMERIC(12,2),
term_months SMALLINT,
status VARCHAR(30),
bank_app_id VARCHAR(128),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
Це дає статистику: конверсія по кожному провайдеру, середній термін розстрочки, частка заявок за сумами.
Терміни
| Етап | Термін |
|---|---|
| Властивості замовлення та налаштування платіжних систем | 1 день |
| Динаміка відображення кнопок розстрочки в кошику | 1 день |
| Сторінка вибору терміну розстрочки | 1 день |
| Сторінки success/fail з правильними статусами | 1 день |
| Логування та звіт по конверсіях | 1 день |
| Тестування повного флоу | 1–2 дні |
| Разом | 6–8 днів |







