Інтеграція 1С-Бітрікс з системою ЕДО СБІС
Компанія втрачає до 80% часу співробітників на ручне введення документів у веб-кабінет СБІС. Один наш клієнт — оптовий постачальник продуктів — витрачав 15 хвилин на створення кожного документа. При 500 замовленнях на місяць це 125 годин роботи одного менеджера. Після інтеграції з Бітрікс документи йдуть автоматично при зміні статусу замовлення. Технічно СБІС (Тензор) надає власний JSONRPC-протокол, відмінний від REST-концепції Діадока. Для інтеграції знадобиться PHP-клієнт з сесійною авторизацією, підтримкою хмарного підпису та обробкою роумінгу. Нижче — як це реалізувати та уникнути типових помилок.
Вибір СБІС часто вимушений — якщо контрагент використовує лише цього оператора. Але інтеграція окупається: знижується час обробки замовлень, зникають помилки ручного введення. Ми провели понад 50 інтеграцій з ЕДО та накопичили типові рішення. Середня економія за рік становить 1,8 млн грн, а при обсязі від 1000 документів на місяць — до 3 млн грн на операційних витратах.
Як працює 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% |
| Витрати на документообіг | 120 000 грн/міс | 30 000 грн/міс |
Для кожного провайдера реалізовано власний формат XML-документа. СБІС вимагає російськомовні назви тегів, Діадок — англійські. Перетворення виконується в адаптері. Статуси синхронізуються за розкладом cron кожні 10 хвилин.
Що входить в роботу?
- Реєстрація в СБІС, отримання API-доступу
- Налаштування хмарного підпису або КриптоПро CSP
- Розробка PHP-клієнта СБІС API
- Генерація XML-документів у форматі ФНС
- Обробники подій Бітрікс: відправка при зміні статусу замовлення
- Синхронізація статусів через polling (cron)
- Відображення статусу в картці замовлення
- Документація та навчання менеджерів
- Підтримка після запуску (2 тижні)
Терміни орієнтовно
Базова інтеграція з одним оператором — 3–4 тижні. При роботі з кількома ЕДО-операторами через єдиний інтерфейс — 8–12 тижнів. Вартість розраховується індивідуально після аналізу ваших процесів.
Які помилки виникають при інтеграції?
- Неправильний вибір оператора. Якщо контрагент використовує інший ЕДО, необхідно налаштувати роумінг. СБІС підтримує його з більшістю операторів, але список потрібно перевіряти.
- Відсутність повторних спроб. API може тимчасово не відповідати — додавайте retry з експоненційною затримкою.
- Витікання сесії. Сесія СБІС живе 24 години — реалізуйте автоматичну реавторизацію.
Переваги інтеграції під ключ
Ми виконали понад 50 інтеграцій з різними ЕДО, працюємо з Бітрікс понад 10 років. Ваш проект отримає готове рішення з гарантією стабільності та підтримкою. Зв'яжіться з нами для оцінки вашого проекту. Замовте інтеграцію під ключ — отримайте єдиний інтерфейс для всіх ЕДО без головного болю.







