|
1С + Wildberries + API Выгрузка остатков (/api/v3/stocks/) | ☑ | ||
---|---|---|---|---|
0
bormanius
27.03.23
✎
09:44
|
Добрый день.
Переделываю запросы по выгрузке остатков на АПИ 3 и не работает, прошу помощи: Описание АПИ на вайлберриес: https://openapi.wildberries.ru/#tag/Marketplace-Ostatki/paths/~1api~1v2~1warehouses/get Текст модуля 1С: Заголовки=новый Соответствие(); Заголовки.Вставить("Authorization",Токен); Заголовки.Вставить("Content-Type","application/json"); Заголовки.Вставить("Accept","application/json"); SSL_Соединение=Новый ЗащищенноеСоединениеOpenSSL(); HttpСоединение=новый HttpСоединение("suppliers-api.wildberries.ru",443,,,,,SSL_Соединение); Сервис="/api/v3/stocks/"+ИДскладаОЗОН_Строка+""; МассивОстатков = Новый Массив; Для Каждого Стр Из Остатки Цикл СтруктураОстаткаТовара = Новый Структура("sku, amount", СокрЛП(Стр.ВБ_Штрихкод), Стр.КВыгрузке); МассивОстатков.Добавить(СтруктураОстаткаТовара); КонецЦикла; ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса.Вставить("stocks", МассивОстатков); ТелоЗапроса = Ozon_ОбщегоНазначенияВызовСервера.ПреобразоватьДанныеВJSON(ПараметрыЗапроса); //Основной запрос ИмяФайла = ПолучитьИмяВременногоФайла("json"); HTTPЗапрос=новый HttpЗапрос(сервис,заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(Ozon_ОбщегоНазначенияКлиентСервер.ПерекодироватьСтроку(ТелоЗапроса), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HttpОтвет=HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,ИмяФайла); На выходе получаю ошибку: Ошибка выполнения запроса, код ошибки 400 Код ошибки: IncorrectRequest Описание ошибки: Переданы некорректные данные В чем может быть ошибка? |
|||
1
Волшебник
27.03.23
✎
09:45
|
Запрос в Wildberries, а в тексте модуля Ozon
|
|||
2
bormanius
27.03.23
✎
09:47
|
Если вопрос про эту процедуру:
ТелоЗапроса = Ozon_ОбщегоНазначенияВызовСервера.ПреобразоватьДанныеВJSON(ПараметрыЗапроса); То это просто преобразование в JSON: // Функция - Преобразовать данные в JSON Функция ПреобразоватьДанныеВJSON(Данные) Экспорт Результат = ""; Попытка ЗаписьJSON = Новый ЗаписьJSON; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина); НастройкиСериализации = Новый НастройкиСериализацииJSON; НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO; НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата; ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); ЗаписатьJSON(ЗаписьJSON, Данные, НастройкиСериализации); Результат = ЗаписьJSON.Закрыть(); Исключение Комментарий = "Не удалось записать JSON: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Ozon_ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Комментарий); КонецПопытки; Возврат Результат; КонецФункции |
|||
3
Builder
27.03.23
✎
09:52
|
Попробуй
HTTPОтвет = Соединение.ВызватьHTTPМетод("PUT", HTTPЗапрос); |
|||
4
Builder
27.03.23
✎
09:53
|
У WB появились PUT запросы, за этим надо следить.
|
|||
5
Builder
27.03.23
✎
09:55
|
И код успешного ответа в этом запросе 204, а не 200, как обычно :)
|
|||
6
bormanius
27.03.23
✎
10:09
|
Переписал все, без лишних процедур и переделал на запрос PUT вышло так:
Заголовки=новый Соответствие(); Заголовки.Вставить("Authorization",Токен); Заголовки.Вставить("Content-Type","application/json"); Заголовки.Вставить("Accept","application/json"); SSL_Соединение=Новый ЗащищенноеСоединениеOpenSSL(); HttpСоединение=новый HttpСоединение("suppliers-api.wildberries.ru",443,,,,,SSL_Соединение); Сервис="/api/v3/stocks/99916662816000"; ТекстЗапроса = "{""stocks"":[{""sku"":""9991365149650"",""amount"":50}]}"; ИмяФайла = ПолучитьИмяВременногоФайла("json"); HTTPЗапрос=новый HttpЗапрос(сервис,заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(ТекстЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("PUT", HTTPЗапрос, ИмяФайла); Если HTTPОтвет.КодСостояния = 204 Тогда Сообщить ("Все удалось "+ HTTPОтвет.КодСостояния ); Иначе Сообщить ("Ошибка выполнения запроса, код ошибки "+ HTTPОтвет.КодСостояния ); ЧтениеДжейсон = Новый ЧтениеJSON; ЧтениеДжейсон.ОткрытьФайл(ИмяФайла); ДанныеОтвета = ПрочитатьJSON(ЧтениеДжейсон); Сообщить(" Код ошибки: "+ ДанныеОтвета.code); Сообщить(" Описание ошибки: "+ ДанныеОтвета.message); КонецЕсли; Теперь ошибка: Ошибка выполнения запроса, код ошибки 404 Код ошибки: NotFound Описание ошибки: Не найдено Куда еще можно копать? |
|||
7
Builder
27.03.23
✎
10:14
|
(6) Нахрена ты json в файл пихаешь?
Вот кусок рабочего кода: Соединение = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("PUT"); HTTPЗапрос.АдресРесурса = URLЗапроса; HTTPЗапрос.Заголовки.Вставить("accept", "application/json"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json"); HTTPЗапрос.Заголовки.Вставить("Authorization", Токен); HTTPЗапрос.УстановитьТелоИзСтроки(ИтоговыйЗапрос, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = Соединение.ВызватьHTTPМетод("PUT", HTTPЗапрос); |
|||
8
Builder
27.03.23
✎
10:19
|
(6) Адрес и код склада правильно задан?
Судя по ошибке 404 похоже что-то с адресом не то. |
|||
9
bormanius
27.03.23
✎
10:29
|
Сервер = "suppliers-api.wildberries.ru";
ИтоговыйЗапрос = "{""stocks"":[{""sku"":""9991365149650"",""amount"":50}]}"; URLЗапроса = "/api/v3/stocks/99916662816000"; Соединение = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("PUT"); HTTPЗапрос.АдресРесурса = URLЗапроса; HTTPЗапрос.Заголовки.Вставить("accept", "application/json"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json"); HTTPЗапрос.Заголовки.Вставить("Authorization", Токен); HTTPЗапрос.УстановитьТелоИзСтроки(ИтоговыйЗапрос, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = Соединение.ВызватьHTTPМетод("PUT", HTTPЗапрос); Переписал обработку - та же ошибка. Наверное я с адресом что-то не так ввожу. Сейчас адрес URLЗапроса = "/api/v3/stocks/99916662816000"; Это "/api/v3/stocks/" + код склада. Может как-то неправильно использую? |
|||
10
Builder
27.03.23
✎
10:34
|
(9) Чет не очень похоже на код склада, у нас он пятизначный....
Проверь у себя. |
|||
11
Builder
27.03.23
✎
10:38
|
(9) Запроси список складов через /api/v2/warehouses и посмотри там код.
|
|||
12
Builder
27.03.23
✎
10:41
|
+ к (9) Или в личном кабинете - ID склада.
|
|||
13
bormanius
27.03.23
✎
11:19
|
(12) Спасибо. Сейчас нет доступа к полному личному кабинету WB - буду ждать, когда появится.
Попробовал получить список складов через запрос, вышла ошибка 301. ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить("accept", "application/json"); ЗаголовокHTTP.Вставить("Authorization", Токен); URLЗапроса = "/api/v2/warehouses/"; HTTPЗапрос = Новый HTTPЗапрос(URLЗапроса, ЗаголовокHTTP); Соединение = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPОтвет = Соединение.Получить(HTTPЗапрос); Если HTTPОтвет.КодСостояния = 200 Тогда ///Успешно получен ответ ДанныеОбработки = HTTPОтвет.ПолучитьТелоКакСтроку(); КонецЕсли; |
|||
14
Builder
27.03.23
✎
11:24
|
(13) косую убери в конце
URLЗапроса = "/api/v2/warehouses"; |
|||
15
bormanius
27.03.23
✎
11:46
|
(14) СПАСИБО ОГРОМНОЕ.
Получилось и код склада получить и остатки обновить. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |