Отправка запроса и получение ответа по API (GET, POST, PUT, DELETE)
Интеграция
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Обработка предназначена для удобной отправки запросов к API и проверки ответов сервиса. Она может быть полезна разработчикам 1С при тестировании и отладке интеграций.
Я использовал обработку для проверки запросов в тестовом кабинете системы «Честный знак». На скриншотах показан пример обращения к методу получения информации по коду маркировки (КМ).
Процедура ОтправитьЗапрос ()
ТекстСОтветом.Очистить();
Адрес = СтрЗаменить(АдресПространства, "https://", "");
СертификатОС = Новый СертификатКлиентаWindows();
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(СертификатОС);
Если Порт = 0 Тогда
СоединениеHTTP = Новый HTTPСоединение(Адрес, , , , , ,ЗащищенноеСоединение);
Иначе
СоединениеHTTP = Новый HTTPСоединение(Адрес,Порт , , , , ,ЗащищенноеСоединение);
КонецЕсли;
Заголовки = Новый Соответствие;
Для каждого СтрЗаголовка из ЗаголовкиЗапроса Цикл
Заголовки.Вставить(СокрЛП(СтрЗаголовка.Параметр), СокрЛП(СтрЗаменить(Строка(СтрЗаголовка.Значение),Символы.НПП,"")));
КонецЦикла;
СтрокаПараметров = "?";
Для Каждого СтрокаПараметра из ПараметрыМетода Цикл
Если МетодПередачаЭкран Тогда
СтрокаПараметров = СтрокаПараметров + СокрЛП(СтрокаПараметра.Параметр)+"="+СокрЛП(СтрЗаменить(Строка(СтрокаПараметра.ЗначениеЭкран),Символы.НПП,""))+"&";
Иначе
СтрокаПараметров = СтрокаПараметров + СокрЛП(СтрокаПараметра.Параметр)+"="+СокрЛП(СтрЗаменить(Строка(СтрокаПараметра.Значение),Символы.НПП,""))+"&";
КонецЕсли;
КонецЦикла;
Если СтрокаПараметров = "?" Тогда
ЗапросHTTP = Новый HTTPЗапрос(МетодАПИ, Заголовки);
Иначе
СтрокаПараметров = Лев(СтрокаПараметров,СтрДлина(СтрокаПараметров)-1);
ЗапросHTTP = Новый HTTPЗапрос(МетодАПИ+СтрокаПараметров, Заголовки);
КонецЕсли;
Если ТелоЗапросаПердачаЭкран Тогда
ЗапросHTTP.УстановитьТелоИзСтроки(Строка(СокрЛП(ТелоЗапросаДляОтправки.ПолучитьТекст())),Кодировка);
Иначе
ЗапросHTTP.УстановитьТелоИзСтроки(Строка(СокрЛП(ТекстЗапроса.ПолучитьТекст())),Кодировка);
КонецЕсли;
Если Гет или Пут или Пост или Делит Тогда
Если Гет Тогда
Метод = "GET";
ИначеЕсли Пут Тогда
Метод = "PUT";
ИначеЕсли Пост Тогда
Метод = "POST";
ИначеЕсли Делит Тогда
Метод = "DELETE";
КонецЕсли;
Попытка
РезультатЗапроса = СоединениеHTTP.ВызватьHTTPМетод(Метод,ЗапросHTTP);
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
РазложитьДжисон = РаскодироватьСтрокуJS(ТекстОтвета);
ТекстСОтветом.ВставитьСтроку(1,"Код результата: "+Строка(РезультатЗапроса.КодСостояния));
ТекстСОтветом.ВставитьСтроку(2,РазложитьДжисон);
Исключение
Сообщить("Запрос не прошел")
КонецПопытки;
Иначе
Попытка
РезультатЗапроса = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
РазложитьДжисон = РаскодироватьСтрокуJS(ТекстОтвета);
ТекстСОтветом.ВставитьСтроку(1,"Код результата: "+Строка(РезультатЗапроса.КодСостояния));
ТекстСОтветом.ВставитьСтроку(2,РазложитьДжисон);
Исключение
Сообщить("Запрос не прошел")
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Функция РаскодироватьСтрокуJS(СтрокаJSON)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Попытка
Результат = ПрочитатьJSON(ЧтениеJSON);
Исключение
Возврат СтрокаJSON;
КонецПопытки;
Возврат СформироватьТекстJSON(Результат);
КонецФункции
Функция СформироватьТекстJSON(СтруктураJSON)
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто," ",Истина,
ЭкранированиеСимволовJSON.СимволыВнеBMP,истина,истина,истина,истина,истина);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(ПараметрыЗаписи);
ЗаписатьJSON(Запись, СтруктураJSON, Новый НастройкиСериализацииJSON);
Результат = Запись.Закрыть();
Возврат Результат;
КонецФункции
Функция ПреоброзоватьСтрокуВДжисн (РезультатТекст)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(РезультатТекст);
РезультатСоответствие = ПрочитатьJSON(ЧтениеJSON);
Возврат РезультатСоответствие;
КонецФункции
Функция ПреоброзоватьТелоДляДжисон (ИсходнаяСтрока)
Попытка
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто," ",Истина,
ЭкранированиеСимволовJSON.СимволыВнеBMP,истина,истина,истина,истина,истина);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(ПараметрыЗаписи);
Запись.ЗаписатьЗначение(ИсходнаяСтрока);
Тело = Запись.Закрыть();
Возврат Тело;
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
Функция ВернутьСтуктуруИзJSON(ТекстJSON)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Структура = ЗаполнитьСтруктуруИзОтветаJSON(Чтение);
Чтение.Закрыть();
Возврат Структура;
КонецФункции
Функция ЗаполнитьСтруктуруИзОтветаJSON(Знач Чтение)
Результат = Новый Структура;
ПоследнееИмяРеквизита = Неопределено;
Пока Чтение.Прочитать() Цикл
Тип = Чтение.ТипТекущегоЗначения;
Если Тип = ТипЗначенияJSON.НачалоОбъекта И ПоследнееИмяРеквизита<>Неопределено Тогда
Результат[ПоследнееИмяРеквизита] = ЗаполнитьСтруктуруИзОтветаJSON(Чтение);
ИначеЕсли Тип = ТипЗначенияJSON.КонецОбъекта Тогда
Возврат Результат;
ПоследнееИмяРеквизита = Неопределено;
ИначеЕсли Тип = ТипЗначенияJSON.ИмяСвойства Тогда
Результат.Вставить(Чтение.ТекущееЗначение, Неопределено);
ПоследнееИмяРеквизита = Чтение.ТекущееЗначение;
ИначеЕсли Тип = ТипЗначенияJSON.Булево или Тип = ТипЗначенияJSON.Строка
или Тип = ТипЗначенияJSON.Число или Тип = ТипЗначенияJSON.Null Тогда
Результат[ПоследнееИмяРеквизита] = Чтение.ТекущееЗначение;
ИначеЕсли Тип = ТипЗначенияJSON.НачалоМассива Тогда
Результат[ПоследнееИмяРеквизита] = ЗаполнитьМассивИзОтветаJSON(Чтение);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ЗаполнитьМассивИзОтветаJSON(Знач Чтение)
Результат = Новый Массив;
Пока Чтение.Прочитать() Цикл
Тип = Чтение.ТипТекущегоЗначения;
Если Тип = ТипЗначенияJSON.НачалоОбъекта Тогда
Результат.Добавить(ЗаполнитьСтруктуруИзОтветаJSON(Чтение));
ИначеЕсли Тип = ТипЗначенияJSON.КонецМассива Тогда
Возврат Результат;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура СделатьЗапросНаСервере()
ОтправитьЗапрос();
КонецПроцедуры
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.6.2.68
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.39.53
- Управление торговлей, редакция 11, релизы 11.6.2.68
Вступайте в нашу телеграмм-группу Инфостарт