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, платёжные системы.
Обсудить интеграцию →