#Область ПрограммныйИнтерфейс // Выполняет именованный запрос на партнёрской ИБ (исходная crm3_placentapharm). // // Параметры: // ИмяЗапроса - Строка - series_export, partners_by_inn, ... // Параметры - Структура - параметры запроса // // Возвращаемое значение: // Структура - meta, columns, rows (как в JSON API) // Функция ВыполнитьЗапросПартнёра(ИмяЗапроса, Параметры = Неопределено) Экспорт Если Параметры = Неопределено Тогда Параметры = Новый Структура; КонецЕсли; АдресБазы = ""; Ключ = ""; Попытка АдресБазы = СокрЛП(Константы.РК_TransferAPIАдресПартнёра.Получить()); Ключ = СокрЛП(Константы.РК_TransferAPIКлюч.Получить()); Исключение ВызватьИсключение "Константы Transfer API не настроены"; КонецПопытки; Если ПустаяСтрока(АдресБазы) Тогда ВызватьИсключение "Не задан РК_TransferAPIАдресПартнёра"; КонецЕсли; Возврат ВыполнитьHTTPЗапрос(АдресБазы, Ключ, ИмяЗапроса, Параметры); КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции Функция ВыполнитьHTTPЗапрос(АдресБазы, Ключ, ИмяЗапроса, Параметры) URL = СокрЛП(АдресБазы); Тело = Новый Структура; Тело.Вставить("query", ИмяЗапроса); Тело.Вставить("params", Параметры); Тело.Вставить("format", "json"); Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); ЗаписатьJSON(Запись, Тело); ТекстТела = Запись.Закрыть(); Разбор = РазобратьURL(АдресБазы); ПутьЗапроса = Разбор.Путь; Если Не СтрЗаканчиваетсяНа(ПутьЗапроса, "/") Тогда ПутьЗапроса = ПутьЗапроса + "/"; КонецЕсли; ПутьЗапроса = ПутьЗапроса + "v1/query"; Соединение = Новый HTTPСоединение( Разбор.Хост, Разбор.Порт, Разбор.Пользователь, Разбор.Пароль, , 120, ?(Разбор.HTTPS, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено)); ЗапросHTTP = Новый HTTPЗапрос(ПутьЗапроса); ЗапросHTTP.Заголовки.Вставить("Authorization", "Bearer " + Ключ); ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8"); ЗапросHTTP.УстановитьТелоИзСтроки(ТекстТела, КодировкаТекста.UTF8); ОтветHTTP = Соединение.ОтправитьДляОбработки(ЗапросHTTP); ТекстОтвета = ОтветHTTP.ПолучитьТелоКакСтроку(); Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда ЗаписьЖурналаРегистрации("РК_TransferAPI.Партнёр", УровеньЖурналаРегистрации.Ошибка, , , "HTTP " + ОтветHTTP.КодСостояния + ": " + ТекстОтвета); ВызватьИсключение "Ошибка HTTP " + ОтветHTTP.КодСостояния + ": " + ТекстОтвета; КонецЕсли; Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(ТекстОтвета); Результат = ПрочитатьJSON(Чтение); Чтение.Закрыть(); ЗаписьЖурналаРегистрации("РК_TransferAPI.Партнёр", УровеньЖурналаРегистрации.Информация, , , ИмяЗапроса + " → OK"); Возврат Результат; КонецФункции Функция РазобратьURL(Адрес) Результат = Новый Структура("Хост, Порт, Путь, HTTPS, Пользователь, Пароль", "", 0, "", Ложь, "", ""); СтрокаURL = СокрЛП(Адрес); HTTPS = СтрНачинаетсяС(НРег(СтрокаURL), "https://"); Если СтрНачинаетсяС(НРег(СтрокаURL), "http://") Тогда СтрокаURL = Сред(СтрокаURL, 8); ИначеЕсли HTTPS Тогда СтрокаURL = Сред(СтрокаURL, 9); КонецЕсли; Результат.HTTPS = HTTPS; ПозицияПути = СтрНайти(СтрокаURL, "/"); ХостПорт = ?(ПозицияПути > 0, Лев(СтрокаURL, ПозицияПути - 1), СтрокаURL); Результат.Путь = ?(ПозицияПути > 0, Сред(СтрокаURL, ПозицияПути), "/"); ПозицияПорта = СтрНайти(ХостПорт, ":"); Если ПозицияПорта > 0 Тогда Результат.Хост = Лев(ХостПорт, ПозицияПорта - 1); Результат.Порт = Число(Сред(ХостПорт, ПозицияПорта + 1)); Иначе Результат.Хост = ХостПорт; Результат.Порт = ?(HTTPS, 443, 80); КонецЕсли; Возврат Результат; КонецФункции #КонецОбласти