Интеграция 1С с сайтом: публикация веб-сервисов и обмен данными

Всем привет, с вами Низамов Илья. Разберём интеграцию 1С с сайтом — не в привязке к одной версии платформы, а как две рабочие схемы, которые применимы на актуальных версиях 1С:Предприятия 8.3.

Два способа интеграции 1С с сайтом

  • HTTP-сервис 1С — 1С публикуется на веб-сервере и отдаёт/принимает данные по HTTP (JSON/XML). Подходит для обмена данными с сайтом на любом стеке: PHP, Django, Nuxt, WordPress.
  • Встраивание веб-клиента в iframe — сама форма 1С показывается внутри страницы сайта, а обмен сообщениями идёт через глобальный контекст платформы. Доступно начиная с версии 8.3.16.

Способ 1. HTTP-сервис 1С для обмена данными с сайтом

Это основной способ, когда сайту нужны не формы 1С, а именно данные — остатки, цены, статусы заказов.

Шаг 1. Создать HTTP-сервис в конфигураторе

В дереве конфигурации создаётся объект «HTTP-сервис», у него задаётся корневой URL (например, ex) и шаблоны URL для методов — GET, POST, PUT. Каждому шаблону соответствует функция-обработчик в модуле сервиса:

Функция ПолучитьТовар(Запрос) Экспорт
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(ТекстJSON, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
    Ответ.Заголовки.Вставить("Content-Type", "application/json");
    Возврат Ответ;
КонецФункции

Шаг 2. Опубликовать информационную базу на веб-сервере

В конфигураторе: «Администрирование» → «Публикация на веб-сервере», выбрать Apache или IIS, указать имя публикации и разрешить нужные HTTP-сервисы галочкой. Подробный порядок настройки веб-сервера — в официальной документации 1С на ИТС.

Шаг 3. Проверить публикацию

Опубликованный сервис доступен по адресу вида https://host/base/hs/ex/product. На этом шаге сразу стоит закрыть публикацию HTTPS-сертификатом и базовой или токен-аутентификацией — HTTP-сервис 1С без авторизации, торчащий наружу, это открытая дыра в базу.

Шаг 4. Настроить обмен данными с сайтом

Сайт делает обычные HTTP-запросы к сервису (fetch, curl, requests) и получает JSON — дальше это стандартная интеграция, без специфики 1С на стороне сайта. Разбор синтаксиса HTTP-сервисов и типовых ошибок — в статьях на Инфостарт.

Если нагрузка на публичном сайте непредсказуемая (рекламные всплески, SPA с большим количеством запросов), HTTP-сервис 1С стоит прятать не за фронтендом напрямую, а за отдельным backend-слоем, который берёт пиковую нагрузку на себя и обращается к 1С уже из внутренней сети. Когда такой слой нужен, а когда 1С справляется сама — разобрано с цифрами нагрузочного теста в статье «1С backend для web? Да вы смеетесь».

Способ 2. Встраивание веб-клиента в iframe (начиная с 8.3.16)

Начиная с платформы 8.3.16 возможна и обратная схема: не 1С забирает данные с сайта через HTTP-сервис, а веб-клиент 1С встраивается прямо в страницу сайта внутри <iframe>, и стороны обмениваются сообщениями напрямую.

Подобное встраивание предполагает выполнение следующих действий:

  • Выделение на странице сайта области, в которой будет исполняться веб-клиент.
  • Реализация на встроенном языке 1С интерфейса, который отвечает за обмен данными с сайтом, куда встраивается решение, плюс настройка режима основного окна и прав доступа к нему.
  • Реализация на стороне сайта интерфейса на JavaScript, который сообщает веб-клиенту нужный режим работы и обменивается с ним данными.

Общие требования к такой интеграции:

  • Прикладное решение должно быть опубликовано на веб-сервере и доступно через веб-клиент.
  • Веб-сервер должен быть корректно настроен для встраивания решения в сайт.
  • Для работы с сайтом, в который встроен веб-клиент, нужно использовать только поддерживаемые платформой браузеры.

У прикладного решения есть свойство глобального контекста ОкноВнешнегоСайта. Через него решение получает интерфейс к сайту, если оно в этот сайт встроено. Интерфейс даёт три действия:

  • Проверить, что веб-клиент работает внутри сайта — свойство ОкноВнешнегоСайта.Доступно. Все дальнейшие обращения к ОкноВнешнегоСайта стоит выполнять только после проверки, что это свойство равно Истина.
  • Получать сообщения от сайта — метод ОкноВнешнегоСайта.ПодключитьОбработчикСообщений(), отключить приём — ОкноВнешнегоСайта.ОтключитьОбработчикСообщений().
  • Отправлять сообщения сайту — метод ОкноВнешнегоСайта.ОтправитьСообщение().

А если сайт уже на WooCommerce?

Способы выше — универсальные: они одинаково работают с сайтом на любом движке, потому что со стороны сайта это просто HTTP-запросы или JavaScript. Но если задача уже сузилась до конкретной пары «1С + WooCommerce» — синхронизация каталога, остатков и заказов интернет-магазина на WordPress, — писать HTTP-сервис и клиентскую часть с нуля избыточно: там есть свои нюансы работы с WooCommerce REST API и типовые сценарии синхронизации, которые разобраны отдельно в статье «WooCommerce и 1С». Общий подход из этой статьи (HTTP-сервис плюс обмен JSON) — это то, что использует любая точечная интеграция под конкретную CMS внутри себя.

Где научиться собирать такую интеграцию руками

Если нужен не просто HTTP-сервис для обмена данными, а полноценный веб-сервис на базе 1С с очередями и личным кабинетом — на курсе «B2B-сервис для 1С» на Django разбирается связка 1С и backend на Django. Фронтенд поверх такой архитектуры — на курсе «NuxtJS + 1С». Если с HTTP-сервисами 1С ещё не работали вообще, стартовая точка — курс «HTTP в 1С для начинающих», без него оба способа выше будут скорее теорией, чем рабочим навыком.

Конфигурация и html страница из видео — скачать.

Чтобы не пропустить выход новых видео подписывайся на канал, а мы приступаем.