|   |   | 
| 
 | 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 - через него уже в базе и создадим документы.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |