2dfa49b2cf
Добавлены РК_TransferAPI, серверный/клиентский модули, константы ключа и адреса партнёрской ИБ, роль вызова API. Co-authored-by: Cursor <cursoragent@cursor.com>
127 lines
5.8 KiB
Plaintext
127 lines
5.8 KiB
Plaintext
|
|
#Область ПрограммныйИнтерфейс
|
|
|
|
// Выполняет именованный запрос на партнёрской ИБ (исходная 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);
|
|
КонецЕсли;
|
|
|
|
Возврат Результат;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|