Имя: Пароль:
1C
 
Работа с API СДЭК Продолжение
0 lasermag
 
02.11.21
21:17
Не смотря на то что нашел ветку с темой Работа с API СДЭК версия 2.0 столкнулся с той же проблемой. Привер вроде все в порядок но выдается таже ошибка {"timestamp":"2021-11-02T18:14:57.041+00:00","status":401,"error":"Unauthorized","message":"","path":"/oauth/token"} . Прошу Вас коллеги помочь разобраться.

Код запроса

&НаКлиенте
Процедура ВыполнитьСоединение(Команда)
    
    СтруктураAPI = ПутьAPI();
    Соединение = Новый HTTPСоединение(СтруктураAPI.Сервер, СтруктураAPI.Порт, , , , , Новый ЗащищенноеСоединениеOpenSSL);
                    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "x-www-form-urlencoded");
    Запрос = Новый HTTPЗапрос(СтруктураAPI.Путь, Заголовки);
    
    ПараметрыНТТРЗавпроса = ПолучитьПараметрыАвторизации();
    Запрос.УстановитьТелоИзСтроки(ПараметрыНТТРЗавпроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Использовать);    
    Попытка
        Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
    Исключение
        // исключение здесь говорит о том, что запрос не дошел до HTTP-Сервера
        Сообщить("Произошла сетевая ошибка!");
        ВызватьИсключение;
    КонецПопытки;
    ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
    
КонецПроцедуры

&НаКлиенте
Функция ПутьAPI()
    Структура = Новый Структура;
    Структура.Вставить("ПолныйПуть", "https://api.cdek.ru/v2/oauth/token?parameters");
    Структура.Вставить("Сервер", "api.cdek.ru");
    Структура.Вставить("Порт", 443);
    Структура.Вставить("Путь", "/v2/oauth/token?parameters");
    Возврат Структура;
КонецФункции

&НаКлиенте
Функция ДобавитьПараметрыНТТРЗапроса(СтрПараметры, ИмяПараметра, ЗначениеПараметра)
    СтрПараметры = СтрПараметры + ?(ПустаяСтрока(СтрПараметры), "","&") + ИмяПараметра + "=" + ЗначениеПараметра;
    Возврат СтрПараметры;    
КонецФункции

&НаКлиенте
Функция ПолучитьПараметрыАвторизации()
    
    ПараметрыНТТРЗавпроса = "";
    ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "grant_type" , "client_credentials");
    ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_id" , "[email protected]");
    ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_secret" , "19");
        
    Возврат ПараметрыНТТРЗавпроса;
    
КонецФункции
1 Ёпрст
 
02.11.21
22:04
(0) если ты пишешь "x-www-form-urlencoded  то и строку запроса должен кодировать
2 Ёпрст
 
02.11.21
22:08
Т.е в тело устанавливать это :

ТвояСтрокаЗапроса = КодироватьСтроку(ТвояСтрокаЗапроса , СпособКодированияСтроки.КодировкаURL);
3 lasermag
 
02.11.21
22:36
Изменил

    ПараметрыНТТРЗавпроса = КодироватьСтрокуКодировкаURL(ПараметрыНТТРЗавпроса);
    Запрос.УстановитьТелоИзСтроки(ПараметрыНТТРЗавпроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Использовать);

В результате ПараметрыНТТРЗавпроса = grant_type%3Dclient_credentials%26client_id%3Dim-2%40ff.cdek.ru%26client_secret%3D19 т есть кодировка работает. А вот результат конечный не изменился
{"timestamp":"2021-11-02T19:33:22.755+00:00","status":401,"error":"Unauthorized","message":"","path":"/oauth/token"}
4 Смотрящий
 
02.11.21
22:41
Ты не не проходишь авторизацию
Логин пароль где который получаешь в лк сдека ?
5 Ёпрст
 
02.11.21
22:41
И это ИспользованиеByteOrderMark.Использовать  может НеИспользовать ?
6 Ёпрст
 
02.11.21
22:43
И это, уверен, что всё в ело надо пихать ?
7 Ёпрст
 
02.11.21
22:43
в тело
8 Ёпрст
 
02.11.21
22:44
Мот атм тип того ?
/v2/oauth/token?parameters=вася&пароль=федя&ышопараметр=хрень ....т.е всё в параметры, а не в тело
9 lasermag
 
02.11.21
23:01
Вот реально что мне надо

Взаимодействие с сервисом требует клиентской авторизации. Авторизация клиентов обеспечивается с применением протокола OAuth 2.0.

Для получения токена необходимо отправить POST-запрос (x-www-form-urlencoded) на URL:

тестовая    https://api.edu.cdek.ru/v2/oauth/token?parameters
боевая    https://api.cdek.ru/v2/oauth/token?parameters

Разрешенные параметры и их возможные значения:

grant_type: тип аутентификации, доступное значение: client_credentials;

client_id: идентификатор клиента, равен Account;

client_secret: секретный ключ клиента, равен Secure password.



В ответ на запрос доступа будет возвращена следующая информация:

access_token: jwt-токен;

token_type: тип токена (всегда принимает значение "bearer");

expires_in: срок действия токена (по умолчанию 3600 секунд);

scope: область действия токена (доступ к объектам и операциям над ними);

jti: уникальный идентификатор токена.
10 lasermag
 
02.11.21
23:20
(4) Логин и пароль правильные
11 OldCondom
 
03.11.21
05:05
жуть. Найди любой готовый вариант подключения к чему либо(сбис, контур, доставки) и посмотри как сделано там. Модули интеграции как правило бесплатно раздают.
У тебя даже путь неправильно указан.
12 OldCondom
 
03.11.21
09:04
Соединение = Новый HTTPСоединение("api.edu.cdek.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL());
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
    
    Запрос = Новый HTTPЗапрос("/v2/oauth/token?parameters", Заголовки);
    
    Параметры = "grant_type=client_credentials&client_id=EMscd6r9JnFiQ3bLoyjJY6eM78JrJceI&client_secret=PjLZkKBHEiLK3YsjtNrt3TGNG0ahs3kG";
    
    Запрос.УстановитьТелоИзСтроки(Параметры, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Результат = Соединение.ОтправитьДляОбработки(Запрос);
13 acht
 
03.11.21
09:15
(3) > В результате ПараметрыНТТРЗавпроса = grant_type%3Dclient_credentials%26client_id%3Dim-2%40ff.cdek.ru%26client_secret%3D19 т есть кодировка работает.

Это некорректные данные для типа "x-www-form-urlencoded".
14 rozer76
 
03.11.21
09:38
(13)  + 1 скажем так, что не нужно все так кодировать при "x-www-form-urlencoded" и там должно быть вроде "application/x-www-form-urlencoded"
15 youalex
 
03.11.21
11:21
тестовый акк у них работает, по

api.edu.cdek.ru/v2/oauth/token?grant_type=client_credentials&client_id=EMscd6r9JnFiQ3bLoyjJY6eM78JrJceI&client_secret=PjLZkKBHEiLK3YsjtNrt3TGNG0ahs3kG
16 Ёпрст
 
03.11.21
12:09
(15) ага, так и думал, что не в тело..
17 Ёпрст
 
03.11.21
12:09
а parameters заменяется на строку параметров ..
18 lasermag
 
03.11.21
13:35
(11) Путь указан думаю верно так ка код ошибки 401.а это не правильная авторизация. пробовал другие пути код выходит 404. Если вы знаете какой правильный путь напишите пожалуйста.
19 lasermag
 
03.11.21
13:39
(13) Формат для типа типа "x-www-form-urlencoded" пример name=Ivan&surname=Ivanov. Вот мои параметры
"grant_type=client_credentials&client_id=EMscd6r9JnFiQ3bLoyjJY6eM78JrJceI&client_secret=PjLZkKBHEiLK3YsjtNrt3TGNG0ahs3kG"
20 Kassern
 
03.11.21
13:42
(0) если плохо разбираетесь в нюансах работы http соединения, то лучше купите обработку для этого сдека. Потратите скорее всего пару тысяч (а это час-два ваших, которые вы скорее всего в пустую потратили), а далее уже причешите эту обработку под свои нужды, либо напишите свою, на базе купленной.
В свое время я так с почтой россии поступил, купил за полторы тысячи обработку, посмотрел как там все это работает и написал свою уже быстро и без проблем.
21 OldCondom
 
03.11.21
13:53
эмм, я в 12 рабочий код дал. Тестовый акк
22 lasermag
 
03.11.21
14:08
(21) Огромное спасибо . Извините сразу не увидел. долго ночью сидел.
Результат ошибка была в этом месте
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
application
Путь , формат x-www-form-urlencoded все остальное верно
OldCondom еще раз огромное спасибо !!!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший