1. mars207 27 18.07.19 09:33 Сейчас в теме

Обмен с сайтом. Авторизация по токену Bearer

Всем доброго времени суток!

Есть задача получить продажи с сайта. У сайта есть api к которому можно обратиться. Но сайт использует curl авторизацию с токеном. Токен есть и он статический.
Api сайта работает, проверил с помощью программы Postman. Но при попытке получить данные в 1С я получаю ответ 400 Bad Request.
Может кто-то подскажет что делаю не так? Были ли у кого-то подобные реализации?

Пример запроса что дали разработчики сайта:

curl -k -H"Authorization: Bearer qeydxk7sktul1o776chzzkabdfl7cnuh8ffinor7xqm2kjrbsrfvauvwzbi2­7nwz " https://my.vendotek.com/api/v1/unit

/////////////
Пример моего кода:

Соединение = Новый HTTPСоединение(
	IPАдрес, // сервер (хост)
	443, // порт, по умолчанию для http используется 80, для https 443
	логин, // пользователь для доступа к серверу (если он есть)
	пароль, // пароль для доступа к серверу (если он есть)
	, // здесь указывается прокси, если он есть
	, // таймаут в секундах, 0 или пусто - не устанавливать
	// защищенное соединение, если используется https
	);
	
	
	ЗаголовокЗапросаHTTP = Новый Соответствие();  
	ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");
	ЗаголовокЗапросаHTTP.Вставить("Authorization", Токен);

Запрос = Новый HTTPЗапрос("https://my.vendotek.com/api/v1/unit", ЗаголовокЗапросаHTTP);
HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос);
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
Показать
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
7. login1020 47 18.07.19 10:01 Сейчас в теме +2 $m
Соединение = Новый HTTPСоединение(
IPАдрес, // сервер (хост)
443, // порт, по умолчанию для http используется 80, для https 443
логин, // пользователь для доступа к серверу (если он есть)
пароль, // пароль для доступа к серверу (если он есть)
, // здесь указывается прокси, если он есть
, // таймаут в секундах, 0 или пусто - не устанавливать
// защищенное соединение, если используется https
);

Вы явно указываете, что используется защищенной соединение?

Пример:
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Яндекс = новый HTTPСоединение("cloud-api.yandex.net",,,,,,SSL);
Остальные ответы
Избранное Подписка Сортировка: Древо
2. spacecraft 18.07.19 09:42 Сейчас в теме
(1) обычно Токен приходит в виде "qeydxk7sktul1o776chzzkabdfl7cnuh8ffinor7xqm2kjrbsrfvauvwzbi­27nwz". Т.е. слово Bearer в нем нет. Для авторизации по токену нужно добавить это слово самим.
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer "+Токен);
3. mars207 27 18.07.19 09:50 Сейчас в теме
(2)Я пробовал этот вариант. Результат тот же.
4. login1020 47 18.07.19 09:51 Сейчас в теме
(3) а мне кажется что проблема в этом
The plain HTTP request was sent to HTTPS port
5. spacecraft 18.07.19 09:54 Сейчас в теме
(3) тогда показывайте код Новый HTTPСоединение. данные можете подставить левые.
Токен уже есть и его получать не нужно?
Тогда логи и пароль указывать в соединении не нужно.
Ну да, и доступ требуется по защищенному соединению.
6. spacecraft 18.07.19 10:00 Сейчас в теме
(1)
Запрос = Новый HTTPЗапрос("https://my.vendotek.com/api/v1/unit", ЗаголовокЗапросаHTTP);

Вот тут тоже не верно.
Что-то в этом роде:
Соединение = Новый HTTPСоединение("my.vendotek.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
ЗаголовокЗапросаHTTP = Новый Соответствие(); 
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json"); 
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer "+Токен); 

Запрос = Новый HTTPЗапрос("api/v1/unit", ЗаголовокЗапросаHTTP); 
HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос); 
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
login1020; +1 Ответить
8. login1020 47 18.07.19 10:02 Сейчас в теме
10. spacecraft 18.07.19 10:06 Сейчас в теме
(1) в дополнение к (6):
Вы точно post запрос хотите отправить, а не get?
Вроде как get в примере.
Тогда вместо HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос);
нужно:
HTTPОтвет = Соединение.Получить(Запрос);
7. login1020 47 18.07.19 10:01 Сейчас в теме +2 $m
Соединение = Новый HTTPСоединение(
IPАдрес, // сервер (хост)
443, // порт, по умолчанию для http используется 80, для https 443
логин, // пользователь для доступа к серверу (если он есть)
пароль, // пароль для доступа к серверу (если он есть)
, // здесь указывается прокси, если он есть
, // таймаут в секундах, 0 или пусто - не устанавливать
// защищенное соединение, если используется https
);

Вы явно указываете, что используется защищенной соединение?

Пример:
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Яндекс = новый HTTPСоединение("cloud-api.yandex.net",,,,,,SSL);
9. mars207 27 18.07.19 10:05 Сейчас в теме
(7)Не указывал. Сейчас получил "Unauthorized.". Копаю дальше
11. mars207 27 18.07.19 10:17 Сейчас в теме
Благодарю за советы. Все получилось. Правильный код ниже:

Соединение = Новый HTTPСоединение(
	IPАдрес, // сервер (хост)
	443, // порт, по умолчанию для http используется 80, для https 443
	Логин, // пользователь для доступа к серверу (если он есть)
	пароль, // пароль для доступа к серверу (если он есть)
	, // здесь указывается прокси, если он есть
	, // таймаут в секундах, 0 или пусто - не устанавливать
	Новый ЗащищенноеСоединениеOpenSSL()// защищенное соединение, если используется https
	);
		
	ЗаголовокЗапросаHTTP = Новый Соответствие();  
	ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");
	ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer " +Токен);
	
	Запрос = Новый HTTPЗапрос("/api/v1/unit", ЗаголовокЗапросаHTTP);
	HTTPОтвет = Соединение.Получить(Запрос);
	ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Екатеринбург
зарплата от 120 000 руб. до 120 000 руб.
Полный день

Программист 1C
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день


Руководитель проектов 1С
Санкт-Петербург
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день