Работа с API. Не могу авторизоваться на тестовом API СДЭК
Делаю запрос на https://api.edu.cdek.ru/v2/calculator/tariff
(отсюда https://api-docs.cdek.ru/63345430.html)
(и отсюда https://api-docs.cdek.ru/29923849.html)
Передаю:
{
"type": "2",
"date": "2020-11-03T11:49:32+0700",
"currency": "1",
"tariff_code": "11",
"from_location": {
"code": 270
},
"to_location": {
"code": 44
},
"services": [
{
"code": "CARTON_BOX_XS",
"parameter": "2"
}
],
"packages": [
{
"height": 10,
"length": 10,
"weight": 4000,
"width": 10
}
]
}
И в headers:
Account EMscd6r9JnFiQ3bLoyjJY6eM78JrJceI
Secure password PjLZkKBHEiLK3YsjtNrt3TGNG0ahs3kG
Но когда пишу пробел в Secure password
, то POSTMAN
жалуется, а когда убираю его, возвращает:
{
"requests": [
{
"type": "AUTH",
"date_time": "2024-04-23T10:43:02+0000",
"state": "INVALID",
"errors": [
{
"code": "v2_authorization_incorrect",
"message": "Authorization header is incorrect"
}
]
}
],
"related_entities": []
}
Помогите пожалуйста
Ответы (1 шт):
Прочитайте очень внимательно раздел Авторизация клиентов, там рассказано про то, что вам нужно получить токен аутентификации перед тем как выполнять запросы.
Последовательность действий должна выглядеть так:
Получение токена
const authRequestData = new FormData();
authRequestData.append('grant_type', 'client_credentials');
authRequestData.append('client_id', 'EMscd6r9JnFiQ3bLoyjJY6eM78JrJceI');
authRequestData.append('client_secret', 'PjLZkKBHEiLK3YsjtNrt3TGNG0ahs3kG');
// content-type должен быть "x-www-form-urlencoded"
const authRes = await fetch('https://api.edu.cdek.ru/v2/oauth/token', {
method: 'POST',
body: authRequestData
});
const { access_token } = await authRes.json();
Выполнение запроса
// content-type должен быть "application/json"
const tarifRes = await fetch('https://api.edu.cdek.ru/v2/calculator/tariff', {
method: 'POST',
headers: {
Authorization: `Bearer ${access_token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ })
});
console.log(await tarifRes.json());
Кстати, в разделе "Калькулятор. Расчет по коду тарифа" приведён устаревший пример, данные в нём не проходят валидацию, но мой код будет работать и показывать диагностические сообщения, которыми ответил сервер.