HTTP-запросы в 1С — работа с API

Как отправлять HTTP-запросы из 1С для интеграции с внешними сервисами: веб-API, маркетплейсы, CRM.

📋 Когда нужны HTTP-запросы

  • Интеграция с маркетплейсами (Ozon, WB, YM)
  • Обмен с CRM (Битрикс24, AmoCRM)
  • Получение курсов валют
  • Проверка контрагентов
  • Отправка уведомлений (Telegram, SMS)

Базовый GET-запрос

Функция ВыполнитьGETЗапрос(URL) Экспорт
    
    // Парсим URL
    СтруктураURL = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL);
    
    // Создаём соединение
    Если СтруктураURL.Схема = "https" Тогда
        Соединение = Новый HTTPСоединение(
            СтруктураURL.Хост, 443, , , , 30,
            Новый ЗащищенноеСоединениеOpenSSL);
    Иначе
        Соединение = Новый HTTPСоединение(СтруктураURL.Хост, 80);
    КонецЕсли;
    
    // Формируем запрос
    Запрос = Новый HTTPЗапрос(СтруктураURL.ПутьНаСервере);
    
    // Выполняем
    Ответ = Соединение.Получить(Запрос);
    
    Возврат Ответ.ПолучитьТелоКакСтроку();
    
КонецФункции

POST-запрос с JSON

Функция ВыполнитьPOSTЗапрос(Хост, Путь, ТелоЗапроса, Заголовки = Неопределено) Экспорт
    
    Соединение = Новый HTTPСоединение(Хост, 443, , , , 30,
        Новый ЗащищенноеСоединениеOpenSSL);
    
    Если Заголовки = Неопределено Тогда
        Заголовки = Новый Соответствие;
    КонецЕсли;
    Заголовки.Вставить("Content-Type", "application/json");
    
    Запрос = Новый HTTPЗапрос(Путь, Заголовки);
    Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
    
    Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
    
    Возврат Новый Структура("КодСостояния, Тело",
        Ответ.КодСостояния,
        Ответ.ПолучитьТелоКакСтроку());
    
КонецФункции

Работа с JSON

Преобразование структуры в JSON:

Функция СтруктураВJSON(Данные) Экспорт
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Данные);
    Возврат ЗаписьJSON.Закрыть();
КонецФункции

Парсинг JSON в структуру:

Функция JSONВСтруктуру(СтрокаJSON) Экспорт
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
    Данные = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    Возврат Данные;
КонецФункции

Авторизация

Bearer Token:

Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + ВашТокен);
Заголовки.Вставить("Content-Type", "application/json");

Запрос = Новый HTTPЗапрос("/api/data", Заголовки);

Basic Auth:

// Логин:пароль в Base64
Credentials = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(
    Логин + ":" + Пароль, КодировкаТекста.UTF8));

Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Basic " + Credentials);

API-ключ в заголовке:

// Для Ozon
Заголовки.Вставить("Client-Id", ClientId);
Заголовки.Вставить("Api-Key", ApiKey);

// Для Wildberries
Заголовки.Вставить("Authorization", ApiKey);

Практический пример: Telegram-бот

Процедура ОтправитьВТелеграм(Токен, ChatId, Сообщение) Экспорт
    
    Соединение = Новый HTTPСоединение("api.telegram.org", 443, , , , 30,
        Новый ЗащищенноеСоединениеOpenSSL);
    
    Путь = "/bot" + Токен + "/sendMessage";
    
    ТелоЗапроса = Новый Структура;
    ТелоЗапроса.Вставить("chat_id", ChatId);
    ТелоЗапроса.Вставить("text", Сообщение);
    ТелоЗапроса.Вставить("parse_mode", "HTML");
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");
    
    Запрос = Новый HTTPЗапрос(Путь, Заголовки);
    Запрос.УстановитьТелоИзСтроки(СтруктураВJSON(ТелоЗапроса));
    
    Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
    
    Если Ответ.КодСостояния <> 200 Тогда
        ВызватьИсключение "Ошибка отправки: " + Ответ.ПолучитьТелоКакСтроку();
    КонецЕсли;
    
КонецПроцедуры

⚠️ Обработка ошибок

Попытка
    Ответ = Соединение.Получить(Запрос);
Исключение
    // Ошибка соединения
    ЗаписьЖурналаРегистрации("HTTP", 
        УровеньЖурналаРегистрации.Ошибка, , ,
        ОписаниеОшибки());
    Возврат Неопределено;
КонецПопытки;

// Проверка кода ответа
Если Ответ.КодСостояния >= 400 Тогда
    // 4xx - ошибка клиента, 5xx - ошибка сервера
    ВызватьИсключение "HTTP " + Ответ.КодСостояния;
КонецЕсли;

Нужна интеграция с API?

Настрою обмен 1С с любым веб-сервисом: маркетплейсы, CRM, платёжные системы.

Обсудить интеграцию →