Інтеграція 1С-Бітрікс із системою ЕДО СВІС

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із системою ЕДО СВІС
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

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