Разработка функционала кредитования на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка функционала кредитования на 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка функционала кредитования на 1С-Битрикс

Встроенное кредитование в интернет-магазине — это возможность покупателю оформить рассрочку или кредит прямо на сайте, без визита в банк. С технической точки зрения это интеграция с банковским API, дополнительные шаги в процессе оформления заказа и специфическая логика в модуле sale. Встроенного модуля кредитования в 1С-Битрикс нет — реализация строится поверх существующей платёжной инфраструктуры.

Партнёры и их 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]);

Отображение условий кредита: требования ЦБ

По закону «О потребительском кредите» (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% годовых

Личный кабинет: статус кредита

Страница /personal/credit/ — список оформленных кредитных заявок с текущим статусом. Данные берём из свойств заказов, фильтруя по CODE = 'CREDIT_APPLICATION_ID' и USER_ID. При необходимости — кнопка «Проверить статус» с запросом к API банка.

Отдельные нюансы

Отмена заказа. Если клиент отменяет заказ до подписания кредитного договора — нужно вызвать API банка для отмены заявки (/v1/credit/cancel). Иначе заявка «висит» на стороне банка.

Возврат по кредитному заказу. Банк имеет отдельный API для возвратов. Возврат денег идёт напрямую на кредитный счёт клиента, магазин получает уменьшение задолженности перед банком — это нужно обсуждать с менеджером банка при подключении.

Несколько банков. Реализуется через паттерн Strategy: интерфейс CreditProviderInterface с методами createApplication(), getTerms(), cancel(), refund(). Каждый банк — отдельный класс-реализация. В настройках компонента — выбор провайдера.

Сроки разработки

Вариант Состав Срок
Один банк, базовый флоу Кнопка + виджет + webhook, статус заказа 4–7 дней
Полный флоу с возвратами Webhook, отмены, возвраты, ЛК клиента 8–12 дней
Несколько банков Архитектура Strategy, конфигурирование 12–18 дней