Разработка функционала рассрочки на 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 обновляет статус заказа.
Для интеграции Халвы (Совкомбанк), Сплита ВТБ — аналогичная схема, но другой 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 дней |







