Настройка получения данных по API по протокол...
-

Настройка получения данных по API по протоколу HTTPS

0
473
15.06.2026 Кирилл Бугаев

Содержание:

1.    Введение в механизм управления взаимодействиями с финансовыми сервисами

2.    Детальный разбор кода с пояснениями для работы с финансовыми API

3.    Полный код функции для получения курсов валют

4.    Дополнительные аспекты работы с финансовыми API в 1С


1.    Введение в механизм управления взаимодействиями с финансовыми сервисами


Интеграция платформы 1С с внешними финансовыми сервисами через HTTPS-протокол представляет собой критически важный инструмент автоматизации бизнес-процессов в современной экономической среде. Данная технология позволяет в реальном времени получать актуальную финансовую информацию, что особенно востребовано при работе с международными контрактами, ведении мультивалютного учета и формировании финансовой отчетности. Основное преимущество HTTPS перед HTTP заключается в обеспечении конфиденциальности и целостности передаваемых данных, что критически важно для финансовой информации, учитывая ее чувствительность и потенциальные последствия от компрометации.


В условиях быстро меняющихся экономических реалий возможность автоматического получения курсов валют из проверенных источников становится не просто удобством, а необходимостью для поддержания конкурентного преимущества. Использование защищенного протокола HTTPS гарантирует, что финансовые данные не будут перехвачены или модифицированы в процессе передачи, что особенно актуально при работе с открытыми сетями интернет.


2.    Детальный разбор кода с пояснениями для работы с финансовыми API


Блок 1: Объявление функции и базовой логики для получения курсов валют.

// Функция выполняет запрос к веб-сервису для получения актуальных курсов валют на определенную дату.  

// Возвращает прочитанную структуру данных (объект) в случае успеха или Неопределено в случае ошибки.

//

// Параметры:

//  ДатаЗапроса - Дата - Дата, на которую требуется получить курсы валют.

//  БазоваяВалюта - Строка - Код базовой валюты (например, "USD", "EUR", "RUB").

//

// Возвращаемое значение:

//  Структура, Неопределено - Данные о курсах валют в виде структуры или Неопределено при ошибке.

//

Функция ПолучитьКурсыВалютНаДату(ДатаЗапроса, БазоваяВалюта = "RUB") Экспорт

    // 1. Инициализация переменной для результата

    ДанныеКурсовВалют = Неопределено;


Пояснение: В этом блоке мы объявляем основную функцию, которая будет доступна для вызова из других модулей (ключевое слово `Экспорт`). В отличие от предыдущего примера с ИНН, здесь мы работаем с финансовыми данными - курсами валют. Переменная `ДанныеКурсовВалют` инициализируется значением `Неопределено` - это стандартный подход в 1С для указания того, что значение еще не установлено. Параметр `БазоваяВалюта` имеет значение по умолчанию "RUB", что делает функцию более универсальной.


Блок 2: Формирование параметров запроса для финансового API.

    // 2. Формирование целевого URL (адреса запроса) на основе переданных параметров

    ФорматДаты = Формат(ДатаЗапроса, "ДФ=yyyy-MM-dd");

    ПараметрыЗапроса = "?date=" + ФорматДаты + "&base=" + БазоваяВалюта;

    ПутьКРесурсу = "/api/v1/currency/rates"; // Условный путь к методу API

    ПолныйURL = ПутьКРесурсу + ПараметрыЗапроса;


Пояснение: Здесь формируется строка запроса к API финансового сервиса. Обратите внимание на формат параметров - после знака вопроса `?` указываются названия параметров (`date` и `base`) и их значения. Формат даты "yyyy-MM-dd" является стандартом для большинства API. Пользователям нужно заменить `"/api/v1/currency/rates"` на актуальный путь к методу API конкретного финансового сервиса, с которым происходит интеграция.


Блок 3: Настройка защищенного соединения для финансовых операций.

    // 3. Настройка параметров защищенного HTTPS-соединения для финансовых данных

    //    Хост (адрес сервера), Порт 443 (стандартный для HTTPS), Таймаут (сек.)

    ИмяСервераAPI = "api.financial-data-provider.com";

    ПортСервера = 443;

    ТаймаутСоединения = 45; // Увеличенный таймаут для финансовых запросов

    // Создание объекта, отвечающего за настройки защищенного соединения

    НастройкиЗащиты = Новый ЗащищенноеСоединениеOpenSSL();


Пояснение: Это критически важный блок для обеспечения безопасности финансовых операций. Порт 443 является стандартным для HTTPS-соединений. Таймаут увеличен до 45 секунд, так как финансовые API могут обрабатывать большие объемы данных и требовать больше времени для ответа. Объект `ЗащищенноеСоединениеOpenSSL()` обеспечивает использование SSL/TLS шифрования. Пользователи должны заменить `"api.financial-data-provider.com"` на реальный адрес сервера финансового API.


Блок 4: Создание и настройка HTTP-соединения с дополнительными параметрами безопасности.

    Попытка

        // Создание соединения с сервером с повышенными требованиями к безопасности

        Соединение = Новый HTTPСоединение(

            ИмяСервераAPI,

            ПортСервера,

            ,           // Прокси-сервер (не используется)

            ,           // Имя пользователя прокси

            ,           // Пароль прокси

            ТаймаутСоединения,

            НастройкиЗащиты // Важно: указание использовать SSL/TLS

        );

    Исключение

        Сообщить("Ошибка создания соединения с финансовым сервером: " + ОписаниеОшибки());

        Возврат ДанныеКурсовВалют; // Вернет Неопределено

    КонецПопытки;


Пояснение: Конструктор `HTTPСоединение` принимает несколько параметров, из которых в нашем случае важны только хост, порт, таймаут и настройки защиты. Для финансовых операций особенно важно обеспечить стабильное и безопасное соединение. Обратите внимание на конструкцию `Попытка...Исключение` - она обрабатывает возможные ошибки при установке соединения, которые могут возникнуть из-за проблем с сертификатами или сетевым подключением.


Блок 5: Подготовка HTTP-запроса с финансовыми заголовками.

    // 4. Создание и настройка объекта HTTP-запроса для финансового API

    HTTPЗапрос = Новый HTTPЗапрос(ПолныйURL);

    // Установка необходимых HTTP-заголовков для финансовых данных

    HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");

    HTTPЗапрос.Заголовки.Вставить("User-Agent", "1C-Enterprise/8.3 (Financial Module)");

    HTTPЗапрос.Заголовки.Вставить("Accept", "application/vnd.financial-data.v1+json");


Пояснение: Заголовки HTTP-запроса играют важную роль при работе с финансовыми API. `Content-Type: application/json` сообщает серверу, что мы ожидаем данные в формате JSON. `User-Agent` идентифицирует клиента - в нашем случае это финансовый модуль платформы 1С. Дополнительный заголовок `Accept` указывает на ожидаемую версию API финансовых данных. Некоторые финансовые API требуют дополнительные заголовки для авторизации, такие как `Authorization` с API-ключом.


Блок 6: Выполнение запроса и обработка финансового ответа.

    // 5. Выполнение запроса типа GET и обработка финансового ответа

    Попытка

        HTTPОтвет = Соединение.Получить(HTTPЗапрос);

    Исключение

        Сообщить("Сетевая ошибка при выполнении финансового запроса: " + ОписаниеОшибки());

        Возврат ДанныеКурсовВалют;

    КонецПопытки;

    // 6. Анализ кода состояния HTTP для финансовых данных

    Если HTTPОтвет.КодСостояния = 200 Тогда

        // Запрос успешно обработан сервером

        ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();


Пояснение: Метод `Соединение.Получить()` выполняет GET-запрос. Код состояния 200 означает успешное выполнение запроса. Для финансовых данных особенно важно проверять этот код, так как сервер может вернуть различные ошибки (404 - данные не найдены, 429 - превышен лимит запросов, 500 - внутренняя ошибка сервера и т.д.). Финансовые API часто имеют ограничения на количество запросов, поэтому важно корректно обрабатывать соответствующие коды ошибок.


Блок 7: Парсинг JSON-данных с финансовой информацией.

        // 7. Десериализация JSON-ответа с финансовыми данными в структуру 1С

        Попытка

            ЧтениеJSON = Новый ЧтениеJSON;

            ЧтениеJSON.УстановитьСтроку(ТекстОтвета);

            ДанныеКурсовВалют = ПрочитатьJSON(ЧтениеJSON);

            // Дополнительная проверка наличия необходимых данных в ответе

            Если Не ДанныеКурсовВалют.Свойство("rates") Тогда

                Сообщить("Получены неполные данные о курсах валют");

                ДанныеКурсовВалют = Неопределено;

            КонецЕсли;

        Исключение

            Сообщить("Ошибка разбора JSON-ответа с финансовыми данными: " + ОписаниеОшибки());

            ДанныеКурсовВалют = Неопределено;

        КонецПопытки;


Пояснение: Этот блок преобразует строку с JSON-данными в структуры и массивы 1С, с которыми можно работать привычными методами. Для финансовых данных добавлена дополнительная проверка на наличие ключевого поля "rates", которое обычно содержит собственно курсы валют. Если JSON некорректен или не содержит ожидаемых данных, будет вызвано исключение, которое мы обрабатываем.


Блок 8: Обработка различных статус-кодов финансового API.

    ИначеЕсли HTTPОтвет.КодСостояния = 404 Тогда

        Сообщить("Данные о курсах валют на указанную дату не найдены в сервисе.");

    ИначеЕсли HTTPОтвет.КодСостояния = 429 Тогда

        Сообщить("Превышен лимит запросов к финансовому сервису. Попробуйте позже.");

    ИначеЕсли HTTPОтвет.КодСостояния = 401 Тогда

        Сообщить("Ошибка авторизации при обращении к финансовому сервису.");

    Иначе

        Сообщить("Финансовый сервер вернул ошибку. Код состояния HTTP: " + HTTPОтвет.КодСостояния);

    КонецЕсли;

    Возврат ДанныеКурсовВалют;

КонецФункции


Пояснение: Здесь мы обрабатываем различные сценарии ответа от финансового сервера. Код 404 обрабатывается отдельно, так как это ожидаемая ситуация (данные на запрашиваемую дату могут отсутствовать). Код 429 (слишком много запросов) особенно важен для финансовых API, которые часто ограничивают количество бесплатных запросов. Код 401 указывает на проблемы с авторизацией, что актуально для платных финансовых сервисов. Все остальные коды ошибок обрабатываются общим блоком.


3.    Полный код функции для получения курсов валют


// Функция выполняет запрос к веб-сервису для получения актуальных курсов валют на определенную дату.

// Возвращает прочитанную структуру данных (объект) в случае успеха или Неопределено в случае ошибки.

//

// Параметры:

//  ДатаЗапроса - Дата - Дата, на которую требуется получить курсы валют.

//  БазоваяВалюта - Строка - Код базовой валюты (например, "USD", "EUR", "RUB").

//

// Возвращаемое значение:

//  Структура, Неопределено - Данные о курсах валют в виде структуры или Неопределено при ошибке.

//

Функция ПолучитьКурсыВалютНаДату(ДатаЗапроса, БазоваяВалюта = "RUB") Экспорт

    // 1. Инициализация переменной для результата

    ДанныеКурсовВалют = Неопределено;

    // 2. Формирование целевого URL (адреса запроса) на основе переданных параметров

    ФорматДаты = Формат(ДатаЗапроса, "ДФ=yyyy-MM-dd");

    ПараметрыЗапроса = "?date=" + ФорматДаты + "&base=" + БазоваяВалюта;

    ПутьКРесурсу = "/api/v1/currency/rates"; // Условный путь к методу API

    ПолныйURL = ПутьКРесурсу + ПараметрыЗапроса;

    // 3. Настройка параметров защищенного HTTPS-соединения для финансовых данных

    //    Хост (адрес сервера), Порт 443 (стандартный для HTTPS), Таймаут (сек.)

    ИмяСервераAPI = "api.financial-data-provider.com";

    ПортСервера = 443;

    ТаймаутСоединения = 45; // Увеличенный таймаут для финансовых запросов

    // Создание объекта, отвечающего за настройки защищенного соединения

    НастройкиЗащиты = Новый ЗащищенноеСоединениеOpenSSL();

    Попытка

        // Создание соединения с сервером с повышенными требованиями к безопасности

        Соединение = Новый HTTPСоединение(

            ИмяСервераAPI,

            ПортСервера,

            ,           // Прокси-сервер (не используется)

            ,           // Имя пользователя прокси

            ,           // Пароль прокси

            ТаймаутСоединения,

            НастройкиЗащиты // Важно: указание использовать SSL/TLS

        );

    Исключение

        Сообщить("Ошибка создания соединения с финансовым сервером: " + ОписаниеОшибки());

        Возврат ДанныеКурсовВалют; // Вернет Неопределено

    КонецПопытки;

    // 4. Создание и настройка объекта HTTP-запроса для финансового API

    HTTPЗапрос = Новый HTTPЗапрос(ПолныйURL);

    // Установка необходимых HTTP-заголовков для финансовых данных

    HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");

    HTTPЗапрос.Заголовки.Вставить("User-Agent", "1C-Enterprise/8.3 (Financial Module)");

    HTTPЗапрос.Заголовки.Вставить("Accept", "application/vnd.financial-data.v1+json");

    // 5. Выполнение запроса типа GET и обработка финансового ответа

    Попытка

        HTTPОтвет = Соединение.Получить(HTTPЗапрос);

    Исключение

        Сообщить("Сетевая ошибка при выполнении финансового запроса: " + ОписаниеОшибки());

        Возврат ДанныеКурсовВалют;

    КонецПопытки;

    // 6. Анализ кода состояния HTTP для финансовых данных

    Если HTTPОтвет.КодСостояния = 200 Тогда

        // Запрос успешно обработан сервером

        ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();

        // 7. Десериализация JSON-ответа с финансовыми данными в структуру 1С

        Попытка

            ЧтениеJSON = Новый ЧтениеJSON;

            ЧтениеJSON.УстановитьСтроку(ТекстОтвета);

            ДанныеКурсовВалют = ПрочитатьJSON(ЧтениеJSON);      

            // Дополнительная проверка наличия необходимых данных в ответе

            Если Не ДанныеКурсовВалют.Свойство("rates") Тогда

                Сообщить("Получены неполные данные о курсах валют");

                ДанныеКурсовВалют = Неопределено;

            КонецЕсли;    

        Исключение

            Сообщить("Ошибка разбора JSON-ответа с финансовыми данными: " + ОписаниеОшибки());

            ДанныеКурсовВалют = Неопределено;

        КонецПопытки;

    ИначеЕсли HTTPОтвет.КодСостояния = 404 Тогда

        Сообщить("Данные о курсах валют на указанную дату не найдены в сервисе.");

    ИначеЕсли HTTPОтвет.КодСостояния = 429 Тогда

        Сообщить("Превышен лимит запросов к финансовому сервису. Попробуйте позже.");

    ИначеЕсли HTTPОтвет.КодСостояния = 401 Тогда

        Сообщить("Ошибка авторизации при обращении к финансовому сервису.");

    Иначе

        Сообщить("Финансовый сервер вернул ошибку. Код состояния HTTP: " + HTTPОтвет.КодСостояния);

    КонецЕсли;

    Возврат ДанныеКурсовВалют;

КонецФункции


4.    Дополнительные аспекты работы с финансовыми API в 1С


При работе с финансовыми данными необходимо учитывать несколько дополнительных факторов, которые могут повлиять на надежность и точность получаемой информации. Во-первых, это вопрос актуальности данных - финансовые курсы могут меняться несколько раз в день, поэтому важно понимать, насколько свежие данные предоставляет выбранный API. Во-вторых, необходимо учитывать юридические аспекты использования финансовых данных - некоторые провайдеры требуют специальных лицензий или имеют ограничения на коммерческое использование информации.


Еще одним важным аспектом является обработка ошибок при временной недоступности сервиса. Финансовые данные критически важны для многих бизнес-процессов, поэтому рекомендуется реализовать механизм кэширования предыдущих успешных запросов или иметь резервный источник данных. Это особенно актуально для времени закрытия торговых сессий, когда нагрузка на финансовые сервисы значительно возрастает.


Также стоит обратить внимание на форматы представления финансовых данных. Разные API могут использовать различные форматы для представления курсов валют, дат и времени. Важно тщательно изучить документацию выбранного сервиса и адаптировать функцию парсинга под конкретный формат ответа. Некоторые сервисы предоставляют дополнительные метаданные, такие как время последнего обновления, источник данных и уровень доверия к информации, которые также могут быть полезны для принятия бизнес-решений.


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


Специалист компании ООО "Кодерлайн"
Кирилл Бугаев

Обсудить статью в Telegram Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.