Получение расчетной стоимости доставки по API Яндекс.Доставка (b2b.taxi.yandex.net)

1. rid636674 50 22.09.21 19:50 Сейчас в теме
На сайте яндекса есть описание: https://yandex.ru/dev/logistics/api/ref/v1/estimate/IntegrationV1CheckPrice­.html

Я имею 2 пары координат, это откуда взять товар(долгота и широта) и куда отвезти(долгота и широта).

Токен я получил.

Вот тестовая процедура:
&НаКлиенте
Процедура ПолучитьЦенуДоставки(Команда)
	
	Сервер  = "b2b.taxi.yandex.net";
	Адрес   = "b2b/cargo/integration/v1/check-price";

	
	ТелоЗапроса = "{
	|	""items"": [
	|	{
	|	""quantity"": 1,
	|	""size"": {
	|	""height"": 0.05,
	|	""length"": 0.15,
	|	""width"": 0.1
	|	},
	|	""weight"": 2.105
	|	}
	|	],
	|	""requirements"": {
	|	""cargo_loaders"": 1,
	|	""cargo_type"": ""lcv_m"",
	|	""pro_courier"": false,
	|	""taxi_class"": ""cargo""
	|	},
	|	""skip_door_to_door"": false
	|}";
	
	Oauth = "OAuth oauth_token=""AQAAAAADUfO2AAdkUhSK1tBqW0Unrm-_SYKwKzc"", oauth_client_id=""46ed3c09bd99497299662bf8cc8df260""";
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);
	Соединение = Новый HTTPСоединение(Сервер,,,,,,ЗащищенноеСоединение);
	
	Заголовки = Новый Соответствие;
	
	Заголовки.Вставить("Accept-Language", "string");   
	Заголовки.Вставить("Authorization", Oauth);  
	
	Запрос = Новый HTTPЗапрос(Адрес, Заголовки);
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	Если Ответ.КодСостояния = 200 Тогда
		
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
		
		Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);
		
		Для Каждого стр Из Данные Цикл
			Результат =""+ Результат+стр.Значение+"="+стр.Ключ+Символы.ВК;   
		КонецЦикла;	 
		Сообщить("Результат:"+Результат);
	Иначе
		Если Ответ.КодСостояния = 401  Тогда
			Сообщить("Ресурс API вызван без авторизационных данных, сервер Маркета возвратил HTTP-статус 401 Unauthorized");
		Иначе
			Сообщить(Ответ.КодСостояния);
		КонецЕсли;	
		
	КонецЕсли;
КонецПроцедуры
Показать


Нужна помощь по следующим вопросам:
1) Возвращает все время 401 ошибку.
2) Куда и как мне в примере ввести координаты откуда и куда.
Вознаграждение за ответ
Показать полностью
Найденные решения
6. jenekstar 03.10.21 02:49 Сейчас в теме +10 $m
Здравствуйте,
Тут 2 варианта т.к. ошибка говорит о том, что вы не можете авторизоваться:
1. В параметрах Http-соединения укажите логин и пароль от личного кабинета, скорее всего в этом ошибка, т.к. токен вы передаете для доступа к самой функции откуда запрашиваете данные, а на сервере не проходите по логину и паролю.
[Скрин.png]
2. Некорректный токен, попробуйте проделать все еще раз по инструкции и получить рабочий токен.

Проверьте сначала 1 потом 2, я думаю у вас все получится. Обработку для проверки прилагаю [РассчетЯндексДоставки.epf].
Прикрепленные файлы:
РассчетЯндексДоставки.epf
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 22.09.21 20:14 Сейчас в теме +3 $m
(1)
Oauth = "OAuth oauth_token=""AQAAAAADUfO2AAdkUhSK1tBqW0Unrm-_SYKwKzc"", oauth_client_id=""46ed3c09bd99497299662bf8cc8df260""";

Это не правильно. От этого ошибка 401.
Должно быть так:
Oauth = "Bearer AQAAAAADUfO2AAdkUhSK1tBqW0Unrm-_SYKwKzc";


Координаты вводятся в массиве, перед ""skip_door_to_door"".
"route_points": [
    {
      "coordinates": [
        Долгота1,
        Широта1
      ]
    },
     {
      "coordinates": [
        Долгота2,
        Широта2
      ]
    }
  ],
Показать

Соответственно вместо Долгота и Широта подставить нужные координаты.


Еще вот это не правильно:
Заголовки.Вставить("Accept-Language", "string");

в документации string означает строковый тип, а не значение string. Т.е. должно быть строковое значение языка.
Можно попробовать так:
Заголовки.Вставить("Accept-Language", "ru");
3. rid636674 50 22.09.21 21:58 Сейчас в теме
Спасибо, за подсказу, но к сожалению все равно выходит 401.
Прикрепленные файлы:
тестAPIЯндексДоставка.epf
4. spacecraft 22.09.21 23:30 Сейчас в теме +1 $m
(3) токен актуальный ?
Токен вообще от яндекс.доставка? Токен от других сервисов яндекса не подходит.
Инструкция получения нужного токе описана в документации:
https://yandex.ru/dev/logistics/api/about/access.html
5. slavyan_arena 23.09.21 06:04 Сейчас в теме
(1)
Здравствуйте.

Если у вас передаются координаты то они должны иметь примерно такой вид: "[[0.1,0.2],[0.11,0.12]]"
первая точка отправления, вторая точка доставки.

Ответ.КодСостояния = 200


в коде состояния разве не строка?

и я бы поставил точку останова на этой строке и посмотрел что содержится в ответе, там можно результат смотреть возвращаемого запроса от яндекса
7. jenekstar 03.10.21 03:33 Сейчас в теме
(1)
Куда и как мне в примере ввести координаты откуда и куда.


Координаты в обработке [РассчетЯндексДоставки.epf](6) добавляйте в таблицу координат первая строка откуда забрать, вторая куда отвезти.
6. jenekstar 03.10.21 02:49 Сейчас в теме +10 $m
Здравствуйте,
Тут 2 варианта т.к. ошибка говорит о том, что вы не можете авторизоваться:
1. В параметрах Http-соединения укажите логин и пароль от личного кабинета, скорее всего в этом ошибка, т.к. токен вы передаете для доступа к самой функции откуда запрашиваете данные, а на сервере не проходите по логину и паролю.
[Скрин.png]
2. Некорректный токен, попробуйте проделать все еще раз по инструкции и получить рабочий токен.

Проверьте сначала 1 потом 2, я думаю у вас все получится. Обработку для проверки прилагаю [РассчетЯндексДоставки.epf].
Прикрепленные файлы:
РассчетЯндексДоставки.epf
8. rid636674 50 03.10.21 13:45 Сейчас в теме
Спасибо! Вся проблема была в токене, я делал какой то другой.
Оставьте свое сообщение
Вакансии
Программист
Москва
зарплата от 200 000 руб. до 230 000 руб.
Полный день

Главный специалист (Программист 1с)
Подольск
зарплата от 100 000 руб. до 110 000 руб.
Полный день

Программист 1С
Подольск
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Аналитик (оперативный учет)
Москва
зарплата от 150 000 руб. до 300 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб.
Полный день