Есть задача получить продажи с сайта. У сайта есть api к которому можно обратиться. Но сайт использует curl авторизацию с токеном. Токен есть и он статический.
Api сайта работает, проверил с помощью программы Postman. Но при попытке получить данные в 1С я получаю ответ 400 Bad Request.
Может кто-то подскажет что делаю не так? Были ли у кого-то подобные реализации?
Соединение = Новый 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Ответ.ПолучитьТелоКакСтроку();
Соединение = Новый HTTPСоединение(
IPАдрес, // сервер (хост)
443, // порт, по умолчанию для http используется 80, для https 443
логин, // пользователь для доступа к серверу (если он есть)
пароль, // пароль для доступа к серверу (если он есть)
, // здесь указывается прокси, если он есть
, // таймаут в секундах, 0 или пусто - не устанавливать
// защищенное соединение, если используется https
);
Вы явно указываете, что используется защищенной соединение?
Пример:
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Яндекс = новый HTTPСоединение("cloud-api.yandex.net",,,,,,SSL);
(1) обычно Токен приходит в виде "qeydxk7sktul1o776chzzkabdfl7cnuh8ffinor7xqm2kjrbsrfvauvwzbi27nwz". Т.е. слово Bearer в нем нет. Для авторизации по токену нужно добавить это слово самим.
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer "+Токен);
(3) тогда показывайте код Новый HTTPСоединение. данные можете подставить левые.
Токен уже есть и его получать не нужно?
Тогда логи и пароль указывать в соединении не нужно.
Ну да, и доступ требуется по защищенному соединению.
(1) в дополнение к (6):
Вы точно post запрос хотите отправить, а не get?
Вроде как get в примере.
Тогда вместо HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос);
нужно:
HTTPОтвет = Соединение.Получить(Запрос);
Соединение = Новый HTTPСоединение(
IPАдрес, // сервер (хост)
443, // порт, по умолчанию для http используется 80, для https 443
логин, // пользователь для доступа к серверу (если он есть)
пароль, // пароль для доступа к серверу (если он есть)
, // здесь указывается прокси, если он есть
, // таймаут в секундах, 0 или пусто - не устанавливать
// защищенное соединение, если используется https
);
Вы явно указываете, что используется защищенной соединение?
Пример:
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Яндекс = новый HTTPСоединение("cloud-api.yandex.net",,,,,,SSL);
Благодарю за советы. Все получилось. Правильный код ниже:
Соединение = Новый 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Ответ.ПолучитьТелоКакСтроку();