Работа с API СДЭК v2.0
Уважаемые коллеги помогите пожалуйста разобраться.
Взаимодействие с сервисом требует клиентской авторизации. Авторизация клиентов обеспечивается с применением протокола OAuth 2.0.
Для получения токена необходимо отправить POST-запрос (x-www-form-urlencoded) на URL:
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: уникальный идентификатор токена.
Вот код обработки
В результате получаю
{"timestamp":"2021-11-02T19:33:22.755+00:00","status":401,"error":"Unauthorized","message":"","path":"/oauth/token"}
Взаимодействие с сервисом требует клиентской авторизации. Авторизация клиентов обеспечивается с применением протокола OAuth 2.0.
Для получения токена необходимо отправить POST-запрос (x-www-form-urlencoded) на URL:
Разрешенные параметры и их возможные значения:
grant_type: тип аутентификации, доступное значение: client_credentials;
client_id: идентификатор клиента, равен Account;
client_secret: секретный ключ клиента, равен Secure password.
В ответ на запрос доступа будет возвращена следующая информация:
access_token: jwt-токен;
token_type: тип токена (всегда принимает значение "bearer");
expires_in: срок действия токена (по умолчанию 3600 секунд);
scope: область действия токена (доступ к объектам и операциям над ними);
jti: уникальный идентификатор токена.
Вот код обработки
&НаКлиенте
Процедура ВыполнитьСоединение(Команда)
Структура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");
Возврат ПараметрыНТТРЗавпроса;
КонецФункции
ПоказатьВ результате получаю
{"timestamp":"2021-11-02T19:33:22.755+00:00","status":401,"error":"Unauthorized","message":"","path":"/oauth/token"}
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Нашел данный пост при поиске своей проблемы, может кто-то поможет и по моей проблеме
вот такой ответ получаю при коде ниже
{"error":"invalid_request","error_description":"Missing grant type"}
если закомметрировать строчку
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "grant_type", "client_credentials");
то будет
{"timestamp":"2023-04-27T19:22:23.812+00:00","status":401,"error":"Unauthorized","path":"/oauth/token"}
вот такой ответ получаю при коде ниже
{"error":"invalid_request","error_description":"Missing grant type"}
если закомметрировать строчку
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "grant_type", "client_credentials");
то будет
{"timestamp":"2023-04-27T19:22:23.812+00:00","status":401,"error":"Unauthorized","path":"/oauth/token"}
перем СтруктКоннект;
Процедура КнопкаВыполнитьНажатие(Кнопка)
ВыполнитьСоединение();
КонецПроцедуры
Процедура ВыполнитьСоединение()
СтруктураAPI = ПутьAPI();
Соединение = Новый HTTPСоединение(СтруктураAPI.Сервер, СтруктураAPI.Порт, , , , , Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
//Заголовки.Вставить("Content-Type", "x-www-form-urlencoded");
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
Запрос = Новый HTTPЗапрос(СтруктураAPI.Путь, Заголовки);
ПараметрыНТТРЗавпроса = ПолучитьПараметрыАвторизации();
Запрос.УстановитьТелоИзСтроки(ПараметрыНТТРЗавпроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Использовать);
Попытка
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
Исключение
// исключение здесь говорит о том, что запрос не дошел до HTTP-Сервера
Сообщить("Произошла сетевая ошибка!");
ВызватьИсключение;
КонецПопытки;
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ОтветСтрокой);
КонецПроцедуры
Функция ПутьAPI()
Структура = Новый Структура;
Структура.Вставить("Сервер", СтруктКоннект.Сервер);
Структура.Вставить("Порт", 443);
Структура.Вставить("Путь", "/v2/oauth/token?parameters");
//Структура.Вставить("ПолныйПуть", "https://"+Структура.Сервер+Структура.Путь);
Возврат Структура;
КонецФункции
Функция ДобавитьПараметрыНТТРЗапроса(СтрПараметры, ИмяПараметра, ЗначениеПараметра)
СтрПараметры = СтрПараметры + ?(ПустаяСтрока(СтрПараметры), "","&") + ИмяПараметра + "=" + ЗначениеПараметра;
Возврат СтрПараметры;
КонецФункции
Функция ПолучитьПараметрыАвторизации()
ПараметрыНТТРЗавпроса = "";
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "grant_type", "client_credentials");
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_id", СтруктКоннект.ИД);
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_secret",СтруктКоннект.Пароль);
Возврат ПараметрыНТТРЗавпроса;
КонецФункции
СтруктКоннект=Новый Структура("Сервер,ИД,Пароль");
СтруктКоннект.Сервер="api.edu.cdek.ru";
СтруктКоннект.ИД="EMscd6r9JnFiQ3bLoyjJY6eM78JrJceI";
СтруктКоннект.Пароль="PjLZkKBHEiLK3YsjtNrt3TGNG0ahs3kG";
Показать
(7) вот этой публикации ?
Причем, необязательно пытать его лично, достаточно просто скачать файл(ы) и посмотреть - что/как там устроено?
может кто-то поможет и по моей проблеме
Может, автор Причем, необязательно пытать его лично, достаточно просто скачать файл(ы) и посмотреть - что/как там устроено?
Добавь & и будет тебе счастье:
ПараметрыНТТРЗавпроса = "&";
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "grant_type", "client_credentials");
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_id", ИД);
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_secret",Пароль);
Возврат ПараметрыНТТРЗавпроса;
ПараметрыНТТРЗавпроса = "&";
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "grant_type", "client_credentials");
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_id", ИД);
ДобавитьПараметрыНТТРЗапроса(ПараметрыНТТРЗавпроса, "client_secret",Пароль);
Возврат ПараметрыНТТРЗавпроса;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот