A visitor adds a laptop worth $1.1k–1.6k 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 $45–65/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 $1.1k–1.6k, the customer sees "from $45–65/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) : '$?'}</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} USD/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.

