Покупатель добавляет товар в корзину, переходит к оформлению — и бросает на этапе выбора оплаты. Причина? Нет знакомого BNPL-виджета, который показывает сумму ежемесячного платежа. Клиенту не хватает калькулятора рассрочки на карточке товара, а на checkout-е нет упоминания о возможности платить частями. В результате — потерянные продажи. Технически BNPL-интеграция — это не просто вставка кнопки. Нужно настроить API-запросы к провайдерам, обрабатывать уведомления (вебхуки), обеспечить идемпотентность операций и корректно отображать статус платежа в интерфейсе. Ошибка в верификации подписи может привести к двойным списаниям. Мы интегрировали 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 в ваш проект. Закажите интеграцию прямо сейчас — получите консультацию инженера.







