A visitor adds a laptop worth 120,000 rubles to the cart, sees the total, and leaves — a typical situation for online stores without installment options. The psychological barrier of the full price reduces conversion by 20–30%. We are a team of certified 1C-Bitrix developers with more than 5 years of experience. We have developed calculators for 15+ online stores, from small niche shops to large catalogs. In this article, we'll break down how to implement a tool that not only shows "from 5,000 RUB/month" but also correctly handles hidden commissions, annuity schemes, and bank integration.
Annuity payment — Wikipedia.
Why is an Installment Calculator Critical for E-commerce?
Instead of a price of 120,000 RUB, the customer sees "from 5,000 RUB/month." The psychological barrier drops, and the average order value increases. A calculator on the product page increases checkout conversion by 20–30% according to our data — this is 2-3 times more effective than just showing a banner with a promotion. The annuity formula provides accuracy down to a penny, while a simplified method can be off by 5–10% for programs with variable rates (see Wikipedia: Annuity).
How Does the Installment Mechanism Work?
In classic zero-interest installment, the monthly payment = product cost / number of months. The seller compensates the bank for the difference through their margin or a special agreement with the partner bank. In "0–0–24" installment (0% down payment, 0% rate, 24 months), hidden conditions often include mandatory insurance or account maintenance fees. The calculator must show the real total amount.
Pitfalls of 0% Installment
Challenges we face during implementation:
- Multiple partner banks with different conditions (term, down payment, commission). Storing in an HL block is optimal.
- Hidden commissions in "interest-free" programs (insurance, account maintenance). The calculator must display the total amount.
- Integration with 1C via CommerceML — you need to pass the selected program into the order and accounting.
Some banks charge a one-time connection fee for installment — up to 10% of the purchase amount. Instead of stating it explicitly, they mask it as "service fee." The calculator should break down the total: product cost + commissions + interest (if any).
How to Develop an Installment Calculator: Step-by-Step Plan
- Collect partner bank conditions: terms, rates, commissions, minimum and maximum amounts.
- Design the highload block
InstallmentProgramsfor storing programs. - Implement the
InstallmentCalculatorclass with support for annuity and differentiated schemes. - Embed the widget on the product page and in the cart with a comparison table.
- Set up caching of calculation results and integration with 1C.
How We Do It: Stack and Approach
At the core is the InstallmentCalculator class with annuity calculation. We support all popular schemes: classic zero-interest installment, installment with an actual rate (compensated by the seller), variations with different down payments.
namespace MyProject\Services;
class InstallmentCalculator
{
/**
* @param float $amount Product/service cost
* @param int $months Installment term
* @param float $downPayment Down payment (0 if none)
* @param float $bankRate Actual bank rate (compensated by the seller)
* @param float $commission One-time commission (0 if none)
*/
public static function calculate(
float $amount,
int $months,
float $downPayment = 0,
float $bankRate = 0,
float $commission = 0
): array {
$loanAmount = $amount - $downPayment;
$commissionFixed = $amount * ($commission / 100);
if ($bankRate == 0) {
// Classic zero-interest installment
$monthlyPayment = $loanAmount / $months;
$totalPayment = $loanAmount + $commissionFixed;
$overpayment = $commissionFixed;
} else {
// Installment with actual rate (paid by seller, not buyer)
$monthlyRate = $bankRate / 12 / 100;
$monthlyPayment = $loanAmount * $monthlyRate
* pow(1 + $monthlyRate, $months)
/ (pow(1 + $monthlyRate, $months) - 1);
$totalPayment = $monthlyPayment * $months + $commissionFixed;
$overpayment = $totalPayment - $loanAmount;
}
return [
'down_payment' => round($downPayment, 2),
'loan_amount' => round($loanAmount, 2),
'monthly_payment' => round($monthlyPayment, 2),
'commission' => round($commissionFixed, 2),
'total_payment' => round($totalPayment, 2),
'overpayment' => round($overpayment, 2),
'months' => $months,
'is_zero_percent' => ($overpayment == 0 || $overpayment == $commissionFixed),
];
}
}
Installment Options Configuration
Stores work with multiple partner banks, each offering different conditions. Storing in the HL block InstallmentPrograms:
| Field | Description |
|---|---|
UF_BANK_NAME |
Partner bank |
UF_MONTHS |
Installment term |
UF_DOWN_PAYMENT_PCT |
Minimum down payment (%) |
UF_COMMISSION_PCT |
Processing commission (%) |
UF_MIN_AMOUNT |
Minimum purchase amount |
UF_MAX_AMOUNT |
Maximum purchase amount |
UF_CATEGORIES |
Product categories (optional) |
When the amount is selected, the calculator automatically displays available programs.
UX: Displaying Options
The interface shows a comparison table. Implementation in JavaScript:
function renderInstallmentTable(programs, amount) {
const rows = programs
.filter(p => amount >= p.min_amount && amount <= p.max_amount)
.map(p => {
const calc = calcInstallment(amount, p.months, p.down_pct, p.commission_pct);
return `
<tr>
<td>${p.bank_name}</td>
<td>${p.months} mo.</td>
<td>${formatMoney(calc.down_payment)} (${p.down_pct}%)</td>
<td>${formatMoney(calc.monthly_payment)}/mo.</td>
<td>${calc.overpayment > 0 ? formatMoney(calc.overpayment) : '0 RUB'}</td>
<td><button onclick="selectProgram(${p.id})">Select</button></td>
</tr>
`;
});
document.getElementById('installment-table').innerHTML = rows.join('');
}
Integration with Bitrix Cart
For online stores, the calculator is embedded on the product page and in the cart. The selected option is saved in the order properties. Integration example:
// Saving the selected installment program in the order property
$order = \Bitrix\Sale\Order::load($orderId);
$propertyCollection = $order->getPropertyCollection();
$installmentProp = $propertyCollection->getItemByOrderPropertyCode('INSTALLMENT_PROGRAM');
if ($installmentProp) {
$installmentProp->setValue(json_encode([
'bank' => $bankName,
'months' => $months,
'payment' => $monthlyPayment,
]));
}
$order->save();
// In the product template: minimum payment
$minMonthlyPayment = InstallmentCalculator::getMinMonthlyPayment(
$arResult['ITEM_PRICES'][0]['PRICE'],
$availablePrograms
);
if ($minMonthlyPayment) {
echo "from {$minMonthlyPayment} RUB/month in installments";
}
How to Ensure Calculation Accuracy?
The annuity formula provides accuracy down to a penny, while a simplified method can be off by 5–10% for programs with variable rates. This is critical when connecting a real bank API — calculation errors lead to returns and complaints. Always use decimal types for financial operations, and tagged caching to reduce database load during batch calculations.
Typical Mistakes in Calculator Development
- Incorrect interest calculation — forgetting to account for commission or rounding. Use
BigDecimalequivalents. - Lack of caching — calculation for each product page can load the database. Add tagged caching of results.
- Rigid binding to a bank — abstract through interfaces to easily add new partners.
What's Included in the Development?
- Analysis of your partner banks and their terms
- Designing highload tables and business logic
- Implementing the calculation class and cart integration
- UI widget with comparison table and program selection
- Documentation and manager training
- Code warranty and post-launch support
Timeframes for Implementation
| Stage | Duration |
|---|---|
| Requirements analysis and bank access collection | 1-2 days |
| Data schema design | 1 day |
| Basic calculator implementation (1-2 programs) | 3-5 days |
| Multiple bank connection and comparison table | 1.5-2 weeks |
| Full system with online application via bank API | 3-6 weeks |
The cost is calculated individually. Contact us for a consultation and commercial proposal. Leave a request — we'll evaluate the project in one day and tell you how an installment calculator can increase your store's conversion.







