Как настроить прием данных из внешних систем (CRM, сайты) в 1С через HTTP-сервисы?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Многие разработчики, начиная работу с HTTP-сервисами в 1С, сталкиваются с ситуацией, когда примеры в документации ограничиваются лишь «выдачей» данных наружу: списки номенклатуры, остатки на складах или статусы заказов. Однако современная интеграция требует двустороннего обмена. В этой статье мы подробно разберем, как заставить 1С не просто показывать информацию, но и активно принимать её из внешних систем, таких как CRM (Bitrix24, amoCRM) или маркетплейсы.

Понимаем разницу между GET и POST

Для начала проанализируем механику протокола HTTP. Большинство простых примеров используют метод GET. Он предназначен исключительно для получения информации. Чтобы внешняя система (например, ваша CRM) могла передать в 1С данные о новом заказе, нам необходимо использовать метод POST. Именно этот метод позволяет передать «тело запроса», в котором будет содержаться вся необходимая структура данных в формате JSON или XML.

Рассмотрим стандартный сценарий: в CRM появился заказ. Вместо того чтобы 1С постоянно «опрашивала» CRM с помощью регламентных заданий (что создает лишнюю нагрузку), CRM сама выступает инициатором. Она отправляет POST запрос на опубликованный адрес вашего HTTP-сервиса в 1С, передавая данные заказа. 1С принимает этот запрос, обрабатывает его и мгновенно создает документ в базе.

Проектирование HTTP-сервиса в 1С

Разберем по шагам, как создать такой сервис в конфигураторе. Нам потребуется объект HTTPСервис. При создании важно правильно настроить «Шаблон URL». Например, шаблон вида /создать_заказ/* позволит обращаться к сервису по понятному адресу.

Внутри шаблона мы создаем «Метод». В поле «HTTP метод» выбираем POST. Это критически важный момент: если внешняя система пришлет данные методом POST на метод 1С, настроенный как GET, сервер вернет ошибку 405 (Method Not Allowed).

Реализация обработки входящих данных

Теперь перейдем к самому главному — написанию кода в модуле HTTP-сервиса. Нам нужно прочитать данные, которые прислала CRM. В 1С для этого используется объект HTTPСервисЗапрос. Разберем типичный пример обработки входящего JSON-пакета:


Функция СоздатьЗаказНаСервере(Запрос)
    
    // Получаем тело запроса в виде строки
    СтрокаJSON = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    
    // Подготавливаем чтение JSON
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    
    // Десериализуем данные в структуру 1С
    ДанныеЗаказа = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // Начинаем транзакцию для создания документа
    НачатьТранзакцию();
    Попытка
        НовыйЗаказ = Документы.ЗаказКлиента.СоздатьДокумент();
        НовыйЗаказ.Дата = ТекущаяДата();
        НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ДанныеЗаказа.ИмяКлиента);
        // Заполнение остальных реквизитов из структуры ДанныеЗаказа...
        
        НовыйЗаказ.Записать(РежимЗаписиДокумента.Запись);
        ЗафиксироватьТранзакцию();
        
        // Формируем успешный ответ
        Ответ = Новый HTTPСервисОтвет(201); // Статус "Created"
        Ответ.УстановитьТелоИзСтроки("Заказ успешно создан с номером: " + НовыйЗаказ.Номер);
    Исключение
        ОтменитьТранзакцию();
        // Возвращаем ошибку сервера
        Ответ = Новый HTTPСервисОтвет(500);
        Ответ.УстановитьТелоИзСтроки("Ошибка при создании заказа: " + ОписаниеОшибки());
    КонецПопытки;
    
    Возврат Ответ;
    
КонецФункции

Важные нюансы работы с ответами

Выясним причину, по которой внешние системы иногда «ругаются» на 1С, даже если заказ создался. Это происходит из-за неправильных кодов ответа. Если ваша 1С «скушала» данные, она обязана вернуть статус 200 (OK) или 201 (Created). Если данные не прошли валидацию — 400 (Bad Request). Внешняя система ориентируется именно на эти коды, чтобы понять, нужно ли повторять попытку отправки позже.

Безопасность и публикация

Проанализируем ситуацию с безопасностью. Выставлять базу 1С напрямую в интернет — плохая практика. Рассмотрим рекомендации профессионалов из обсуждения:

  1. Использование прокси-сервера: Рекомендуется настроить Nginx или Apache в качестве прокладки. Это позволит скрыть реальный IP-адрес сервера 1С и настроить дополнительные фильтры.
  2. Авторизация: Используйте Basic Auth. Для этого в 1С создается отдельный пользователь с минимальными правами (роль «Удаленный доступ к HTTP-сервисам»), чьи логин и пароль будут передаваться в заголовках запроса от CRM.
  3. Ограничение по IP: Если вы точно знаете адреса, с которых CRM отправляет данные, настройте белый список IP на уровне веб-сервера.

Отладка входящих запросов

Многие новички жалуются, что точка останова в коде HTTP-сервиса не срабатывает. Разберем, как правильно настроить отладку:

Архитектурный подход: Webhooks

То, что автор темы называл «чтобы 1С поняла, что нужно забрать данные», в ИТ-мире называется Webhooks. Это современный стандарт. Вместо того чтобы 1С работала как «пылесос», собирая данные по расписанию, она работает как «слушатель». Как только в CRM происходит событие (создание заказа, изменение статуса), CRM сама «стучится» в 1С. Это обеспечивает интеграцию в режиме реального времени и экономит ресурсы сервера.

Посмотрим на пример из жизни маркетплейсов: когда покупатель на Яндекс.Маркете нажимает кнопку «Оплатить», маркет не ждет, пока 1С соизволит проверить заказы. Он мгновенно отправляет запрос в 1С. Если 1С в течение нескольких секунд не подтвердит наличие товара (через ответ вашего HTTP-сервиса), сделка может не состояться. Именно поэтому использование HTTPСервис — самый эффективный метод интеграции на сегодня.

← На главную