Создание хранилища конфигурации

This commit is contained in:
2025-05-15 17:56:42 +03:00
commit af42567ca9
42 changed files with 3421 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
#Область ПрограммныйИнтерфейс
Функция ВыполнитьGetЗапрос(АдресРесурса, Параметры = Неопределено, ДвоичныеДанные = Ложь) Экспорт
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Если Параметры <> Неопределено Тогда
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
КонецЕсли;
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type","application/json");
Ответ = Соединение.Получить(Запрос);
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
Лог.Дата = ТекущаяДатаСеанса();
Лог.HTTPЗапрос = Запрос.АдресРесурса;
Лог.HTTPОтвет = ?(ДвоичныеДанные,"Двоичные данные",
HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку()));
Лог.Записать();
КонецЕсли;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
ТелоОтвета = ?(ДвоичныеДанные, Ответ.ПолучитьТелоКакДвоичныеДанные(), Ответ.ПолучитьТелоКакСтроку());
Иначе
ТелоОтвета = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ.ПолучитьТелоКакСтроку());
Описание = ?(ТелоОтвета.Получить("description") <> Неопределено, ТелоОтвета["description"], "");
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
СтрШаблон("Не удалось выполнить запрос. Код состояния = %1. %2", КодСостояния, Описание));
ТелоОтвета = Неопределено;
КонецЕсли;
Возврат ТелоОтвета;
КонецФункции
Функция ВыполнитьPostЗапрос(АдресРесурса, Параметры = Неопределено, Тело = Неопределено) Экспорт
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Если Параметры <> Неопределено Тогда
АдресРесурса = АдресРесурсаСПараметрами(АдресРесурса, Параметры);
КонецЕсли;
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type","application/json");
Если Тело <> Неопределено Тогда
Запрос.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Тело));
КонецЕсли;
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Константы.ЛогироватьHttpЗапросы.Получить() Тогда
Лог = Документы.ЛогHttpЗапроса.СоздатьДокумент();
Лог.Дата = ТекущаяДатаСеанса();
Лог.HTTPЗапрос = Запрос.АдресРесурса;
Лог.HTTPОтвет = HttpОбщегоНазначения.ФорматированныйJson(Ответ.ПолучитьТелоКакСтроку());
Лог.Записать();
КонецЕсли;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Тогда
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось выполнить запрос. Код состояния = " + КодСостояния;
Сообщение.Сообщить();
ТелоОтвета = Неопределено;
КонецЕсли;
Возврат ТелоОтвета;
КонецФункции
Функция СтрокаJsonВОбъект(СтрокаJson) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJson);
Попытка
ИтоговоеСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Возврат ИтоговоеСоответствие;
Исключение
Ошибка = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Ошибка конвертации из JSON в объект", УровеньЖурналаРегистрации.Ошибка,,,Ошибка);
КонецПопытки;
Возврат Неопределено;
КонецФункции
Функция ОбъектВСтрокуJson(Объект) Экспорт
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
Попытка
ЗаписатьJSON(ЗаписьJSON, Объект);
Возврат ЗаписьJSON.Закрыть();
Исключение
Ошибка = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Ошибка конвертации объекта в JSON", УровеньЖурналаРегистрации.Ошибка,,,Ошибка);
КонецПопытки;
Возврат "";
КонецФункции
Функция ФорматированныйJson(СтрокаJson) Экспорт
Возврат ОбъектВСтрокуJson(СтрокаJsonВОбъект(СтрокаJson));
КонецФункции
Функция ОтветУспех() Экспорт
СтруктураОтвета = Новый Структура("result", "ok");
Возврат ОтветJson(СтруктураОтвета, 200);
КонецФункции
Функция ОтветОшибка() Экспорт
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации("HTTPСервисы.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
СтруктураОтвета = Новый Структура("result, description", "error", КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат ОтветJson(СтруктураОтвета, 500);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ОтветJson(Объект, КодСостояния)
Ответ = Новый HTTPСервисОтвет(КодСостояния);
Ответ.Заголовки.Вставить("Content-Type","application/json");
Ответ.УстановитьТелоИзСтроки(ОбъектВСтрокуJson(Объект));
Возврат Ответ;
КонецФункции
Функция АдресРесурсаСПараметрами(АдресРесурса, Параметры)
Если Параметры.Количество() = 0 Тогда
Возврат АдресРесурса;
КонецЕсли;
МассивПараметров = Новый Массив;
Для каждого Параметр Из Параметры Цикл
Если НЕ ЗначениеЗаполнено(Параметр.Значение) Тогда
Продолжить;
КонецЕсли;
МассивПараметров.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, Параметр.Значение));
КонецЦикла;
Возврат СтрШаблон("%1?%2", АдресРесурса, СтрСоединить(МассивПараметров, "&"));
КонецФункции
#КонецОбласти