Как настроить авторизацию и отправку HTTP-запросов к API Seldon из 1С?

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

При интеграции 1С с сервисом Seldon.Basis (basis.myseldon.com) разработчики часто сталкиваются с ошибками авторизации (ошибка 404 Not Found или сообщение «Доступ отклонен»). Разберем по шагам, как правильно выполнить вход в систему через REST API, получить авторизационные данные и передать их в последующих HTTP-запросах.

Особенности работы с REST API Seldon

Согласно спецификации API сервиса Seldon, взаимодействие строится на следующих правилах:

  1. Авторизация выполняется методом POST по адресу /api/rest/login?.
  2. Параметры авторизации userName и password передаются в теле запроса, а не в адресной строке.
  3. Заголовок Content-Type должен иметь значение application/x-www-form-urlencoded.
  4. В случае успешной авторизации сервер возвращает HTTP-заголовок Set-Cookie, содержащий параметры сессии (например, UserConnect и .SELDONAUTH).
  5. Для всех последующих GET-запросов полученные куки необходимо передавать в заголовок Cookie.

Шаг 1. Формирование POST-запроса и получение авторизационных куки

Рассмотрим, как правильно сформировать запрос авторизации с помощью объектов платформы 1С HTTPЗапрос и HTTPСоединение.

Сначала установим необходимые заголовки запроса и поместим учётные данные в тело запроса в виде строки пар ключ-значение, разделенных символом &.


// Создаем HTTP-запрос и задаем заголовки
HTTPЗапрос = Новый HTTPЗапрос; 
HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); 
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); 
HTTPЗапрос.АдресРесурса = "/api/rest/login?"; 

// Формируем тело запроса
ТекстТелаЗапроса = "userName=" + СокрЛП(Логин) + "&password=" + СокрЛП(Пароль);
HTTPЗапрос.УстановитьТелоИзСтроки(ТекстТелаЗапроса, КодировкаТекста.UTF8);

// Устанавливаем защищенное соединение (порт 443)
СоединениеHTTP = Новый HTTPСоединение("basis.myseldon.com", 443, , , , 5, Новый ЗащищенноеСоединениеOpenSSL());

// Отправляем POST-запрос методом ОтправитьДляОбработки
ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(HTTPЗапрос);

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

// Получаем строку Set-Cookie из заголовков ответа
СтрокаSetCookie = ОтветHTTP.Заголовки.Получить("Set-Cookie");

В результате выполнения этого кода сервер вернет JSON-ответ со статусом Success, а в заголовке ответа Set-Cookie будут переданы значения куки, необходимые для дальнейшей работы.

Шаг 2. Подготовка и отправка последующих GET-запросов

Распространенная ошибка — попытка передать полученные параметры UserConnect и .SELDONAUTH как отдельные произвольные HTTP-заголовки. В этом случае сервер Seldon возвращает ответ «Доступ отклонен».

Проанализируем стандарт протокола HTTP: все куки должны передаваться серверу в едином стандартном заголовке Cookie. Сформируем и отправим GET-запрос корректно.


// Формируем заголовок Cookie из полученных данных сессии
HTTPЗапросGET = Новый HTTPЗапрос;
HTTPЗапросGET.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");

// Записываем куки в единый заголовок Cookie через точку с запятой
HTTPЗапросGET.Заголовки.Вставить("Cookie", "UserConnect=" + ЗначениеUserConnect + "; .SELDONAUTH=" + ЗначениеSELDONAUTH);

// Указываем адрес требуемого метода API
HTTPЗапросGET.АдресРесурса = "/api/rest/get_adress_tree_ref";

// Выполняем GET-запрос
ОтветHTTPGET = СоединениеHTTP.Получить(HTTPЗапросGET);

КодСостоянияGET = ОтветHTTPGET.КодСостояния;
РезультатJSON = ОтветHTTPGET.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

Распространенные проблемы и пути их решения

← На главную