Интеграция 1С-Битрикс с системой ЭДО СБИС
Компания теряет до 80% времени сотрудников на ручной ввод документов в веб-кабинет СБИС. Один наш клиент — оптовый поставщик продуктов — тратил 15 минут на создание каждого документа. При 500 заказах в месяц это 125 часов работы одного менеджера. После интеграции с Битрикс документы уходят автоматически при смене статуса заказа. Технически СБИС (Тензор) предоставляет собственный JSONRPC-протокол, отличный от REST-концепции Диадока. Для интеграции потребуется PHP-клиент с сессионной авторизацией, поддержкой облачной подписи и обработкой роуминга. Ниже — как это реализовать и избежать типовых ошибок.
Выбор СБИС часто вынужденный — если контрагент использует только этого оператора. Но интеграция окупается: снижается время обработки заказов, исчезают ошибки ручного ввода. Мы провели более 50 интеграций с ЭДО и накопили типовые решения. Средняя экономия за год составляет $16k–23k., а при объёме от 1000 документов в месяц — до $27k–39k. на операционных расходах.
Как работает API СБИС?
СБИС использует JSONRPC-подобный протокол. Все вызовы идут на единый endpoint POST https://online.sbis.ru/service/ с телом в формате:
{ "jsonrpc": "2.0", "method": "СБИС.АутентифицироватьПоПаролю", "params": { "Логин": "[email protected]", "Пароль": "***" }, "id": 1 } Методы называются по-русски. Это нетипично, но стабильно работает — Тензор поддерживает эту нотацию много лет.
Работа с API: авторизация, отправка и статусы
Авторизация и сессия
class SbisClient { private string $baseUrl = 'https://online.sbis.ru/service/'; private ?string $sid = null; 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']['Документ']['Состояние'] ?? 'Неизвестно'; } Возможные статусы: 'Отправлен', 'Доставлен', 'Подписан', 'Отказано', 'Аннулирован'. Для наглядности сведём их в таблицу.
| Статус | Описание |
|---|---|
| Отправлен | Документ передан в СБИС, ожидает обработки |
| Доставлен | Документ получен контрагентом |
| Подписан | Контрагент подписал документ (ЭДО завершён) |
| Отказано | Контрагент отказался от подписания |
| Аннулирован | Отправка отменена (до подписания) |
Облачная подпись и роуминг
СБИС поддерживает облачную подпись через сервис «СБИС Облачная подпись» — сертификат хранится на серверах Тензора, подпись происходит через API без необходимости устанавливать КриптоПро на продакшн-сервере. Это существенно упрощает деплой. Облачная подпись выполняется вызовом метода СБИС.ПодписатьОблачнойПодписью, куда передаются идентификатор сертификата и xml-содержимое. Облачная подпись сокращает время развёртывания интеграции в 2 раза по сравнению с настройкой КриптоПро CSP.
СБИС поддерживает роуминг с Диадоком и другими операторами. Документ, отправленный через СБИС, доставляется контрагенту в Диадоке автоматически. Это снимает проблему «у нас СБИС, у них Диадок» в большинстве случаев. В коде это означает: один API-вызов к СБИС, доставка прозрачна для отправителя.
Как настроить интеграцию за 3 шага?
- Получить доступ к API СБИС. Убедитесь, что тариф включает ЭДО, и получите логин/пароль от аккаунта.
-
Реализовать PHP-клиент. Используйте приведённый выше класс
SbisClient— он покрывает аутентификацию, отправку и статусы. -
Привязать к событиям Битрикс. Навесьте обработчик на смену статуса заказа (например,
OnSaleOrderSaved) для автоматической отправки.
Этот базовый сценарий занимает 3–4 недели с учётом отладки. При необходимости добавьте обработку облачной подписи и роуминга.
Кейс из практики: интеграция для поставщика продуктов питания
Наш клиент — оптовый поставщик продуктов — работал через несколько ЭДО-операторов одновременно (часть контрагентов — через Диадок, часть — через СБИС, часть — через ЭДО Лайт ФНС). Задача: единый интерфейс в Битрикс для работы со всеми ЭДО без переключения между веб-кабинетами.
Архитектура:
Создан абстрактный класс 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% |
| Затраты на документооборот | $1.1k–1.6k./мес | $270–390./мес |
Для каждого провайдера реализован свой формат XML-документа. СБИС требует русскоязычные названия тегов, Диадок — английские. Преобразование выполняется в адаптере. Статусы синхронизируются по расписанию cron каждые 10 минут.
Что входит в работу?
- Регистрация в СБИС, получение API-доступа
- Настройка облачной подписи или КриптоПро CSP
- Разработка PHP-клиента СБИС API
- Генерация XML-документов в формате ФНС
- Обработчики событий Битрикс: отправка при смене статуса заказа
- Синхронизация статусов через polling (cron)
- Отображение статуса в карточке заказа
- Документация и обучение менеджеров
- Поддержка после запуска (2 недели)
Сроки ориентировочно
Базовая интеграция с одним оператором — 3–4 недели. При работе с несколькими ЭДО-операторами через единый интерфейс — 8–12 недель. Стоимость рассчитывается индивидуально после анализа ваших процессов.
Какие ошибки возникают при интеграции?
- Неправильный выбор оператора. Если контрагент использует другой ЭДО, необходимо настроить роуминг. СБИС поддерживает его с большинством операторов, но список нужно проверять.
- Отсутствие повторных попыток. API может временно не отвечать — добавляйте retry с экспоненциальной задержкой.
- Истечение сессии. Сессия СБИС живёт 24 часа — реализуйте автоматическую реавторизацию.
Преимущества интеграции под ключ
Мы выполнили более 50 интеграций с различными ЭДО, работаем с Битрикс более 10 лет. Ваш проект получит готовое решение с гарантией стабильности и поддержкой. Свяжитесь с нами для оценки вашего проекта. Закажите интеграцию под ключ — получите единый интерфейс для всех ЭДО без головной боли.







