// Функция возвращает структуру полей, согласно документации
// Документация: https://cardinfo.online/doc
//
// Параметры:
// ПараметрыЗапроса - Структура - поля запроса, согласно документации:
// apiKey (обязательно) — ваш ключ API, который вы найдёте в личном кабинете.
// input (обязательно) — первые 1–6 цифр в номере банковской карты.
// brandLogoWidth, brandLogoHeight, bankLogoWidth, bankLogoHeight — размеры логотипов в пикселях.
// От них будет зависеть, какая ссылка будет указана в PNG версии логотипов. Если оставить пустыми, то ссылка будет дана без указания размеров.
// fields — перечень полей через запятую, которые необходимо вернуть. Если оставить пустым, будут возвращены все поля.
//
// ПрочитатьВСоответствие - Булево - Флаг того, что ответ должен быть получен в виде Соответствия
//
// Возвращаемое значение:
// Структура/Соответствие, Неопределено - Поля, что вернул сервис api.cardinfo.online
// Если произойдет ошибка, будет возвращено Неопределено
//
Функция ИнформацияОКарте(Знач ПараметрыЗапроса, Знач ПрочитатьВСоответствие = Ложь) Экспорт
// Подправим параметры запроса: удалим пробелы из номера карты и обрежем длину до 6 символов
Если ПараметрыЗапроса.Свойство("input") Тогда
ПараметрыЗапроса.input = Лев(СтрЗаменить(ПараметрыЗапроса.input, " ", ""), 6);
КонецЕсли;
АдресСервиса = "api.cardinfo.online";
ШаблонМетода = "";
Ответ = ВыполнитьHTTPЗапрос(АдресСервиса, ШаблонМетода, "GET", ПараметрыЗапроса);
Если Ответ = Неопределено Тогда
СтруктураОтвета = Неопределено;
ИначеЕсли Ответ.КодСостояния = 200 Тогда
// Получили корректный ответ - разбираем его
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
СтруктураОтвета = UnJSON(СтрокаОтвет, "Выполнение метода " + АдресСервиса, ПрочитатьВСоответствие);
// Все поля, которые содержат строку, похожую на ссылку загружаем
Если СкачиватьИзображения Тогда
МассивОбъектов = Новый Массив;
Для Каждого КлючИЗначение Из СтруктураОтвета Цикл
ЗначениеПоля = КлючИЗначение.Значение; // Здесь ожидаем URL вида https://api.cardinfo.online/assets/brand--visa--light.svg
Если ТипЗнч(ЗначениеПоля) = Тип("Строка") И Лев(ЗначениеПоля,4) = "http" Тогда
// Делаем запросы
//ОтправитьЗапросАсинхронноНачало(ЗначениеПоля,,, ЗначениеПоля, МассивОбъектов);
ИмяВременногоФайла = СкачатьФайлИзИнтернет(ЗначениеПоля);
СтруктураОтвета.Вставить(КлючИЗначение.Ключ, Новый Картинка(ИмяВременногоФайла));
КонецЕсли;
КонецЦикла;
КонецЕсли;
Конецесли;
Возврат СтруктураОтвета;
КонецФункции
Функция ВыполнитьHTTPЗапрос(Знач АдресСервиса, Знач ШаблонМетода, Знач Направление = "Get", Знач Параметры, Знач ДопПараметрыСтрокой = "") Экспорт
// Собираем текст запроса
СтрПараметры = "";
Для Каждого КлючИЗначение Из Параметры Цикл
ИмяПараметра = КлючИЗначение.Ключ;
ЗначениеПараметра = Формат(КлючИЗначение.Значение, "ЧРД=.; ЧГ=");
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
СтрПараметры = СтрПараметры + ?(СтрПараметры = "", "", "&") + ИмяПараметра + "=" + ЗначениеПараметра;
КонецЕсли;
КонецЦикла;
СтрПараметры = СтрПараметры + ?(ДопПараметрыСтрокой="", "", "&" + ДопПараметрыСтрокой);
//ТекстЗапроса = encodeURIComponent(ТекстЗапроса);
Таймаут = 15;
HTTPСоединение = Новый HTTPСоединение(АдресСервиса,,,,, Таймаут, Новый ЗащищенноеСоединениеOpenSSL);
HTTPЗапрос = Новый HTTPЗапрос();
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
Попытка
Если ВРЕГ(Направление) = "GET" Тогда
СтрПараметры = ?(СтрПараметры="", "", "?" + СтрПараметры);
ТекстЗапроса = ?(ШаблонМетода= "", "", "/") + ШаблонМетода + СтрПараметры;
HTTPЗапрос.АдресРесурса = ТекстЗапроса;
Ответ = HTTPСоединение.Получить(HTTPЗапрос);
ИначеЕсли ВРЕГ(Направление) = "POST" Тогда
HTTPЗапрос.УстановитьТелоИзСтроки(СтрПараметры, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
HTTPЗапрос.АдресРесурса = ШаблонМетода;
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Иначе
Сообщить("Не знаю как обрабатывать направление " + Направление);
Возврат Неопределено
КонецЕсли;
Исключение
Сообщить("Ошибка при выполнении запроса " + АдресСервиса + "/" + ТекстЗапроса + ". " + ОписаниеОшибки());
Возврат Неопределено
КонецПопытки;
КодСостояния = Ответ.КодСостояния;
Если КодСостояния <> 200 Тогда
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
//СтрокаОтвет = ПереобразоватьЮникод(СтрокаОтвет);
ТекстОшибки = "URI ресурса: " + АдресСервиса + HTTPЗапрос.АдресРесурса + Символы.ПС + "Тело: " + HTTPЗапрос.ПолучитьТелоКакСтроку() + Символы.ПС +
"Ответ: " + СтрокаОтвет;
Сообщить("Ошибка: " + ТекстОшибки, СтатусСообщения.Важное);
Возврат Неопределено
КонецЕсли;
Возврат Ответ;
КонецФункции