Інтеграція 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 тижнів.







