Доброго дня!
Делаю первые шаги по работе с WB, ранее не имел такого опыта. Для начала хотел получить список номенклатуры который имеется на WB.
Собственно в этой строке (HTTPЗапрос.АдресРесурса = "api/v2/get/cards/list";) использовал различные вариации на все ответ 404.
Как правильно получить список номенклатуры ?
Делаю первые шаги по работе с WB, ранее не имел такого опыта. Для начала хотел получить список номенклатуры который имеется на WB.
HTTPЗапрос = Новый HTTPЗапрос();
HTTPЗапрос.АдресРесурса = "api/v2/get/cards/list";
HTTPЗапрос.Заголовки.Вставить("Authorization", адWildberriesКлючДляРаботыСAPI);
HTTPСоединение = Новый HTTPСоединение("suppliers-api.wildberries.ru",,,,,5,Новый ЗащищенноеСоединениеOpenSSL());
СервераОтвет = HTTPСоединение.Получить(HTTPЗапрос);
ОтветSRV = СервераОтвет.ПолучитьТелоКакСтроку();
КодSRV = СервераОтвет.КодСостояния;
ПоказатьСобственно в этой строке (HTTPЗапрос.АдресРесурса = "api/v2/get/cards/list";) использовал различные вариации на все ответ 404.
Как правильно получить список номенклатуры ?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) Судя по описанию https://openapi.wildberries.ru/content/api/ru/#tag/Prosmotr/paths/~1content~1v2~1get~1cards~1list/post
запрос должен быть к /content/v2/get/cards/list и в него нужно дополнительно передать параметры
в виде json строки:
{
"settings": {
"cursor": {
"limit": 100
},
"filter": {
"withPhoto": -1
}
}
}
запрос должен быть к /content/v2/get/cards/list и в него нужно дополнительно передать параметры
в виде json строки:
{
"settings": {
"cursor": {
"limit": 100
},
"filter": {
"withPhoto": -1
}
}
}
(6)а как это правильно сделать, передавал просто строкой, не работает, делал вот так :
тоже не работает
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьЗначение("{ ""settings"": { ""cursor"": { ""limit"": 100 }, ""filter"": { ""withPhoto"": -1 } } }");
СтрокаJSON = Запись.Закрыть();
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
тоже не работает
(8) а ты результат смотрел что у тебя в СтрокаJSON получилось?
Если в таком виде то просто передавай как строку
Если хочешь использовать ЗаписьJSON то написать можно вот так
Если в таком виде то просто передавай как строку
СтрокаJSON = "{ ""settings"": { ""cursor"": { ""limit"": 100 }, ""filter"": { ""withPhoto"": -1 } } }";
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
Если хочешь использовать ЗаписьJSON то написать можно вот так
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
Курсор = Новый Структура;
Курсор.Вставить("limit", 100);
Фильтр = Новый Структура;
Фильтр.Вставить("withPhoto", -1);
Стр = Новый Структура;
Стр.Вставить("cursor", Курсор);
Стр.Вставить("filter", Фильтр);
СтруктураИтоговая = Новый Структура;
СтруктураИтоговая.Вставить("settings", Стр);
ЗаписатьJSON(ЗаписьJSON, СтруктураИтоговая);
СтрокаJSON = ЗаписьJSON.Закрыть()
Показать
(9)
Попробовал обоими способами, ошибка одна и та же 405
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
Курсор = Новый Структура;
Курсор.Вставить("limit", 100);
Фильтр = Новый Структура;
Фильтр.Вставить("withPhoto", -1);
Стр = Новый Структура;
Стр.Вставить("cursor", Курсор);
Стр.Вставить("filter", Фильтр);
СтруктураИтоговая = Новый Структура;
СтруктураИтоговая.Вставить("settings", Стр);
ЗаписатьJSON(ЗаписьJSON, СтруктураИтоговая);
СтрокаJSON = ЗаписьJSON.Закрыть()
ПоказатьЗаписьJSON.УстановитьСтроку();
Курсор = Новый Структура;
Курсор.Вставить("limit", 100);
Фильтр = Новый Структура;
Фильтр.Вставить("withPhoto", -1);
Стр = Новый Структура;
Стр.Вставить("cursor", Курсор);
Стр.Вставить("filter", Фильтр);
СтруктураИтоговая = Новый Структура;
СтруктураИтоговая.Вставить("settings", Стр);
ЗаписатьJSON(ЗаписьJSON, СтруктураИтоговая);
СтрокаJSON = ЗаписьJSON.Закрыть()
Попробовал обоими способами, ошибка одна и та же 405
(1)
ИмяМетода = "content/v2/get/cards/list";
Смещение = 0;
СтрокНаЗапрос = 100;
Лимит = 100;
ИспользоватьХарактеристики = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
ДанныеКарточек = Новый ТаблицаЗначений;
ДопДанныеКарточек = Новый ТаблицаЗначений;
ЗаполнитьСтруктуруТаблицКарточки(ДанныеКарточек, ДопДанныеКарточек, ИспользоватьХарактеристики);
СтруктураЗапроса = ЗаполнитьСтруктуруПараметровЗапросаCardListОбновленная(СтрокНаЗапрос);
Результат = ВыполнитьМетодAPI("POST", СтруктураЗапроса, ИмяМетода, СтруктураВозврата, ПараметрыВыполнения);
Функция ЗаполнитьСтруктуруПараметровЗапросаCardListОбновленная(СтрокНаЗапрос, БарКод = Неопределено)
СтруктураЗапроса = Новый Структура;
СтрЗапроса = Новый Структура;
Курсор = Новый Структура;
Курсор.Вставить("limit", СтрокНаЗапрос);
СтрЗапроса.Вставить("cursor", Курсор);
Фильтр = Новый Структура;
Фильтр.Вставить("withPhoto", -1);
//Фильтр.Вставить("textSearch", "");
СтрЗапроса.Вставить("filter", Фильтр);
Сорт = Новый Структура("sortColumn,ascending","updateAt",Ложь);
СтрЗапроса.Вставить("settings",Сорт);
СтруктураЗапроса.Вставить("settings", СтрЗапроса);
Возврат СтруктураЗапроса;
КонецФункции
Функция ВыполнитьМетодAPI(Метод, ПараметрыЗапроса, ИмяМетода, СтруктураВозврата, ПараметрыВыполнения,
URL = Неопределено, ВерсияAPI = 2, ПараметрыЗаписиJSON = Неопределено, ЭтоСтатистика = ЛОжь) Экспорт
Если НЕ ОтказатьВДействии().Ответ.Получить("available") Тогда
СтруктураВозврата.Вставить("ОтправляемоеСообщение", "Ошибка получения данных. Свяжитесь с разработчиком расширения");
СтруктураВозврата.Вставить("Ошибка", Истина);
Возврат НЕ СтруктураВозврата.Ошибка;
КонецЕсли;
URLМаркета(URL, ИмяМетода, ПараметрыВыполнения.ТестовыйРежим);
Заголовки = КоннекторHTTPПереопределяемый.ПолучитьЗаголовокиПодключения("json", "json");
Если ВерсияAPI = 2 тогда
Если ПустаяСтрока(ПараметрыВыполнения.ТокенAPI) тогда
СтруктураВозврата.Вставить("ОтправляемоеСообщение", "Не заполнен Токен учетной записи.");
СтруктураВозврата.Вставить("Ошибка", Истина);
Конецесли;
Заголовки.Вставить("Authorization", ?(НЕ ЭтоСтатистика,СокрЛП(ПараметрыВыполнения.ТокенAPI),ПараметрыВыполнения.ТокенСтатистики));
Иначе
Если ПустаяСтрока(ПараметрыВыполнения.ТокенAPIv1) тогда
СтруктураВозврата.Вставить("ОтправляемоеСообщение", "Не заполнен Токен учетной записи.");
СтруктураВозврата.Вставить("Ошибка", Истина);
Конецесли;
Заголовки.Вставить("X-Auth-Token", СокрЛП(ПараметрыВыполнения.ТокенAPIv1));
Конецесли;
ДополнительныеПараметры = Новый Структура("Заголовки, ПараметрыВыполнения, ПараметрыЗаписиJSON", Заголовки, ПараметрыВыполнения, ПараметрыЗаписиJSON);
Если ТипЗнч(ПараметрыЗапроса) = Тип("Структура") тогда
ПараметрыЗапросаОтправляемые = Новый Соответствие;
Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда
Для Каждого КИЗ из ПараметрыЗапроса Цикл
Если ТипЗнч(КИЗ.Значение) = Тип("Число") Тогда
ПараметрыЗапросаОтправляемые.Вставить(КИЗ.Ключ, Формат(КИЗ.Значение,"ЧРД=.; ЧГ=; ЧН="));
Иначе
ПараметрыЗапросаОтправляемые.Вставить(КИЗ.Ключ, КИЗ.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
ПараметрыЗапросаОтправляемые = ПараметрыЗапроса;
КонецЕсли;
Попытка
Если Метод = "POST" тогда
РезультатЧтения = КоннекторHTTP.PostJson(URL, ПараметрыЗапросаОтправляемые, ДополнительныеПараметры);
ИначеЕсли Метод = "GET" тогда
РезультатЧтения = КоннекторHTTP.GetJson(URL, ПараметрыЗапросаОтправляемые, ДополнительныеПараметры);
ИначеЕсли Метод = "PUT" тогда
РезультатЧтения = КоннекторHTTP.PutJson(URL, ПараметрыЗапросаОтправляемые, ДополнительныеПараметры);
ИначеЕсли Метод = "DELETE" тогда
РезультатЧтения = КоннекторHTTP.DeleteJson(URL, ПараметрыЗапросаОтправляемые, ДополнительныеПараметры);
ИначеЕсли Метод = "PATCH" тогда
РезультатЧтения = КоннекторHTTP.PatchJson(URL, ПараметрыЗапросаОтправляемые, ДополнительныеПараметры);
Конецесли;
СтруктураВозврата.Вставить("РезультатЧтения", РезультатЧтения);
Если РезультатЧтения <> Неопределено
И ТипЗнч(РезультатЧтения) = Тип("Соответствие")
И РезультатЧтения.Получить("error") <> Неопределено тогда
Если ТипЗнч(РезультатЧтения["error"]) = Тип("Булево")
И РезультатЧтения["error"] = Истина тогда
Если РезультатЧтения.Получить("errorText") <> Неопределено тогда
ОтправляемоеСообщение = "Неверный код ответа на запрос "+ИмяМетода+": "+РезультатЧтения["errorText"]+". ";
Иначе
ОтправляемоеСообщение = "Неверный код ответа на запрос "+ИмяМетода+". ";
Конецесли;
Если РезультатЧтения.Получить("data") <> Неопределено
И ТипЗнч(РезультатЧтения["data"]) = Тип("Массив") тогда
Если РезультатЧтения["data"].Количество() > 0 тогда
ОтправляемоеСообщение = ОтправляемоеСообщение + "Ошибки: ";
Для каждого Error из РезультатЧтения["data"] Цикл
ОтправляемоеСообщение = ОтправляемоеСообщение + Error + ",";
КонецЦикла;
Конецесли;
Конецесли;
ОтправляемоеСообщение = Лев(ОтправляемоеСообщение, СтрДлина(ОтправляемоеСообщение)-1);
СтруктураВозврата.Вставить("ОтправляемоеСообщение", ОтправляемоеСообщение);
ИначеЕсли РезультатЧтения.Получить("error") <> Неопределено
И ТипЗнч(РезультатЧтения["error"]) = Тип("Булево")
И РезультатЧтения["error"] = Ложь тогда
Возврат НЕ СтруктураВозврата.Ошибка;
ИначеЕсли РезультатЧтения.Получить("error") <> Неопределено
И ТипЗнч(РезультатЧтения["error"]) = Тип("Соответствие") тогда
СтруктураВозврата.Вставить("ОтправляемоеСообщение", "Неверный код ответа на запрос "+ИмяМетода+": Код="+РезультатЧтения["error"]["code"]+", "+РезультатЧтения["error"]["message"]);
ИначеЕсли РезультатЧтения.Получить("error") <> Неопределено
И ТипЗнч(РезультатЧтения["error"]) = Тип("Строка") тогда
СтруктураВозврата.Вставить("ОтправляемоеСообщение", "Неверный код ответа на запрос "+ИмяМетода+": "+РезультатЧтения["error"]);
ИначеЕсли НЕ РезультатЧтения.Получить("errors") = Неопределено тогда
ОтправляемоеСообщение = "Неверный код ответа на запрос "+ИмяМетода+": ";
Для каждого Error из РезультатЧтения["errors"] Цикл
ОтправляемоеСообщение = ОтправляемоеСообщение + Error + ",";
КонецЦикла;
ОтправляемоеСообщение = Лев(ОтправляемоеСообщение, СтрДлина(ОтправляемоеСообщение)-1);
СтруктураВозврата.Вставить("ОтправляемоеСообщение", ОтправляемоеСообщение);
Иначе
СтруктураВозврата.Вставить("ОтправляемоеСообщение", "Неверный код ответа на запрос "+ИмяМетода);
Конецесли;
СтруктураВозврата.Вставить("Ошибка", Истина);
Конецесли;
Исключение
СтруктураВозврата.Вставить("ОтправляемоеСообщение", "Нет ответа от "+URL+": "+ОписаниеОшибки());
СтруктураВозврата.Вставить("Ошибка", Истина);
КонецПопытки;
Возврат НЕ СтруктураВозврата.Ошибка;
КонецФункции
Функция GetJson(URL, ПараметрыЗапроса = Неопределено, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт
ТекущаяСессия = ?(Сессия = Неопределено, СоздатьСессию(), Сессия);
ЗаполнитьДополнительныеДанные(ДополнительныеПараметры, ПараметрыЗапроса, Неопределено, Неопределено);
ПараметрыПреобразованияJSON =
ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыПреобразованияJSON", Неопределено);
Возврат КакJson(ВызватьHTTPМетод(ТекущаяСессия, "GET", URL, ДополнительныеПараметры), ПараметрыПреобразованияJSON);
КонецФункции
Процедура ЗаполнитьДополнительныеДанные(ДополнительныеПараметры, ПараметрыЗапроса, Данные, Json) Экспорт
Если ДополнительныеПараметры = Неопределено Тогда
ДополнительныеПараметры = Новый Структура();
КонецЕсли;
Если Не ДополнительныеПараметры.Свойство("ПараметрыЗапроса") Тогда
ДополнительныеПараметры.Вставить("ПараметрыЗапроса", ПараметрыЗапроса);
КонецЕсли;
Если Не ДополнительныеПараметры.Свойство("Данные") Тогда
ДополнительныеПараметры.Вставить("Данные", Данные);
КонецЕсли;
Если Не ДополнительныеПараметры.Свойство("Json") Тогда
ДополнительныеПараметры.Вставить("Json", Json);
КонецЕсли;
КонецПроцедуры
Функция КакJson(Ответ, ПараметрыПреобразованияJSON = Неопределено) Экспорт
Возврат JsonВОбъект(РаспаковатьОтвет(Ответ), Ответ.Кодировка, ПараметрыПреобразованияJSON);
КонецФункции
Функция ВызватьHTTPМетод(Сессия, Метод, URL, ДополнительныеПараметры) Экспорт
КодыСостоянияHTTP = КодыСостоянияHTTP();
ПодготовленныйЗапрос = ПодготовитьЗапрос(Сессия, Метод, URL, ДополнительныеПараметры);
НастройкиПодключения = ПолучитьНастройкиПодключения(Метод, URL, ДополнительныеПараметры);
Ответ = ОтправитьЗапрос(Сессия, ПодготовленныйЗапрос, НастройкиПодключения);
Перенаправление = 0;
Пока Перенаправление < Сессия.МаксимальноеКоличествоПеренаправлений Цикл
Если Не НастройкиПодключения.РазрешитьПеренаправление ИЛИ Не Ответ.ЭтоРедирект Тогда
Если ДополнительныеПараметры.ПараметрыВыполнения.ПроизводитьЛогированиеОпераций тогда
ОбщийМодульСервер.ЗаписатьДанныеВЛог(?(ПодготовленныйЗапрос.Свойство("СтрокаЗапроса"),ПодготовленныйЗапрос.СтрокаЗапроса, ""),
КакТекст(Ответ), URL, ДополнительныеПараметры.ПараметрыВыполнения.УчетнаяЗаписьМаркетплейс);
Конецесли;
Возврат Ответ;
КонецЕсли;
НовыйURL = СформироватьНовыйURLПриПеренаправлении(Ответ);
ПодготовленныйЗапрос.URL = КодироватьСтроку(НовыйURL, СпособКодированияСтроки.URLВКодировкеURL);
НовыйHTTPЗапрос = Новый HTTPЗапрос(СобратьАдресРесурса(РазобратьURL(НовыйURL), Неопределено));
ПереопределитьМетод(ПодготовленныйЗапрос, Ответ);
Если Ответ.КодСостояния <> КодыСостоянияHTTP.ВременноеПеренаправление_307
И Ответ.КодСостояния <> КодыСостоянияHTTP.ПостоянноеПеренаправление_308 Тогда
УдалитьЗаголовки(ПодготовленныйЗапрос.Заголовки, "content-length,content-type,transfer-encoding");
НовыйHTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки;
Иначе
ИсходныйПоток = ПодготовленныйЗапрос.HTTPЗапрос.ПолучитьТелоКакПоток();
ИсходныйПоток.КопироватьВ(НовыйHTTPЗапрос.ПолучитьТелоКакПоток());
КонецЕсли;
ПодготовленныйЗапрос.HTTPЗапрос = НовыйHTTPЗапрос;
УдалитьЗаголовки(ПодготовленныйЗапрос.Заголовки, "cookies");
ПодготовленныйЗапрос.Cookies = ОбъединитьCookies(Сессия.Cookies, ПодготовленныйЗапрос.Cookies);
ПодготовитьCookies(ПодготовленныйЗапрос);
Ответ = ОтправитьЗапрос(Сессия, ПодготовленныйЗапрос, НастройкиПодключения);
Перенаправление = Перенаправление + 1;
КонецЦикла;
ВызватьИсключение("СлишкомМногоПеренаправлений");
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот