Страницы

20 ноября 2018

HTTP-сервис 1С 2 часть

Продолжая первую статью HTTP-сервисы 1С сегодня рассмотрим способы передачи параметров HTTP-сервису 1С GET и POST методом.

Содержание:

1. Вспоминаем прошлые настройки
2. Создание метода HTTP-сервиса с параметром

3. Проверка работоспособности HTTP-сервиса с параметром
4. Передача данных по протоколу POST

5. Проверка работоспособности HTTP-сервиса по протоколу POST
6. Fiddler авторизация

1. Вспоминаем прошлые настройки

В прошлой статье мы создали чистую конфигурацию test. В нее добавили один справочник Оборудование, заполнили его тремя записями. Добавили HTTP-сервис СписокОборудования с Корневым URL - ob. Опубликовали конфигурацию под именем test.


2. Создание метода HTTP-сервиса с параметром


Откроем ранее созданный HTTP-сервис СписокОборудования, на вкладке Шаблоны URL добавьте новый шаблон ОборудованиеПоНомеру в свойстве Шаблон пропишите шаблон /info/{Code}, в качестве параметра будет выступать ключевое слово Code. Через этот параметр будем передавать номер оборудования, по нему искать и выводить найденное Название оборудования.


В шаблоне ОборудованиеПоНомеру добавляем метод obinfo. Для этого метода в свойстве HTTP-метод выбираем GET и создаем обработчик.






В обработчике напиши код поиска в справочнике Оборудование записи с кодом переданным через параметр Code и вернем результат клиенту. Ниже представлен листинг обработчика ОборудованиеПоНомеруobinfo:

Функция ОборудованиеПоНомеруobinfo(Запрос)
//Получаем значение с параметра Code
КодОборудования = Запрос.ПараметрыURL.Получить("Code"); 
     //Параметр чувствителен к регистру

//Выполняем поиск оборудования по номеру
Оборудование = Справочники.Оборудование.НайтиПоКоду(КодОборудования);

//Формируем ответ клиенту

Если Не ЗначениеЗаполнено(Оборудование) Тогда
//Если запись с таким кодом не найдена
Ответ = Новый HTTPСервисОтвет(204);
Иначе
//Если запись с такм кодом найдена, то

//Формируем структуру из найденной записи
ДанныеОборудования = Новый Структура;
ДанныеОборудования.Вставить("Code", Оборудование.Код);
ДанныеОборудования.Вставить("Naim", Оборудование.Наименование);

//Сериализуем данные в JSON
ЗаписьJOIN = Новый ЗаписьJSON;
ЗаписьJOIN.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJOIN,ДанныеОборудования);
СтрокаДляОтвета = ЗаписьJOIN.Закрыть();

//Формируем ответ клиенту
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-type","application/JOIN; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета,КодировкаТекста.UTF8,
          ИспользованиеByteOrderMark.НеИспользовать);
КонецЕсли;

//Возвращаем ответ
Возврат Ответ;

КонецФункции

Осуществим повторную публикацию нашего сервиса выполнив пункты меню Администрирование / Публикация WEB-сервера...

3. Проверка работоспособности HTTP-сервиса с параметром


Определимся, по какому URL нужно обратиться, чтобы протестировать HTTP-сервис с параметром.
Строка URL HTTP-сервиса формируется как:
HTTP://<ИмяСервера>:порт>/<ИмяКонфигурации>/hs/<КорневойURL>/<Шаблон>/<Параметр> 

где:
ИмяСервера = localhost (или название вашего ПК, или доменное имя)
Порт = 8080 (можно не указывать, по умолчанию 80 порт)
ИмяКонфигурации = test
hs – означает, что обращаемся к HTTP-сервисам
КорневойURL = ob
Шаблон = info


Параметр = 000000003 


В результате получаем: http://localhost/test/hs/ob/info/000000003
Внимание! Путь чувствителен к регистру!

Сформированный URL-адрес вводим в браузер. После нажатия Enter скачается файл или отобразится содержимое в формате JSON. Этот файл можно открыть блокнотом и посмотреть что он содержит.




Как обращаться к HTTP-сервису через язык PHP рассматривали в прошлой статье.

4. Передача данных по протоколу POST



Поставим перед собой задачу: Клиент отправляет наименование оборудования HTTP-сервису, если такого оборудования в базе нет, то создаем его и выводим результат клиенту в формате JSON.

Аналогично предыдущему описанию создаем еще один шаблон URL ОборудованиеПоНаименованию в свойстве Шаблон прописываем /infopost. 




Создаем метод МетодPost. В свойстве HTTP-метод выбираем POST. Создаем обработчик.

В обработчике пишем код: 

Функция ОборудованиеПоНаименованиюМетодPost(Запрос)
//Получаем параметр запроса 
НаименованиеОборудования = Запрос.ПараметрыЗапроса.Получить("naim"); 

//Ищем оборудование 
Оборудование = Справочники.Оборудование.НайтиПоНаименованию(НаименованиеОборудования); 
Если НЕ ЗначениеЗаполнено(Оборудование) Тогда 
Оборудование = Справочники.Оборудование.СоздатьЭлемент();
Оборудование.Наименование = НаименованиеОборудования;
Оборудование.Записать(); 
Иначе 
Оборудование = Оборудование.ПолучитьОбъект(); 
КонецЕсли; 

//Формируем структуру из найденной записи
ДанныеОборудования = Новый Структура;
ДанныеОборудования.Вставить("code", Оборудование.Код);
ДанныеОборудования.Вставить("naim", Оборудование.Наименование);

//Сериализуем данные в JSON
ЗаписьJOIN = Новый ЗаписьJSON;
ЗаписьJOIN.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJOIN,ДанныеОборудования);
СтрокаДляОтвета = ЗаписьJOIN.Закрыть();

//Формируем ответ клиенту
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-type","application/JOIN; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета,КодировкаТекста.UTF8,
        ИспользованиеByteOrderMark.НеИспользовать);

Возврат Ответ;

КонецФункции



5. Проверка работоспособности HTTP-сервиса по протоколу POST


К сожалению, нельзя из браузера, как с методом GET,  отправить запрос на HTTP-сервис. Поэтому мы воспользуемся бесплатной программой Fiddler (http://www.telerik.com/fiddler). Для создания запроса вручную достаточно перейти на вкладку Composer. Выбрать протокол POST и нажать кнопку Execute.



В результате в левой колонке мы увидим запрос клиента к HTTP-сервису. Выберем его и на вкладке JSON можно посмотреть, что вернул HTTP-сервис.



Результат в 1С.


6. Fiddler авторизация

Если в 1С имеются пользователи, то запрос в программе Fiddler без авторизации не выполнить, будет выдаваться ошибка авторизации 401.



Чтобы решить данную проблему необходимо выполнить ряд хитрых действий:
1. В программе Fiddler в меню Rules поставить галку Automatically Authenticate.
2. Для удобства поиска и просмотра нужной строки, в Fiddler очистить левый столбец (Ctrl+A и Delete) или мышкой используя контекстное меню с пунктом Remove/All sessions.
3. В браузере выполнить запрос к HTTP-сервису 1С методом GET, к примеру: http://localhost/test/hs/ob/info/000000003.
Браузер попросит ввести пользователя и пароль - производим аутентификацию. Если браузер не попросил указать логин и пароль, значит вы уже раз их вводили и браузер запомнил, нужно закрыть и открыть браузер повторно и еще раз выполнить запрос.
4. В программе Fiddler найти строку с запросом и на вкладке Headers найти параметр Authorization: Basic. 


Скопировать всю строку и вставить на вкладке Composer в поле заголовков запроса. 




Теперь можно выполнять любые запросы, в нашем случаи запрос через метод POST: http://1C/test/hs/ob/infopost?naim=Колонки
Результат выполнения



Отладив HTTP-сервисы используя программу Fiddler можно разрабатывать клинские приложения на любых языках поддерживающих JSON. К примеру в прошлой статье использовали язык PHP для создания веб страницы. 

10 комментариев:

  1. Спасибо большое! Очень полезная для разработчика статья!
    Особенно мне пригодился способ отладки HTTP сервиса (POST)

    ОтветитьУдалить
  2. Единственное авторизация в Fiddler у меня не сработала. Пришлось править файл публикации default.vrd
    ib="Srvr="192.168.xx.xxx";Ref="NameBase1C";usr=NameUser1C;pwd=1980912">

    ОтветитьУдалить
    Ответы
    1. У каждого системы настроены по разному, версии могут различаться. Поэтому бывают такие моменты. Если углубиться в проблему, решение найдется.

      Удалить
  3. Подскажите пожалуйста, как можно в сервисе, выполнить еще запрос на сервер, для получения параметра. И только потом формировать ответ.
    Например на php у меня отрабатывает вот такой код

    define('VERIFY_TOKEN', 'dfyzdfyz');

    $method = $_SERVER['REQUEST_METHOD'];

    if ($method == 'GET' && $_GET['hub_mode'] == 'subscribe'
    && $_GET['hub_verify_token'] == VERIFY_TOKEN) {
    echo $_GET['hub_challenge'];
    ......

    ОтветитьУдалить
  4. Все решилось. Кто не знает как пройти проверку для вебхуки facebook пишите.

    ОтветитьУдалить
  5. Очень приятно, что статья помогла вам найти решение поставленных задач!

    ОтветитьУдалить
  6. А зачем какие - то фидлеры php... Как из 1С отправить???

    ОтветитьУдалить
  7. Анонимный25 июня 2021 г., 08:35

    VarangaOfficial - варанга цена в аптеке - только достоверные и проверенные факты. Воспользовавшись нашим сайтом, вы получите возможность узнать исчерпывающую информацию касающуюся представленного средства. Увидеть данные о проведенных клинических исследований, прочесть реальные отзывы пациентов и врачей. Ознакомиться с инструкцией по применению, прочесть об особенностях и методах работы мази, понять, в чем заключаются особенности работы крема Варанга, где необходимо заказывать оригинальный сертифицированный препарат и, как избежать покупки подделки. Мы очень тщательно проверяем размещаемые на сайте данные. Предоставляем нашим пользователям сведения, которые были взяты исключительно из подлинных источников. Если вы обнаружили у себя признаки грибка или уже довольно продолжительное время, без ощутимых результатов пытаетесь излечиться от этого неприятного коварного недуга, на нашем сайте вы отыщете простой и быстрый способ решения проблемы. Присоединяетесь и живите полноценной, здоровой жизнью. Благодаря нам, все ответы на самые волнующие вопросы, теперь собраны в одном месте на удобной в использовании и высоко информационном ресурсе.

    ОтветитьУдалить