Інтеграція розстрочки Sovest на веб-сайт
Sovest — карта розстрочки від Kiwi Bank (проект закрито в 2023 році). Якщо ви бачите цей документ і розглядаєте інтеграцію Sovest — звернеться до поточних альтернатив: Halva (Sovkombank), Split (Tinkoff), Podeli (Alfa-Bank) або SberPay Installments.
Поточні альтернативи BNPL в Росії
Ринок buy now pay later (BNPL) у 2024–2025 роках у фокусі:
| Сервіс | Банк | Макс. термін | Особливості |
|---|---|---|---|
| Halva | Sovkombank | 24 місяці | Найбільша партнерська мережа |
| Split | Tinkoff | 12 місяців | Інтеграція через Tinkoff API |
| Podeli | Alfa-Bank | 3 платежі | Миттєве рішення |
| Dolami | Yandex | 4 платежі | Без відсотків |
| OZON Credit | OZON | 12 місяців | Тільки для OZON Marketplace |
Інтеграція Tinkoff Split
Найбільш технічно зріла заміна. Працює через той же API, що й Tinkoff Kassa, але з типом продукту Credit:
$params = [
'TerminalKey' => env('TINKOFF_CREDIT_TERMINAL'),
'Amount' => 149900, // в копійках
'OrderId' => 'order-12345',
'Description' => 'Замовлення #12345 — розстрочка',
'DATA' => [
'connection_type' => 'widget',
],
];
// Генерація Token за стандартною схемою Tinkoff
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');
Для Split використовується окремий терміналу з продуктом Credit — отримується в кабінеті Tinkoff Business при підключенні до програми.
Інтеграція Podeli (Alfa-Bank)
$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');
Podeli — три платежі: перший при оформленні, другий і третій через рівні проміжки. Рішення приймається за секунди.
Dolami (Yandex)
Dolami — BNPL-сервіс Yandex, інтегрований через API Yandex Pay:
// Віджет Yandex Pay
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 на карточці товару
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>Podeli: 3 × {perThree} ₽</span>
<span>Dolami: 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-сервісу — від 3 до 10 робочих днів залежно від провайдера.







