Получение данных через REST API

Раздел для разработчиков по взаимодействию с ЛЭРС УЧЕТ, созданию собственных внешних модулей, экспорту/импорту данных и т.д.

Модератор: Модераторы

Закрыто
aleksei_bush
Сообщения: 10
Зарегистрирован: 12 сен 2017, 05:58

Получение данных через REST API

Сообщение aleksei_bush » 24 окт 2018, 06:07

Здравствуйте. Пытаюсь получить данные, например нештатные ситуации. Авторизуюсь:

Код: Выделить всё

	Запрос = Новый HTTPЗапрос("/api.asmx?Login");
	Запрос.Заголовки.Вставить("POST",          "/api.asmx HTTP/1.1");
	Запрос.Заголовки.Вставить("Content-Type",    "text/xml; charset=utf-8");
	Запрос.Заголовки.Вставить("SOAPAction",    "http://www.lers.ru/website/api/Login");
	ТекстXML = "<?xml version=""1.0"" encoding=""utf-8""?>
	|<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">
	|<soap12:Body>
	|<userName xmlns=""http://www.lers.ru/website/api"">" + Логин + "</userName>
	|<password xmlns=""http://www.lers.ru/website/api"">" + Пароль + "</password>
	|</soap12:Body>
	|</soap12:Envelope>";
Авторизация проходи успешно. Получаю Cookie из заголовков ответа, для дальнейшего использования в запросах.
Следующим запросом пытаюсь получить нештатные ситуации:

Код: Выделить всё

	Запрос = Новый HTTPЗапрос("/rest/v1/incidents?startDate="+Формат(ДатаНачала, "ДФ=yyyy-MM-dd")+"&endDate="+Формат(ДатаОкончания, "ДФ=yyyy-MM-dd"));//+"&newOnly=false");
	Запрос.Заголовки.Вставить("GET",          "/rest/v1 HTTP/1.1");
	Запрос.Заголовки.Вставить("Cookie",       Cookie);

Возвращается ошибка Authorization has been denied for this request
Почитал http://docs.lers.ru/docs/display/LERSDEV/REST+API. Написано, что авторизоватья нужно так: http://docs.lers.ru/docs/pages/viewpage ... d=12189753. Пробую:

Код: Выделить всё

	Запрос = Новый HTTPЗапрос("/auth/v2/token?usernsme="+Логин+"&password="+Пароль+"&grant_type=password");
	Запрос.Заголовки.Вставить("POST",          "/auth/v2  HTTP/1.1");
Возвращается ошибка: unsupported_grant_type
Как нужно авторизоваться, чтобы получить нештатные ситуации?? Что я делаю не так??
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6672
Зарегистрирован: 02 мар 2016, 05:45

Re: Получение данных через REST API

Сообщение Иван Славный » 24 окт 2018, 07:18

Для использования Веб-сервиса доступа к данным следует авторизовываться соответственно именно для Веб-сервиса.
aleksei_bush писал(а):Почитал http://docs.lers.ru/docs/display/LERSDEV/REST+API.
это авторизация для REST API, она не подойдет для использования Веб-сервиса.

Уточните такая ситуация возникает только в 1С? Вы пробовали проводить авторизацию в Веб-сервису и получение НС в другом приложении?
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
aleksei_bush
Сообщения: 10
Зарегистрирован: 12 сен 2017, 05:58

Re: Получение данных через REST API

Сообщение aleksei_bush » 24 окт 2018, 08:21

Раньше всё работало без проблем, авторизация веб-сервиса подходила для rest api, и данные о нештатных ситуациях я получал по rest api. Наверное это как-то связано с обновлением?? Недавно обновились до R27.6
Проверить могу только в 1с и в браузере. в браузере при http://вдрес:порт/auth/v2/token?usernаme=пользователь&password=пароль&grant_type=password такая же ошибка: {"error":"unsupported_grant_type"}
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6672
Зарегистрирован: 02 мар 2016, 05:45

Re: Получение данных через REST API

Сообщение Иван Славный » 24 окт 2018, 10:30

Так как вы запрашиваете нештатные ситуации через REST API, то и авторизацию вам соответственно необходимо проходить для REST API.
aleksei_bush писал(а):

Код: Выделить всё

	Запрос = Новый HTTPЗапрос("/auth/v2/token?usernsme="+Логин+"&password="+Пароль+"&grant_type=password");
	Запрос.Заголовки.Вставить("POST",          "/auth/v2  HTTP/1.1");
Посмотрите внимательно на ваш запрос. Вы отправляете POST-запрос, но при этом задаете параметры в адресной строке, как для GET-запроса. Вам нужно задавать параметры в теле запроса.
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
aleksei_bush
Сообщения: 10
Зарегистрирован: 12 сен 2017, 05:58

Re: Получение данных через REST API

Сообщение aleksei_bush » 25 окт 2018, 10:56

А какой формат у тела запроса??
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6672
Зарегистрирован: 02 мар 2016, 05:45

Re: Получение данных через REST API

Сообщение Иван Славный » 25 окт 2018, 11:18

В нашей статье приведен пример получения токена утилитой curl. Там же показано содержимое тела запроса.
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
aleksei_bush
Сообщения: 10
Зарегистрирован: 12 сен 2017, 05:58

Re: Получение данных через REST API

Сообщение aleksei_bush » 26 окт 2018, 03:50

Спасибо. Всё получилось. Может кому-то будет интересно, через 1С авторизовался следующим образом:

Код: Выделить всё

	Соединение = Новый HTTPСоединение(Адрес,Порт,,,,30);
	Запрос = Новый HTTPЗапрос("/auth/v2/token");
	ТекстXML = "username="+Логин+"&password="+Пароль+"&grant_type=password";
	Запрос.УстановитьТелоИзСтроки(ТекстXML,КодировкаТекста.UTF8);
	
	Запрос.Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded");
	ВФ = ВременныйФайл();
	Ответ = Соединение.ОтправитьДляОбработки(Запрос,ВФ);
Из файла ответа получил access_token для дальнейшего использования в запросах через rest api
Закрыто