Настройка оформления заказа в рассрочку 1С-Битрикс
Рассрочка — это специфический способ оплаты, который требует больше данных от покупателя, чем обычный чекаут. При оплате картой достаточно нажать кнопку и ввести CVV. При рассрочке нужны: паспортные данные, телефон для SMS-верификации, иногда — второй документ. Задача настройки оформления заказа в рассрочку — выстроить правильный флоу: показать рассрочку в нужный момент, не перегрузить форму лишними полями, корректно передать данные в банк.
Когда показывать рассрочку
Рассрочка имеет минимальную сумму заказа (обычно 50–300 BYN/RUB). Показывать кнопку «Оформить в рассрочку» нужно только когда сумма корзины соответствует условиям. Это решается в методе 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) + ' руб./мес.';
}
});
Флоу оформления заказа с рассрочкой
Стандартный чекаут Битрикс (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 дней |







