Как интегрировать 1С:УПП со Smartway по API и отправить JSON-RPC запрос?

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

Рассмотрим ситуацию: руководство приняло решение интегрировать корпоративную учетную систему на базе устаревшей конфигурации 1С:УПП 1.3 с сервисом бронирования билетов и гостиниц Smartway. Если в современных типовых конфигурациях (таких как 1С:ERP 2.5, 1С:Бухгалтерия 3.0, УТ 11 или ЗУП 3.1) функционал обмена встроен «из коробки» благодаря Библиотеке стандартных подсистем, то для УПП штатных механизмов не существует. Разберем по шагам, как настроить такую интеграцию с нуля, используя HTTP-запросы и API сервиса. Для перехода с устаревшей программы на современные версии 1С предусмотрен раздел с решениями для подбора переноса данных из УПП.

Анализ проблемы и архитектура JSON-RPC 2.0

Проанализируем распространенную ошибку, с которой сталкиваются разработчики при первой попытке работы с API Smartway. Сервис использует протокол JSON-RPC 2.0. Главная особенность этого стандарта заключается в том, что все запросы отправляются методом POST на единый базовый URL-адрес (endpoint), например, /v2. При этом само вызываемое действие (метод API) передается не в адресной строке, а внутри тела формата JSON в параметре method.

В исходном варианте была допущена маршрутизационная ошибка: метод trip.get_by_range подставлялся прямо в URL HTTP-запроса. Кроме того, формирование строки JSON производилось простой конкатенацией текста, что часто приводит к синтаксическим ошибкам, проблемам с экранированием кавычек и неверной передаче вложенных структур.

Решение: правильное формирование и отправка запроса

Посмотрим на пример корректного решения. Для надежного формирования тела запроса мы будем использовать встроенные классы платформы ЗаписьJSON и Структура. Это позволит платформе 1С автоматически обработать все типы данных и корректно расставить кавычки. Для изучения аналогичных механизмов работы с JSON в этой конфигурации подойдёт обработка для выгрузки цен и остатков номенклатуры.

Важное техническое замечание: Объекты ЗаписьJSON и ЧтениеJSON появились в платформе 1С:Предприятие начиная с версии 8.3.6. Убедитесь, что ваша технологическая платформа обновлена. Если вы используете более старую платформу (например, 8.2), вам придется прибегнуть к использованию COM-объектов или внешних компонент.

Разберем рабочий код для получения списка поездок:


Процедура ПолучитьПоездкиНаСервере()
    // 1. Формируем структуру запроса
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Ложь;
    ЗаписьJSON.УстановитьСтроку();
    
    СтруктураЗапроса = Новый Структура;
    СтруктураЗапроса.Вставить("jsonrpc", "2.0");
    СтруктураЗапроса.Вставить("id", "777");
    СтруктураЗапроса.Вставить("method", "trip.get_by_range");
    
    // Вложенная структура параметров авторизации и фильтров
    СтруктураАвторизации = Новый Структура("username, password", "example@smartway.today", "example");
    СтруктураЗапросаПериода = Новый Структура("start_date, end_date", Формат(ТекущаяДата()-864000, "ДФ=yyyy-MM-dd"), Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"));
    
    СтруктураПараметров = Новый Структура("authorization, query", СтруктураАвторизации, СтруктураЗапросаПериода);
    СтруктураЗапроса.Вставить("params", СтруктураПараметров);
    
    ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    // 2. Настраиваем защищенное соединение и отправляем POST запрос
    СерверПриемник = "api.smartway.today";
    HTTPСоединение = Новый HTTPСоединение(СерверПриемник, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
    
    // Обращаемся к базовому endpoint, метод передали в теле
    HTTPЗапрос = Новый HTTPЗапрос("/v2");
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    // 3. Получаем и читаем ответ
    HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    СтрокаОтветаСервера = HTTPОтвет.ПолучитьТелоКакСтроку();
    
    Сообщить("Код состояния: " + HTTPОтвет.КодСостояния);
    
    // 4. Парсим полученный ответ
    Если HTTPОтвет.КодСостояния = 200 Тогда
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(СтрокаОтветаСервера);
        СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
        
        // Дальнейшая обработка СтруктураОтвета...
    Иначе
        Сообщить("Ошибка запроса: " + СтрокаОтветаСервера);
    КонецЕсли;

КонецПроцедуры

Что еще можно автоматизировать через API Smartway?

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

  1. Кадровый обмен: Вы можете настроить автоматическую выгрузку данных о сотрудниках и структуре подразделений из 1С:УПП в Smartway. Это избавит отдел кадров от необходимости дублировать создание карточек пользователей в двух системах, в том числе путём создания программных роботов для имитации действий пользователя.
  2. Авансовые отчеты: Если сотрудник оформляет документы в приложении, вы можете написать парсер, который будет разбирать полученный JSON с суммами и программно создавать документ АвансовыйОтчет в УПП, автоматически заполняя табличные части.
  3. Закрывающие документы: API позволяет вытягивать маршрутные квитанции, акты и счета-фактуры. Данные по НДС можно программно распределять на нужные счета учета без ручного ввода бухгалтером.
  4. Согласование командировок: Если в вашей УПП реализован механизм внутренних заявок на командировки, при их утверждении руководителем можно автоматически отправлять сигнал (POST-запрос) в Smartway, разрешающий бронирование билетов сотруднику в рамках установленных лимитов.

Проанализировав данное решение, мы видим, что интеграция сторонних API в старые конфигурации, такие как УПП, требует ручного написания HTTP-клиентов. Однако использование стандартов JSON-RPC и современных объектов платформы 1С для парсинга делает этот процесс надежным и предсказуемым.

← На главную