Как получить API-токен в 1С и что делать, если сервер возвращает HTML-код вместо JSON?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С с внешними API, работающими на базе облачных инфраструктур (например, AWS CloudFront), разработчики часто сталкиваются с ситуацией, когда вместо ожидаемого токена в формате JSON сервер возвращает полноценную HTML-страницу. Разберем, почему это происходит и как правильно настроить обмен данными, чтобы ваш код 1С успешно получал авторизационные токены.

Анализ проблемы: почему возвращается HTML?

Если вы отправляете POST-запрос к API, но в ответе видите структуру стандартного клиентского приложения (теги <app-root>, ссылки на .js и .css файлы), это означает, что ваш запрос не достиг целевого обработчика API. Сервер воспринял его как обращение к «фронтенду» сайта.

Чаще всего причина кроется в двух аспектах:

  1. Неверный адрес эндпоинта: Вы обращаетесь к основному домену сайта (интерфейсной части), а не к выделенному техническому домену API.
  2. Отсутствие маршрутизации: Запрос не находит точного соответствия пути, и облачный балансировщик (например, CloudFront) по умолчанию перенаправляет пользователя на главную страницу приложения.

Шаг 1: Проверка доменного имени и эндпоинтов

Первым делом необходимо свериться с документацией API. Очень часто разработчики совершают ошибку, используя URL, который они видят в адресной строке браузера при входе в личный кабинет. Однако для программного взаимодействия провайдеры почти всегда выделяют отдельный поддомен, например api.service.com или api-qa.service.com. Как показала практика, замена домена на корректный API-адрес решает проблему в большинстве случаев.

Шаг 2: Правильное формирование запроса в 1С

Рассмотрим структуру кода для отправки POST-запроса с параметрами авторизации. Мы будем использовать объект HTTPСоединение и HTTPЗапрос. Важно правильно передать заголовки и тело запроса.


// Пример корректной подготовки запроса
Сервер = "api-qa.wabi2b.com"; // Важно: используйте правильный API-домен
Порт = 443;
Ресурс = "/user/client/login";

// Формируем тело JSON
JSON = Новый ЗаписьJSON;
JSON.УстановитьСтроку();
ПараметрыЗапроса = Новый Структура("client,secret", Логин, Пароль);
ЗаписатьJSON(JSON, ПараметрыЗапроса);
Тело = JSON.Закрыть();

// Формируем заголовки
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json"); // Явно указываем ожидаемый формат ответа

HTTPЗапрос = Новый HTTPЗапрос(Ресурс, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(Тело);

Соединение = Новый HTTPСоединение(Сервер, Порт, , , , , Новый ЗащищенноеСоединениеOpenSSL);
Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Шаг 3: Диагностика заголовков ответа

Если после смены домена вы все еще не получаете нужный ответ, проанализируйте заголовки ответа Ответ.Заголовки. Обратите внимание на следующие поля:

Рекомендации по отладке

  1. Используйте Postman или cURL: Прежде чем кодировать в 1С, проверьте запрос в Postman. Это исключит ошибки в синтаксисе 1С. Если Postman тоже получает HTML — проблема 100% на стороне URL или заголовков.
  2. Проверьте протокол: Убедитесь, что используете HTTPS (порт 443) и передаете объект ЗащищенноеСоединениеOpenSSL. Без этого соединение может быть сброшено или отклонено сервером.
  3. Кодировка: Всегда указывайте Content-Type: application/json; charset=utf-8, чтобы избежать проблем с интерпретацией символов на стороне сервера.
  4. Следите за перенаправлениями: HTTPСоединение в 1С не всегда автоматически переходит по редиректам (301/302). Если в заголовках есть Location, возможно, вам нужно изменить адрес в коде на тот, который указан в этом поле.

Помните, что API — это строгий протокол. В отличие от браузера, который пытается «понять» ошибку и показать страницу, API ожидает строго определенного формата. Если вы четко следуете документации API, используете правильный домен и корректные заголовки Content-Type, интеграция пройдет успешно.

← На главную