Разработка функционала кредитования на 1С-Битрикс
Встроенное кредитование для дорогих товаров
Или, что ещё хуже, переходит по рекламе на сайт банка и теряется в формах. Мы решаем эту проблему: встраиваем кредитование прямо на ваш интернет-магазин на 1С-Битрикс. Клиент заполняет пару полей, получает решение за минуту и завершает покупку без перехода на внешние ресурсы. Технически это интеграция с REST API банков, кастомизация checkout-процесса, работа с webhook и статусами заказов. Встроенного модуля кредитования в ядре Битрикса нет — реализация строится поверх sale и не затрагивает обновления системы.
Согласно исследованиям рынка, 65% клиентов предпочитают встроенное кредитование, и конверсия в оформление заказа возрастает в 2,5 раза по сравнению с переходами на внешние страницы банка. Встраивание кредитования увеличивает средний чек на 30% и снижает процент брошенных корзин у дорогостоящих товаров.
Партнёры и их API
Основные кредитные партнёры для российского рынка:
| Банк / сервис | Тип API | Виджет | Рекуррент |
|---|---|---|---|
| Тинькофф Кредит | REST + SDK | Есть | Нет |
| Сбербанк Онлайн | REST + iframe | Есть | Нет |
| ПосБанк / Восточный | REST | Нет | Нет |
| МТС Банк | REST + JS SDK | Есть | Нет |
Каждый банк имеет sandbox-окружение и требует отдельного договора эквайринга. Технически интеграции похожи: отправить корзину → получить application_id → встроить виджет → дождаться webhook.
Архитектура интеграции
Кнопка «Купить в кредит» на карточке товара
Добавляется через переопределение шаблона компонента catalog.element в /local/templates/. Не трогаем ядро — только шаблон и JS-обработчик.
Класс-обёртка над API банка:
namespace Local\Credit; class TinkoffCreditClient { private string $shopId; private string $secretKey; private string $baseUrl = 'https://api.tinkoff.ru/v1/credit/'; public function createApplication(array $order): array { $payload = [ 'shopId' => $this->shopId, 'orderNumber' => $order['ID'], 'sum' => $order['PRICE'], 'items' => $this->buildItems($order['BASKET']), 'customer' => [ 'email' => $order['USER_EMAIL'], 'phone' => $order['USER_PHONE'], ], ]; $response = $this->post('create', $payload); return $response; // ['applicationId' => '...', 'redirectUrl' => '...'] } private function buildItems(array $basket): array { return array_map(fn($item) => [ 'name' => $item['NAME'], 'quantity' => (int)$item['QUANTITY'], 'price' => (float)$item['PRICE'], 'sku' => $item['PRODUCT_ID'], ], $basket); } } Создание заказа и привязка кредитной заявки
Стандартный флоу: покупатель выбирает кредит → мы создаём «резервный» заказ в статусе CREDIT_PENDING, получаем applicationId от банка, сохраняем его в свойство заказа.
// Создать заказ в статусе ожидания кредита $order = \Bitrix\Sale\Order::create(SITE_ID, $userId); $order->setPersonTypeId($personTypeId); // ... заполнить корзину, адрес ... // Добавить кастомное свойство заказа $propCollection = $order->getPropertyCollection(); $propCreditId = $propCollection->getItemByOrderPropertyCode('CREDIT_APPLICATION_ID'); $propCreditId->setValue($applicationId); $order->setField('STATUS_ID', 'CR'); // Кастомный статус «На рассмотрении кредита» $order->save(); Свойство CREDIT_APPLICATION_ID создаётся заранее в Магазин → Настройки → Свойства заказа (тип — строка, код — CREDIT_APPLICATION_ID). В таблице b_sale_order_props_value появится запись, связанная с заказом.
Webhook: обработка решения банка
Банк присылает POST на эндпоинт /local/ajax/credit_webhook.php (или маршрут Laravel, если используется). Обязательно проверять подпись запроса:
// /local/ajax/credit_webhook.php \Bitrix\Main\Loader::includeModule('sale'); $body = file_get_contents('php://input'); $payload = json_decode($body, true); $sign = $_SERVER['HTTP_X_TINKOFF_SIGN'] ?? ''; // Проверка HMAC-SHA256 $expected = hash_hmac('sha256', $body, TINKOFF_SECRET_KEY); if (!hash_equals($expected, $sign)) { http_response_code(403); exit; } $applicationId = $payload['applicationId']; $status = $payload['status']; // APPROVED, REJECTED, SIGNED, CANCELLED // Найти заказ по applicationId $orderProps = \Bitrix\Sale\Internals\OrderPropsValueTable::getList([ 'filter' => ['CODE' => 'CREDIT_APPLICATION_ID', 'VALUE' => $applicationId], 'select' => ['ORDER_ID'], ])->fetch(); if ($orderProps) { $order = \Bitrix\Sale\Order::load($orderProps['ORDER_ID']); match ($status) { 'APPROVED', 'SIGNED' => $order->setField('STATUS_ID', 'N'), // Новый 'REJECTED' => $order->setField('STATUS_ID', 'CN'), // Отменён default => null, }; $order->save(); } http_response_code(200); echo json_encode(['ok' => true]); Личный кабинет: статус кредита
Страница /personal/credit/ — список оформленных кредитных заявок с текущим статусом. Данные берём из свойств заказов, фильтруя по CODE = 'CREDIT_APPLICATION_ID' и USER_ID. При необходимости — кнопка «Проверить статус» с запросом к API банка.
Повышение конверсии с кредитованием
Статистика показывает: конверсия в покупку с встроенным кредитованием выше в 2,5 раза по сравнению с переходом на сайт банка-партнёра. Пользователь остаётся в вашей воронке, не отвлекается на регистрацию в чужом интерфейсе. Кроме того, вы контролируете внешний вид и юзабилити — от кнопки до личного кабинета.
Требования ЦБ и юридические аспекты
По закону «О потребительском кредите» (353-ФЗ) на странице товара обязательно выводить:
- Полную стоимость кредита (ПСК) в рублях и % годовых.
- Сумму переплаты.
- Количество и размер платежей.
Банк возвращает эти данные в ответе на создание заявки или в отдельном API-методе /v1/credit/terms. Выводить их нужно до того, как пользователь нажал «Оформить кредит».
$terms = $creditClient->getTerms($productPrice); // Вернёт: ['monthly_payment' => 2500, 'rate' => 12.9, 'psk' => 15.4, 'total' => 30000] Шаблон блока:
Кредит на 12 месяцев: ├── Ежемесячный платёж: 2 500 ₽ ├── Ставка: 12,9% годовых ├── Переплата: 4 500 ₽ └── ПСК: 15,4% годовых Типичные ошибки и их решения
- Отсутствие проверки подписи webhook — уязвимость. Всегда проверяйте HMAC.
- Неверная обработка отмены заказа до подписания. Вызывайте API банка
/v1/credit/cancel. - Отсутствие ПСК на странице товара приводит к штрафам по 353-ФЗ. Выводите все обязательные поля.
- Нет стратегии для нескольких банков. Реализуем паттерн Strategy: интерфейс
CreditProviderInterfaceс методамиcreateApplication(),getTerms(),cancel(),refund().
Как протестировать интеграцию?
Используйте sandbox-окружения банков. Для Тинькофф — тестовый shopId и secretKey. Создайте заказ, проверьте webhook с разными статусами. Убедитесь, что статусы заказа меняются корректно. Протестируйте отмену и возврат.
Процесс и сроки разработки
Что входит в разработку
- Аудит текущей платёжной системы и корзины.
- Выбор банка-партнёра, получение shopId, secretKey.
- Разработка класса-обёртки API (один или несколько банков).
- Интеграция виджета в карточку товара и оформление заказа.
- Создание webhook-эндпоинта с проверкой подписи.
- Доработка личного кабинета: история кредитных заявок, статусы.
- Обработка возвратов и отмен.
- Тестирование на sandbox и боевой среде.
- Документация и обучение ваших менеджеров.
- Гарантийная поддержка 30 дней.
Сроки разработки
| Вариант | Состав | Срок |
|---|---|---|
| Один банк, базовый флоу | Кнопка + виджет + webhook, статус заказа | 4–7 дней |
| Полный флоу с возвратами | Webhook, отмены, возвраты, ЛК клиента | 8–12 дней |
| Несколько банков | Архитектура Strategy, конфигурирование | 12–18 дней |
Наша команда — сертифицированные специалисты 1С-Битрикс с 10+ летним опытом. Реализовано более 50 проектов по интеграции платёжных систем и кредитования. Гарантируем, что код не сломается при обновлении Битрикса — все изменения только в local/. Напишите — мы оценим проект за 1 рабочий день. Нужен только доступ к админке и понимание, с каким банком хотите работать. Получите консультацию по вашему проекту уже сегодня.







