Розробка функціоналу розстрочки на 1С-Бітрикс
Розстрочка — це можливість клієнта оплатити товар частинами без відсотків (на відміну від кредиту). Фінансову сторону забезпечує банк або сам магазин (власна розстрочка). З технічної сторони в 1С-Бітриксі потрібно реалізувати розрахунок, відображення умов, оформлення та контроль виплат.
Два варіанти розстрочки
1. Банківська розстрочка (через банківський віджет). Банк (Тинькофф, Халва, Сбербанк BNPL) надає SDK/віджет — покупець оформляє розстрочку прямо на сайті. Магазин отримує повну суму одразу, банк бере комісію. Технічна задача — інтеграція з API банку та вставлення кнопки «Купити в розстрочку».
2. Власна розстрочка магазину. Магазин сам розбиває платіж на частини та контролює виплати. Складніше технічно, але без комісій банку. Потрібно зберігати графік платежів та нагадувати клієнтам.
Інтеграція банківської розстрочки
Розглянемо на прикладі Тинькофф Розстрочка («Доля»):
Крок 1: Кнопка на картці товара.
// Віджет Тинькофф
TinkoffCredit.request({
shopId: '12345',
showcaseId: '67890',
items: [{
name: productName,
quantity: 1,
price: productPrice,
}],
sum: productPrice,
orderNumber: 'PRE-' + Date.now(),
});
Крок 2: Оформлення замовлення в Бітриксі.
При успішному рішенні банку — створити замовлення через \Bitrix\Sale\Order::create(), прив'язати платіжну систему «Тинькофф Розстрочка», зберегти loan_id від банку у властивості замовлення.
Крок 3: Webhook від банку. Банк сповіщає про фінальне рішення (одобрено/відхилено) та про виплату магазину. Обработчик webhook оновлює статус замовлення.
Для інтеграції Халви (Совкомбанк), Splitu ВТБ — аналогічна схема, але інший API.
Власна розстрочка: архітектура
Зберігання даних. Таблиця b_local_installment_plan:
| Поле | Опис |
|---|---|
| ID | Первинний ключ |
| ORDER_ID | Прив'язка до замовлення Бітрикс |
| USER_ID | Клієнт |
| TOTAL_AMOUNT | Повна сума |
| DOWN_PAYMENT | Перший внесок |
| INSTALLMENTS_COUNT | Кількість частин |
| INSTALLMENT_AMOUNT | Сума кожної частини |
| CURRENCY | Валюта |
| STATUS | ACTIVE, COMPLETED, OVERDUE, CANCELLED |
Таблиця b_local_installment_payment — графік платежів:
| Поле | Опис |
|---|---|
| PLAN_ID | Посилання на план |
| PAYMENT_NUMBER | Номер платежу (1, 2, 3...) |
| DUE_DATE | Дата платежу |
| AMOUNT | Сума |
| STATUS | PENDING, PAID, OVERDUE |
| PAID_AT | Фактична дата оплати |
Розрахунок графіку платежів
function createInstallmentSchedule(int $planId, float $totalAmount, float $downPayment, int $installmentsCount): void
{
$remainingAmount = $totalAmount - $downPayment;
$installmentAmount = round($remainingAmount / $installmentsCount, 2);
// Коригування округлення на останній платіж
$lastPaymentAmount = $remainingAmount - ($installmentAmount * ($installmentsCount - 1));
for ($i = 1; $i <= $installmentsCount; $i++) {
$dueDate = (new DateTime())->modify('+' . ($i * 30) . ' days');
InstallmentPaymentTable::add([
'PLAN_ID' => $planId,
'PAYMENT_NUMBER' => $i,
'DUE_DATE' => $dueDate,
'AMOUNT' => ($i === $installmentsCount) ? $lastPaymentAmount : $installmentAmount,
'STATUS' => 'PENDING',
]);
}
}
Відображення на картці товара та в кошику
На сторінці товара — блок «Купити в розстрочку»:
Вартість: 30 000 грн.
Розстрочка на 6 місяців:
├── Перший внесок: 5 000 грн. (сьогодні)
└── 5 платежів по 5 000 грн. кожні 30 днів
Динамічний розрахунок при виборі кількості місяців — через AJAX-запит до ендпоінту розрахунку:
// /local/ajax/installment_calc.php
$price = (float)$_POST['price'];
$months = (int)$_POST['months'];
$downPercent = 0.2; // 20% перший внесок
$down = round($price * $downPercent, 2);
$monthly = round(($price - $down) / ($months - 1), 2);
echo json_encode(['down' => $down, 'monthly' => $monthly]);
Контроль платежів та прострочення
Агент або cron щоденно перевіряє прострочені платежі:
$overdue = InstallmentPaymentTable::getList([
'filter' => ['STATUS' => 'PENDING', '<DUE_DATE' => new DateTime()],
])->fetchAll();
foreach ($overdue as $payment) {
InstallmentPaymentTable::update($payment['ID'], ['STATUS' => 'OVERDUE']);
// Сповістити клієнта
sendOverdueNotification($payment);
// Якщо прострочення > 30 днів — есклалація менеджеру
}
Особистий кабінет клієнта
Сторінка /personal/installments/ показує:
- Активні розстрочки з прогресом виплат.
- Графік майбутніх платежів.
- Історію оплачених частин.
- Посилання на оплату наступного платежу.
Строки розробки
| Варіант | Состав | Строк |
|---|---|---|
| Інтеграція банківського віджету | Тинькофф або Халва, кнопка + webhook | 3-5 днів |
| Власна розстрочка | Зберігання, графік, ЛК, сповіщення | 8-12 днів |
| Повна система | Банківська + своя + аналітика прострочень | 12-16 днів |







