Имя: Пароль:
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" , "im-2@ff.cdek.ru");
    ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "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 еще раз огромное спасибо !!!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.