Покупець додає товар у кошик, переходить до оформлення — і кидає на етапі вибору оплати. Причина? Немає знайомого BNPL-віджета, який показує суму щомісячного платежу. Клієнту не вистачає калькулятора розстрочки на картці товару, а на checkout-і немає згадки про можливість платити частинами. У результаті — втрачені продажі. Технічно BNPL-інтеграція — це не просто вставка кнопки. Потрібно налаштувати API-запити до провайдерів, обробляти сповіщення (webhook-и), забезпечити ідемпотентність операцій та коректно відображати статус платежу в інтерфейсі. Помилка у верифікації підпису HMAC може призвести до подвійних списань. Ми інтегрували BNPL для десятків мерчантів: підключаємо Халву, Сплит, Поділи, Долями під ключ за 3–10 днів. Розберемо ключові етапи.
Які проблеми вирішує BNPL-інтеграція
Різноманіття API. Кожен сервіс пропонує свій протокол: REST з підписом, JavaScript SDK або SOAP. Потрібно уніфікувати обробку, не втрачаючи специфіки. Ми використовуємо патерн "Адаптер" для кожного провайдера.
Асинхронність платежів. Рішення про розстрочку може прийти через хвилину після оформлення. Потрібна коректна обробка callback-ів: прийняти сповіщення, перевірити підпис, оновити статус замовлення без блокування користувача.
Ідемпотентність. Якщо банк надішле дублюючий webhook, неприпустимо повторно списати гроші. Наш обробник перевіряє унікальний eventId у таблиці логів перед зміною замовлення. Якщо запис уже є — повертаємо 200 та ігноруємо. Це стандартний патерн, описаний у документації провайдерів.
Заміна сервісу Совість
Карта розстрочки "Совість" від Ківі Банку припинила роботу. Якщо ви розглядали цей варіант — переключіться на актуальні альтернативи. Нижче — порівняння лідерів ринку.
Порівняння популярних BNPL-рішень
| Сервіс | Банк | Макс. термін | Особливості | Час схвалення |
|---|---|---|---|---|
| Халва | Совкомбанк | 24 міс | Найбільша партнерська мережа | 5–10 хв |
| Сплит | Тінькофф | 12 міс | Інтеграція через Tinkoff API | 1–3 хв |
| Поділи | Альфа-Банк | 3 частини | Миттєве рішення | 1–2 сек |
| Долями | Яндекс | 4 частини | Без відсотків, через Яндекс Пей | 2–5 сек |
| OZON Credit | OZON | 12 міс | Тільки для OZON Marketplace | Залежить від продавця |
Тінькофф Сплит швидший за Халву в 2 рази за часом схвалення, але Халва охоплює більшу аудиторію. Вибір залежить від вашої ніші.
Як ми підключаємо BNPL
Інтеграція Тінькофф Сплит
Найбільш технічно зріла заміна. Працює через той самий API, що й Тінькофф Каса, але з типом продукту Credit. Для Сплиту використовується окремий термінал — отримується в ЛК Тінькофф Бізнес при підключенні до програми.
$params = [ 'TerminalKey' => env('TINKOFF_CREDIT_TERMINAL'), 'Amount' => 149900, // у копійках 'OrderId' => 'order-12345', 'Description' => 'Замовлення #12345 — розстрочка', 'DATA' => [ 'connection_type' => 'widget', ], ]; // Генерація Token за стандартною схемою Тінькофф ksort($params); $params['Token'] = hash('sha256', implode('', array_values($params)) . env('TINKOFF_CREDIT_PASSWORD')); $response = Http::post('https://securepay.tinkoff.ru/v2/Init', $params); $paymentUrl = $response->json('PaymentURL'); Згідно з документацією Тінькофф, Credit-термінал призначений для обробки розстрочки та кредитів. Після успішного Init отримуємо PaymentURL та перенаправляємо клієнта. Фінальний статус прийде через webhook.
Інтеграція Поділи (Альфа-Банк)
$response = Http::withHeaders([ 'Authorization' => 'Bearer ' . env('PODELI_TOKEN'), 'Content-Type' => 'application/json', ])->post('https://api.podeli.ru/v1/orders', [ 'amount' => 14990, 'currency' => 'RUB', 'orderId' => 'order-12345', 'description' => 'Замовлення #12345', 'returnUrl' => 'https://example.com/payment/return', 'callbackUrl' => 'https://example.com/webhook/podeli', 'customer' => [ 'phone' => '+79001234567', ], 'items' => [ [ 'name' => 'Товар 1', 'price' => 14990, 'quantity' => 1, ], ], ]); $checkoutUrl = $response->json('checkoutUrl'); Поділи — три платежі: перший при оформленні, другий і третій через рівні проміжки. Рішення приймається за секунди.
Долями (Яндекс)
Долями — BNPL-сервіс Яндекса, інтегрований через API Яндекс Пей:
// Яндекс Пей віджет YaPay.createPayment({ env: YaPay.PaymentEnv.Prod, version: 4, paymentSheet: { version: 4, countryCode: YaPay.CountryCode.Ru, currencyCode: YaPay.CurrencyCode.Rub, merchant: { id: MERCHANT_ID, name: 'Мій магазин', url: 'https://example.com', }, order: { id: 'order-12345', total: { amount: '1499.00' }, items: [{ label: 'Товар 1', amount: '1499.00' }], }, paymentMethods: [ { type: YaPay.PaymentMethodType.Split, gateway: 'yandex' }, ], }, }); Як вибрати BNPL-провайдера
| Провайдер | Аудиторія | Макс. сума | Час схвалення | Тип інтеграції |
|---|---|---|---|---|
| Халва | Широка (партнери) | до 500 000 ₽ | 5–10 хв | REST API / SDK |
| Сплит (Тінькофф) | Клієнти Тінькофф | до 300 000 ₽ | 1–3 хв | REST API (той самий, що й Каса) |
| Поділи | Всі | до 30 000 ₽ | 1–2 сек | REST API |
| Долями | Всі | до 30 000 ₽ | 2–5 сек | JavaScript SDK (Яндекс Пей) |
Для мас-маркету з чеками до 30 000 ₽ підійде Долями (4 частини без відсотків). Для дорогих товарів (від 50 000 ₽) — Халва (до 24 міс) або Сплит (до 12 міс). Якщо потрібне швидке схвалення — Поділи (3 частини, рішення за секунди). Ми допомагаємо прийняти зважене рішення на основі вашої статистики.
Калькулятор BNPL на картці товару
function BnplBadges({ price }: { price: number }) { const perThree = (price / 3).toFixed(2); const perFour = (price / 4).toFixed(2); return ( <div className="flex gap-2 text-sm text-muted-foreground"> <span>Поділи: 3 × {perThree} ₴</span> <span>Долями: 4 × {perFour} ₴</span> </div> ); } Покажіть клієнту суму щомісячного платежу — це підвищує довіру та конверсію.
Webhook-патерн для BNPL
Незалежно від конкретного сервісу, всі BNPL-рішення використовують схожу логіку webhook:
public function handleBnplWebhook(Request $request, string $provider): Response { // 1. Верифікувати підпис (специфічно для кожного провайдера) // 2. Перевірити ідемпотентність (не обробляти одну подію двічі) // 3. Оновити статус замовлення тільки при фінальному статусі (APPROVED) // 4. Повернути 200 — інакше сервіс буде повторювати спроби $payload = $this->verifyAndParse($request, $provider); if (BnplWebhookLog::where('event_id', $payload['eventId'])->exists()) { return response('Already processed', 200); } BnplWebhookLog::create(['event_id' => $payload['eventId'], 'provider' => $provider]); if ($payload['status'] === 'APPROVED') { Order::where('id', $payload['orderId'])->update(['status' => 'paid']); } return response('OK', 200); } Чому BNPL підвищує конверсію
Клієнт бачить не повну суму, а розбивку на дрібні платежі — психологічний бар'єр знижується. Віджети на картці товару та в кошику нагадують про можливість розстрочки. Ми налаштовуємо сценарії показу залежно від суми кошика та історії замовлень. Це дає приріст конверсії на 15–30%.
Етапи нашої роботи
- Аналітика — обираємо відповідний BNPL-сервіс під вашу аудиторію та нішу.
- Проєктування — проєктуємо архітектуру: API-запити, webhook-и, віджети.
- Інтеграція — підключаємо обраний сервіс: реєструємо термінал, пишемо код, налаштовуємо маршрути.
- Тестування — перевіряємо всі сценарії: успішна оплата, відмова, повернення, повторний запит.
- Деплой — викочуємо в продакшен, моніторимо перші оплати.
Що входить в роботу
- Підключення одного BNPL-провайдера на ваш вибір.
- Налаштування калькулятора розстрочки на картці товару.
- Інтеграція webhook-сповіщень з вашою CRM.
- Документація по API та інструкція для операторів.
- Деплой та 7-денна пост-підтримка.
Зв'яжіться з нами, щоб обговорити інтеграцію BNPL у ваш проєкт. Замовте інтеграцію прямо зараз — отримайте консультацію інженера.







