Как реализовать API-интеграцию по HTTPS и загрузить фото товаров в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При организации взаимодействия 1С 7.7 с современными веб-сервисами и API поставщиков разработчики часто сталкиваются с проблемой получения данных по защищенному протоколу HTTPS. В штатном функционале платформы 1С 7.7 отсутствуют встроенные средства для работы с JSON и декодирования двоичных данных из формата Base64, а компонент v7httpreader не поддерживает шифрование HTTPS. Рассмотрим по шагам, как построить полноценный механизм загрузки фотографий товаров через API поставщика.

Выбор транспорта: почему v7httpreader не подходит для HTTPS

Выясним, почему стандартный компонент v7httpreader оказывается неработоспособным при попытке обратиться к API большинства сервисов. Данный компонент проектировался для устаревшего протокола HTTP и не умеет работать со с защищенными SSL/TLS-соединениями. При попытке сделать запрос по адресу, начинающемуся с https://, компонента возвращает ошибку или пустое тело ответа.

Для выполнения HTTPS-запросов в среде 1С 7.7 следует использовать системный OLE-объект Windows — WinHttp.WinHttpRequest.5.1. Он полноценно поддерживает заголовки HTTP, передачу параметров GET/POST и шифрование TLS.

Шаг 1. Отправка HTTPS-запроса к API поставщика

Проанализируем пример кода для отправки HTTP GET-запроса с помощью WinHttp.WinHttpRequest.5.1. Обратим внимание на то, что для работы с современными веб-серверами необходимо принудительно указывать протокол шифрования TLS 1.2 через опцию Option(9) со значением 2048.


URL = "https://api.supplier.com/v1/products/photos";
HTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");

// Инициализация GET-запроса (0 - синхронный режим)
HTTP.Open("GET", URL, 0);

// Устанавливаем заголовки запроса
HTTP.SetRequestHeader("Content-Type", "application/json");
HTTP.SetRequestHeader("Authorization", "Bearer ВАШ_ТОКЕН_ДОСТУПА");

// Принудительно включаем поддержку TLS 1.2
HTTP.Option(9) = 2048;

// Отправляем запрос на сервер
HTTP.Send();

Если HTTP.Status <> 200 Тогда
    Предупреждение("Ошибка запроса: " + HTTP.Status + " " + HTTP.StatusText);
Иначе
    ОтветСервера = HTTP.ResponseText;
КонецЕсли;

Шаг 2. Разбор (парсинг) JSON-ответа в 1С 7.7

Так как в 1С 7.7 нет встроенного объекта для разбора JSON, воспользуемся компонентом MSScriptControl.ScriptControl с движком JavaScript. Это позволит преобразовать текстовую строку JSON в объект и прочитать требуемые свойства или массив фото товаров.


Sc = СоздатьОбъект("MSScriptControl.ScriptControl");
Sc.Language = "jscript";

// Создаем вспомогательную функцию для парсинга
Sc.AddCode("function parseJson(str) { return JSON.parse(str); }");

// Получаем объект JSON
JsonObject = Sc.Run("parseJson", ОтветСервера);

// Пример получения строки Base64 конкретного фото из структуры
СтрокаBase64 = JsonObject.photo_base64;

Шаг 3. Декодирование Base64 и сохранение изображения на диск

После получения строки с фото в формате Base64 ее необходимо раскодировать в двоичные данные (массив байтов) и сохранить как графический файл (JPG или PNG). В 1С 7.7 для этого сочетают два COM-объекта: MSXML2.DOMDocument (для декодирования строки) и ADODB.Stream (для записи бинарного файла на диск).

Рассмотри пример реализации сохранения из формата Base64:


ИмяФайла = "C:\Photos\product_123.jpg";

// Декодируем строку Base64 через элемент DOMDocument
DOM = СоздатьОбъект("MSXML2.DOMDocument");
Elem = DOM.createElement("b64");
Elem.dataType = "bin.base64";
Elem.text = СтрокаBase64;

// Записываем бинарный массив в поток ADODB.Stream
Stream = СоздатьОбъект("ADODB.Stream");
Stream.Type = 1; // adTypeBinary (двоичный режим)
Stream.Open();
Stream.Write(Elem.nodeTypedValue);

// Сохраняем файл на диск (2 - перезаписывать существующий)
Stream.SaveToFile(ИмяФайла, 2);
Stream.Close();

Важные особенности и технические ограничения 1С 7.7

Разберем основные нюансы, о которых нужно помнить при обработке фото через API в 1С 7.7:

  1. Ограничения по памяти: Платформа 1С 7.7 является 32-разрядным приложением. Передача слишком больших строк Base64 через MSScriptControl или внутренние переменные 1С может вызывать критическое нехватку операционной памяти и аварийное завершение работы программы.
  2. Прямые ссылки вместо Base64: Если API поставщика позволяет запрашивать не Base64-код, а прямые HTTPS-ссылки на изображения, предпочтительнее получать именно ссылки. Файл по прямой ссылке можно скачивать напрямую через ResponseBody объекта WinHttpRequest и сразу передавать в ADODB.Stream без промежуточного декодирования.
  3. Внешние обработчики: В случае загрузки больших каталогов с высокими разрешениями фото рекомендуется выносить механизм скачивания во внешний скрипт (на Python, PowerShell или C#), который выбывается из 1С 7.7 через КомандаСистемы(...) и самостоятельно раскладывает готовые файлы картинок по папкам.
← На главную