Печать этикетки Wildberries по новым методам api/v3

1. bormanius 22.02.23 13:54 Сейчас в теме
Добрый день.

В http запросах не силен, не могу найти где ошибка.

Задача - по номеру задания Wildberries получить этикетку с двухмерным штрихкодом.

Ранее все работало по сервису /api/v2/orders/stickers/pdf:

Код модуля:
Заголовки=новый Соответствие();
	Заголовки.Вставить("Authorization",Токен);
	Заголовки.Вставить("Content-Type","application/json");
	Заголовки.Вставить("Accept","application/json");
	
	SSL_Соединение=Новый ЗащищенноеСоединениеOpenSSL();
	HttpСоединение=новый HttpСоединение("suppliers-api.wildberries.ru",443,,,,,SSL_Соединение);
	
	posting_number = Новый Массив; //Массив с номерами заданий ВБ
	posting_number.Добавить(НомерЗаказаВБ);

	
	//Блок по старому:
	Сервис="/api/v2/orders/stickers/pdf";
	
	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("orderIds", posting_number);
	ПараметрыЗапроса.Вставить("type", "qr");
	
    ТелоЗапроса = Ozon_ОбщегоНазначенияВызовСервера.ПреобразоватьДанныеВJSON(ПараметрыЗапроса);
    ПерекодированныйЗапрос = Ozon_ОбщегоНазначенияКлиентСервер.ПерекодироватьСтроку(ТелоЗапроса);
	
	//Основной запрос
	HTTPЗапрос=новый HttpЗапрос(сервис,заголовки);
	HTTPЗапрос.УстановитьТелоИзСтроки(ПерекодированныйЗапрос, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	
	HttpОтвет=HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
	СостояниеВыполнения = HttpОтвет.ПолучитьТелоКакСтроку();
	Сообщить(СостояниеВыполнения);

На выходе ранее получал двоичные данные, сейчас получаю:
{"additionalErrors":null,"data":{},"errorText":"Работа методов v2 ограничена. Методы в процессе деактивации. Просьба перейти на методы v3:\nhttps://openapi.wb.ru/#tag/Marketplace-Sborochnye-zadaniya\nhttps://openapi.wb.ru/#tag/Marketplace-Ostatki","error":true}


Попробовал перейти на новые методы, изменил код:
        Сервис="/api/v3/orders/stickers";
	
	ПараметрыЗапроса = Новый Структура;
        ПараметрыЗапроса.Вставить("orders", posting_number);
	ПараметрыЗапроса.Вставить("type", "png");     
	ПараметрыЗапроса.Вставить("width", 58);     
	ПараметрыЗапроса.Вставить("height", 40);     
	
	ТелоЗапроса = Ozon_ОбщегоНазначенияВызовСервера.ПреобразоватьДанныеВJSON(ПараметрыЗапроса);
	ПерекодированныйЗапрос = Ozon_ОбщегоНазначенияКлиентСервер.ПерекодироватьСтроку(ТелоЗапроса);

	HTTPЗапрос=новый HttpЗапрос(сервис,заголовки);
	HTTPЗапрос.УстановитьТелоИзСтроки(ПерекодированныйЗапрос, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
		
	HttpОтвет=HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
	
	СостояниеВыполнения = HttpОтвет.ПолучитьТелоКакСтроку();
	Сообщить(СостояниеВыполнения);
Показать


На выходе получаю:
Статус выполнения по новому
{"code":"IncorrectParameter","message":"Передан некорректный параметр"}


Не могу понять, какие параметры некорректны.
Описание методов АПИ:
https://openapi.wildberries.ru/
По теме из базы знаний
Найденные решения
3. bormanius 22.02.23 15:46 Сейчас в теме
На другом ресурсе подсказали уже.
Если кому требуется, то корректный код:

Сервис="/api/v3/orders/stickers?type=png&width=58&height=40";
    
 ПараметрыЗапроса = Новый Структура;
 ПараметрыЗапроса.Вставить("orders", posting_number);


Все работает.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DBV 22.02.23 15:16 Сейчас в теме
(1) orders в теле должно быть, а type, width и height в параметрах вроде
3. bormanius 22.02.23 15:46 Сейчас в теме
На другом ресурсе подсказали уже.
Если кому требуется, то корректный код:

Сервис="/api/v3/orders/stickers?type=png&width=58&height=40";
    
 ПараметрыЗапроса = Новый Структура;
 ПараметрыЗапроса.Вставить("orders", posting_number);


Все работает.
4. Anton-i-oni 06.03.23 18:12 Сейчас в теме
Столкнулся точно с такой же проблемой: при обращении к сервису Wildberries: "/api/v3/orders/stickers?type=png&width=58&height=40" с помощью метода HTTPЗапрос.УстановитьТелоИзСтроки(ТекстТелоЗапроса,КодировкаТекста.ANSI,ИспользованиеByteOrderMark.Использовать) всегда возвращалась ошибка с кодом 400 {"code":"IncorrectRequestBody","message":"Некорректное тело запроса"}
проблему удалось устранить переключившись на использование метода HTTPЗапрос.УстановитьИмяФайлаТела(ИмяВремФайла);
В результате конструкция обрела следующий вид:

СтрокаТелоЗапроса = СформироватьСтрокуHTTPЗапроса_ФайлУпаковочнойЭтикетки();
	ИмяВремФайла = ПолучитьИмяВременногоФайла("txt");
	Текст = Новый ЗаписьТекста(ИмяВремФайла, КодировкаТекста.ANSI);
	Текст.ЗаписатьСтроку(СтрокаТелоЗапроса);
	Текст.Закрыть();
	
	HTTPЗапрос1 = Новый HTTPЗапрос;
	HTTPЗапрос1.АдресРесурса= "/api/v3/orders/stickers?type=png&width=58&height=40";
	HTTPЗапрос1.Заголовки	= ЗаголовкиЗапроса;//инициализируются в другом месте
	HTTPЗапрос1.УстановитьИмяФайлаТела(ИмяВремФайла);
        HTTPОтвет1 = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос1);
Показать

Проверено на релизе 1С:Предприятие 8.3 (8.3.20.1674)
7. sanches 256 13.04.23 12:22 Сейчас в теме
(4) Получилось добиться результата таким образом

МассивЗаданий = Новый Массив;
В массив заданий помещаем числовые значения идентификаторов сборочных заданий

СтруктураЗаданий = Новый Структура("orders",Задания);

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись,СтруктураЗаданий);

HTTPЗапрос.УстановитьТелоИзСтроки(Запись.Закрыть(),КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
5. user1920419 10.03.23 21:43 Сейчас в теме
Подскажите пожалуйста что теперь делать с ответом?
получил строчку в параметре file ..

Как из этой строчки сделать файл? просто сохранить не помогает, вывод в браузере тоже не работает..
6. sanches 256 13.04.23 12:14 Сейчас в теме
Картинка = Новый Картинка(Base64Значение(Значение из поля file))
Получаете картинку.
В табличном документе добавляете рисунок. Даете ему имя, например Этикетка
При выводе табличного документа
ОбластьСРисунком= Макет.ПолучитьОбласть("ОбластьЭтикетка");
ОбластьСРисунком.Рисунки.Этикетка.Картинка = Картинка;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот