Интеграция 1С-Битрикс с системой ЭДО СБИС

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с системой ЭДО СБИС
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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С-Битрикс с системой ЭДО СБИС

СБИС (Тензор) — второй по распространённости ЭДО-оператор в России после Диадока. Ряд крупных поставщиков и госструктур работают именно через СБИС, поэтому интеграция с ним для B2B-площадок часто становится обязательным требованием от конкретных контрагентов. Технически СБИС предоставляет собственное JSON API, отличное от REST-концепции Диадока — с сессионной авторизацией и специфичной структурой запросов.

СБИС API: ключевые особенности

СБИС использует JSONRPC-подобный протокол. Все вызовы идут на единый endpoint:

POST https://online.sbis.ru/service/

С телом в формате:

{
    "jsonrpc": "2.0",
    "method": "СБИС.АутентифицироватьПоПаролю",
    "params": {
        "Логин": "[email protected]",
        "Пароль": "***"
    },
    "id": 1
}

Методы называются по-русски. Это нетипично, но стабильно работает — Тензор поддерживает эту нотацию с 2014 года.

Авторизация и сессия

class SbisClient
{
    private string $baseUrl = 'https://online.sbis.ru/service/';
    private ?string $sid = null; // session id

    public function __construct(
        private string $login,
        private string $password,
        private string $inn
    ) {}

    public function authenticate(): void
    {
        $response = $this->call('СБИС.АутентифицироватьПоПаролю', [
            'Логин'   => $this->login,
            'Пароль'  => $this->password,
        ]);
        $this->sid = $response['result'];
    }

    public function call(string $method, array $params): array
    {
        $payload = [
            'jsonrpc' => '2.0',
            'method'  => $method,
            'params'  => $params,
            'id'      => uniqid(),
        ];

        $headers = ['Content-Type: application/json; charset=utf-8'];
        if ($this->sid) {
            $headers[] = 'X-SBISSessionID: ' . $this->sid;
        }

        $ch = curl_init($this->baseUrl);
        curl_setopt_array($ch, [
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => json_encode($payload),
            CURLOPT_HTTPHEADER     => $headers,
            CURLOPT_RETURNTRANSFER => true,
        ]);

        $body = curl_exec($ch);
        return json_decode($body, true);
    }
}

Сессия хранится в Redis/APC и переиспользуется. При истечении (обычно 24 часа) — автоматическая реавторизация.

Отправка документа

В СБИС документы отправляются через метод СБИС.ОтправитьДокумент:

public function sendDocument(\Bitrix\Sale\Order $order): string
{
    // Формируем структуру документа СБИС
    $document = [
        'Документ' => [
            'Тип'    => 'ДокОтгрВх', // тип: входящий документ отгрузки
            'Дата'   => date('d.m.Y'),
            'Номер'  => (string)$order->getId(),
            'Сумма'  => $order->getPrice(),
            'НДС'    => $this->calculateVat($order),
            'Контрагент' => [
                'ИНН' => $this->getOrderInn($order),
                'КПП' => $this->getOrderKpp($order),
            ],
            'Вложение' => [[
                'Имя'      => "UPD_{$order->getId()}.xml",
                'ДвоичныеДанные' => base64_encode($this->generateXml($order)),
            ]],
        ],
    ];

    $result = $this->call('СБИС.ОтправитьДокумент', ['Документ' => $document]);

    return $result['result']['Идентификатор'] ?? '';
}

Структура документа в СБИС отличается от Диадока — названия полей по-русски, но логика та же: XML с подписью КЭП + метаданные.

Получение статусов

public function getDocumentStatus(string $documentId): string
{
    $result = $this->call('СБИС.ПолучитьДокумент', [
        'Идентификатор' => $documentId,
    ]);

    return $result['result']['Документ']['Состояние'] ?? 'Неизвестно';
}

// Варианты статусов СБИС:
// 'Отправлен', 'Доставлен', 'Подписан', 'Отказано', 'Аннулирован'

Кейс: интеграция для поставщика продуктов питания

Оптовый поставщик, работает через несколько ЭДО-операторов одновременно (часть контрагентов — через Диадок, часть — через СБИС, часть — через ЭДО Лайт ФНС). Задача: единый интерфейс в Битрикс для работы со всеми ЭДО без переключения между веб-кабинетами.

Архитектура:

Создан абстрактный класс EdoProvider с методами send(), getStatus(), getList(). Реализации: DiadokProvider, SbisProvider, FnsEdoProvider. Выбор провайдера — через реестр, ключ — BoxId контрагента.

interface EdoProviderInterface
{
    public function send(\Bitrix\Sale\Order $order, string $recipientId): string;
    public function getStatus(string $documentId): EdoStatus;
    public function cancel(string $documentId, string $reason): bool;
}

При создании заказа система автоматически определяет ЭДО-оператора контрагента через общий справочник. Менеджер видит в карточке заказа Битрикс единый блок «Документы ЭДО» независимо от того, через какого оператора работает контрагент.

Показатель До После
Операторов ЭДО в работе 3 (переключение вручную) 3 (единый интерфейс)
Время создания документа 15 мин/заказ Автоматически при смене статуса
Ошибки маршрутизации (не тому оператору) ~8%/мес 0%

Роуминг между операторами

СБИС поддерживает роуминг с Диадоком и другими операторами. Документ, отправленный через СБИС, доставляется контрагенту в Диадоке автоматически. Это снимает проблему «у нас СБИС, у них Диадок» в большинстве случаев. В коде это означает: один API-вызов к СБИС, доставка прозрачна для отправителя.

Электронные подписи на сервере

СБИС поддерживает облачную подпись через сервис «СБИС Облачная подпись» — сертификат хранится на серверах Тензора, подпись происходит через API без необходимости устанавливать КриптоПро на продакшн-сервере. Это существенно упрощает деплой:

public function signWithCloudCert(string $xmlContent, string $certId): string
{
    $result = $this->call('СБИС.ПодписатьОблачнойПодписью', [
        'Сертификат'     => $certId,
        'ДвоичныеДанные' => base64_encode($xmlContent),
    ]);
    return base64_decode($result['result']['ПодписанныеДанные']);
}

Состав работ

  • Регистрация в СБИС, получение API-доступа
  • Настройка облачной подписи или КриптоПро CSP
  • Разработка PHP-клиента СБИС API
  • Генерация XML-документов в формате ФНС
  • Обработчики событий Битрикс: отправка при смене статуса заказа
  • Синхронизация статусов через polling (cron)
  • Отображение статуса в карточке заказа

Сроки: базовая интеграция — 3–4 недели. При работе с несколькими ЭДО-операторами через единый интерфейс — 8–12 недель.