Интеграция рассрочки Совесть на сайт
Совесть — карта рассрочки Киви Банка (проект закрыт в 2023 году). Если вы видите этот документ и рассматриваете интеграцию Совести — обратитесь к актуальным альтернативам: Халва (Совкомбанк), Сплит (Тинькофф), Подели (Альфа-Банк) или СберПэй частями.
Актуальные аналоги BNPL в России
На рынке buy now pay later (BNPL) в 2024–2025 годах доминируют:
| Сервис | Банк | Макс. срок | Особенности |
|---|---|---|---|
| Халва | Совкомбанк | 24 мес | Крупнейшая партнёрская сеть |
| Сплит | Тинькофф | 12 мес | Интеграция через Tinkoff API |
| Подели | Альфа-Банк | 3 части | Мгновенное решение |
| Долями | Яндекс | 4 части | Без процентов |
| OZON Credit | OZON | 12 мес | Только для OZON Marketplace |
Интеграция Тинькофф Сплит
Наиболее технически зрелая замена. Работает через тот же 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 — получается в ЛК Тинькофф Бизнес при подключении к программе.
Интеграция Подели (Альфа-Банк)
$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 на карточке товара
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-сервису — от 3 до 10 рабочих дней в зависимости от провайдера.







