|
|
|
v7: Получение всех заказов с WB zenon46, Aka_demik, Vstur, malikov, zenik, MWWRuza, dchumak, АгентБезопаснойНацио, Sanchez_22, BalBess, Кир Пластелинин, nick86, skafandr, Howaitokira, obs191, ALCAPONA, liap_ok, JohnGilbert, Smit1C, Ager, Шурик71, paramedic, Builder, Kigo_Kigo, elka302, Климов Сергей, LLeonidov, lgsoft, kupec, 2S, DimR_71, Олдж, ЕRPe, Prog_man, DemonShinji2, Умный Слоненок, vyaz, Наивный, ADirks
| ☑ | ||
|---|---|---|---|---|
|
0
zenon46
10.10.25
✎
16:12
|
Господа, доброго времени суток. Понадобилось загрузить с WB все заказы с начала года, которые complete.
На первом проходе все получается как нужно, на втором выдается ошибка 400 (не верная ссылка), пересмотрел отладчиком, вроде бы все как нужно next и следующая дата уходят как надо. Куда копать ? Сделал так : next = 0;
ДатаНачалаЗапроса = ПолучитьДатуЧисло(2025,01,01,00,00,00);
Пока 1 = 1 Цикл
текСсылка = "orders?limit=1000&next="+next+"&dateFrom="+ДатаНачалаЗапроса+"";
Карлик.УстановитьПараметр("HTTPHEADER","Authorization: ТОКЕН");
Карлик.УстановитьПараметр("HTTPHEADER","Content-type: application/json; charset=utf-8");
Карлик.УстановитьПараметр("URL","marketplace-api.wildberries.ru/api/v3/"+текСсылка);
Приемник = Карлик.Приемник;
Приемник.Тип = 1;
Приемник.Данные = глПолучитьПутьРабочегоСтола()+"\"+"Answer.json";
КодВозврата = Карлик.Выполнить();
Если КодВозврата <> 200 Тогда
глСервис.ИконкаПредупреждения(1,1,1);
Предупреждение("Ошибка при загрузке заказов в сайта!",15);
СтатусВозврата(0);Возврат;
КонецЕсли;
UTF8_Win1251();
тестJSON = глРазборJSON(глПолучитьПутьРабочегоСтола()+"\"+"Answer.json");
Если тестJSON.orders.Количество() > 0 Тогда
ОбщееКоличиствоЗаказов = тестJSON.orders.Количество();
Для i = 0 По (ОбщееКоличиствоЗаказов-1) Цикл
текЗначИЗ_JSON = тестJSON.orders.Получить(i);
тзТест.НоваяСтрока();
тзТест.ДатаЗаказа = текЗначИЗ_JSON.createdAt;
КонецЦикла;
ИначеЕсли тестJSON.orders.Количество() = 0 Тогда
Прервать;
КонецЕсли;
КрайняяДатаПолученияЗаказа = тзТест.ДатаЗаказа;
Год = Лев(КрайняяДатаПолученияЗаказа,4);
КрайняяДатаПолученияЗаказа = СтрЗаменить(КрайняяДатаПолученияЗаказа,Год+"-","");
Мес = Лев(КрайняяДатаПолученияЗаказа,2);
КрайняяДатаПолученияЗаказа = СтрЗаменить(КрайняяДатаПолученияЗаказа,Мес+"-","");
День = Лев(КрайняяДатаПолученияЗаказа,2);
next = Число(тестJSON.next);
ДатаНачалаЗапроса = ПолучитьДатуЧисло(Число(Год),Число(Мес),Число(День),00,00,00);
КонецЦикла; |
|||
|
1
Bigbro
10.10.25
✎
19:32
|
я бы дату проверил, вдруг там дата месяц наоборот. чем черт не шутит все эти форматы по своему выбирают.
|
|||
|
2
dedmoroz777
10.10.25
✎
19:47
|
Не меняй дату в цикле
|
|||
|
3
Злопчинский
11.10.25
✎
13:03
|
Может таймаут влепить между запросами?
|
|||
|
4
Кир Пластелинин
11.10.25
✎
15:26
|
(3) если б было много запросов, то wb вернул 429 код, а тут 400
|
|||
|
5
Bigbro
12.10.25
✎
10:36
|
поставь точку останова, поймай ссылку, которая на втором проходе, посмотри ее глазами и вбей в браузер руками.
что будет? |
|||
|
6
MWWRuza
гуру
12.10.25
✎
09:36
|
А что это за тип запроса вообще? В смысле, "GET", "POST" или еще что-то?
Ты не пропустил случаем установку этого параметра? А то, может, на первом проходе он что-то по умолчанию подтягивает, а на последующих, после отработки первого запроса, "умолчание" сбивается? Сам запрос похож на тот, которым я в ЭДО лайт от ЧЗ список документов получаю, но, там у меня четко этот параметр устанавливается: Карлик.УстановитьПараметр("CUSTOMREQUEST", Тип); Где в данном случае, "Тип" это "GET", просто запрос карликом у меня вынесен в отдельную функцию ГМ (просто он у меня очень много где используется, и функция универсальная), и его тип передается параметром из места, откуда она вызывается, в зависимости от того, какой тип у этого запроса должен быть... PS Помню, в процессе отладки я где-то перепутал тип, и как раз ошибка 400 возвращалась, а в комментарии что-то типа "неверный запрос" или на подобии. |
|||
|
7
Кир Пластелинин
13.10.25
✎
08:25
|
а вообще, если речь идет о ручке /api/v3/orders, то там есть возможность указать как начало периода (dateFrom), так и окончание (dateTo). общий период за который необходимо получить все сборочные задания, скорее всего, известен. поэтому можно разбить его на подпериоды (ну в месяц, например, т.к. не знаю - есть ли у них ограничение на глубину запрашиваемого периода) и каждый период обработать в отдельности с корректной передачей значения пагинации. после того, как все сборочные задания "выбраны" из обрабатываемого подпериода - переходить уже к следующему со сбросом значения пагинации.
|
|||
|
8
Кир Пластелинин
13.10.25
✎
08:36
|
(8) да, ограничение в документации указано - 30 календарных дней. плюс, по хорошему, учесть их лимиты на количество запросов.
|
|||
|
9
zenon46
13.10.25
✎
14:03
|
Так как работа - разовая, решил дальше не разбираться, выгрузили все в Excel - через него уже в базе и создадим документы.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |