Налаштування відображення умов розстрочки в картці товару 1С-Бітрікс
Розстрочка на сторінці товару — це розрахунок щомісячного платежу та відображення умов партнера (банку або BNPL-сервісу) прямо в картці. Реалізується через зберігання параметрів розстрочки та розрахунок на фронтенді або сервері.
Звідки беруться умови розстрочки
Два основних сценарії:
Сценарій 1 — фіксовані партнери. У магазину договір з одним-двома банками, умови відомі заздалегідь (відсоток, строки, мінімальна сума). Дані зберігаються в налаштуваннях сайту або окремому інфоблоці.
Сценарій 2 — динамічні умови через API. Банк/BNPL-партнер надає API, звідки запитуються актуальні умови для конкретної суми. Приклад: Тінькофф Розстрочка, Халва, Сплит.
Зберігання умов партнерів у Бітріксі
Для фіксованих умов створюєте HL-інфоблок InstallmentPlans:
| Поле | Тип | Опис |
|---|---|---|
UF_PARTNER |
Рядок | Назва партнера |
UF_LOGO |
Файл | Логотип |
UF_MIN_AMOUNT |
Дробове | Мінімальна сума товару |
UF_MONTHS |
Рядок | Доступні строки (6,10,12,24) |
UF_RATE |
Дробове | Ставка (0 для безвідсоткової) |
UF_ACTIVE |
Прапор | Чи активний план |
Розрахунок щомісячного платежу
Для безвідсоткової розстрочки (rate = 0):
monthly = price / months
Для розстрочки з відсотковою ставкою (ануїтетний платіж):
monthly = price * (rate/12) / (1 - (1 + rate/12)^(-months))
PHP-реалізація розрахунку:
function calcInstallment(float $price, int $months, float $annualRate): float {
if ($annualRate <= 0) {
return $price / $months;
}
$r = $annualRate / 12 / 100;
return $price * $r / (1 - pow(1 + $r, -$months));
}
JavaScript для динамічного перерахунку при зміні строку:
function calcInstallment(price, months, annualRate) {
if (annualRate <= 0) return price / months;
const r = annualRate / 12 / 100;
return price * r / (1 - Math.pow(1 + r, -months));
}
document.querySelectorAll('.installment-months').forEach(btn => {
btn.addEventListener('click', () => {
const months = parseInt(btn.dataset.months);
const rate = parseFloat(btn.dataset.rate);
const price = parseFloat(document.querySelector('[data-price]').dataset.price);
const monthly = calcInstallment(price, months, rate);
document.querySelector('.monthly-payment').textContent =
monthly.toFixed(2).replace('.', ',') + ' грн/міс.';
});
});
Виведення блоку в картці товару
У шаблоні catalog.element додаєте блок після ціни:
// Завантажуємо плани розстрочки, що підходять за сумою
$price = (float)$arResult['CATALOG_PRICE_1'];
$plans = \Local\Installment\InstallmentPlanTable::getList([
'filter' => [
'=UF_ACTIVE' => true,
'<=UF_MIN_AMOUNT' => $price,
],
'order' => ['UF_MIN_AMOUNT' => 'ASC'],
])->fetchAll();
HTML-блок умов — список партнерів з їхніми логотипами та кнопками вибору строку. Кожен партнер показує мінімальний щомісячний платіж (за максимальним строком).
Інтеграція з API банку
Якщо партнер надає API розрахунку (наприклад, Тінькофф):
// Кешуємо відповідь API на 10 хвилин, щоб не смикати при кожному відкритті картки
$cacheKey = 'installment_' . (int)$price;
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache(600, $cacheKey, '/installment/')) {
$data = $cache->getVars();
} else {
$data = \Local\Installment\TinkoffApiClient::getPlans($price);
$cache->startDataCache();
$cache->endDataCache($data);
}
На що звернути увагу
- Для товарів дешевше мінімального порога партнера блок розстрочки не показуєте взагалі
- Юридичні тексти («розстрочка надається банком-партнером») виводьте поряд із блоком
- При зміні ціни через JS (вибір комплектації) перераховуйте розстрочку теж
| Етап | Час |
|---|---|
| Сховище умов партнерів | 1–2 год |
| Розрахунок платежів (PHP + JS) | 2–3 год |
| Блок у картці товару | 3–4 год |
| Інтеграція з API банку (опційно) | 4–8 год |







