Ошибки api wildberries

Время на прочтение
3 мин

Количество просмотров 21K

UPD

Документация к v1 api обновлена. Теперь она вполне приятная и удобная(а не как раньше pdf файл). Если разработчики сделали это благодаря моему разбору — выражаю большую благодарность.

Так же прошу не обижаться на меня тех, кто решил поставить мне минусы за этот пост. Как мы можем видеть, возможно, это привело к хорошему результату.

Что касается остальных ошибок, сейчас сказать не могу, так как уже работаю с другими заказами и с другими апи, но ко мне в личные сообщения, до сих пор приходят вопросы касающегося плохо работающих методов в апи.

О себе

Разработчик-фрилансер, с опытом работы 2 года, а так же с большим количеством разного api (paypal, vk, moysklad и т. д.).

В этой статье, я не претендую на экспертность, а просто хочу рассказать свое субъективное мнение, об очень существенных на мой взгляд недостатках wildberries api.

Первое

Есть две версии апи и на каждую отдельная документация, в очень разных местах, при чем вторую обнаружить достаточно не тривиальная задача. Вместо двух документаций, лучше сделать одну и хорошо продуманную. (Если вам нужна полноценная документация вот ссылка)

Так же, я долго не мог понять, почему мой токен не подходит ко второй версии документации, а удалось мне это понять, только во время обсуждений в неофициальном чате разработчиков. Оказывается, что для этого нужно получать другой токен, во вкладке которая отображается только у владельца аккаунта. Как можно понять, владельцем аккаунта далеко не вседга является разработчик которому требуется апи wildberries. При этом, что более важно, об этом нету ни одного слова в документации.

Ошибки

429 (слишком частые запросы), появляется даже если я делаю запрос с перерывом в несколько минут. В чем её причина, можно только гадать. При обычном интервале в 3 секунды между тремя запросами — ошибка появляется практически при каждом запуске узла. При этом, никакой информации об ограничениях, в документации мне найти не удалось. Эта ошибка наиболее сильно мешает нормальной работе.

500 (ошибка сервера), стандартная ошибка, встречается почти в любых апи. Но очень хочется, что бы был отдельный канал в который будут приходить уведомления о работах на сервере или о внештатных ситуациях, и предполагаемом времени их решения.

В документации нету описания всех возможных кодов ошибок, как это сделано например в документации Вконтакте или МойСклад, в которых есть информация об ошибках на любой случай, и можно заранее написать обработчики этих ошибок.

Авторизация

  1. Нельзя сгенерировать разные токены, с разными правами, для разных пользователей.

  2. Нету возможности, обновления токена при новых запросах.

Функционал

Очень не хватает веб-хуков. Особенно учитывая, что есть ограничения на запросы с очень загадочными правилами.

Не хватает возможности, получать остатки/продажи товаров по Конкретному региону или складу/списку складов.

Синтаксические ошибки

Например в документации (не полная) указан ключ Date, но от сервера приходит словарь с ключом date. В полной документации такой ошибки нету.

Баги

Возможно только я с ними столкнулся, но как минимум два бага, сейчас не дают закончить проект на финишной прямой.

  1. в остатках товара на складе, на сайте указано одно число, а в апи приходит другое. (на сайте остаток по номенклатуре N, на складе N — 7, а с апи приходит — 1)

  2. не получается пройти авторизацию к апи из второй документации (v2).Инструкций для этого нету. И даже если пробовать делать запросы через формы на сайте, то в ответ приходит ошибка «Invalid token».

Техническая поддержка

Найти техническую поддержку именно для разработчиков мне не удалось. Сколько еще багов они не исправляют из-за этого, можно только гадать. Ибо многие просто перестают работать с их апи, или находят несоразмерно сложные решения, не обращаясь в тех поддержку из-за сложностей связанных с этим процессом именно в wildberries.

P. S.

Одной из предполагаемых причин ошибки 429, является работающий у меня VPN, в таком случае, хотелось бы получать информацию об ошибке из-за слишком частых запросов с одного IP.

Если у кого-то либо возникает желание порекомендовать отключить VPN, или отключить его для WB Api, то вам нужно понимать, что я использую VPN для защиты передаваемых в сеть данных, в связи с периодическими новостями о найденных в роутерах уязвимостях позволяющих получить злоумышленникам полный контроль над роутером, что в свою очередь позволяет перехватывать все отправляемые в сеть данные, в связи с чем я предпочитаю передавать данные в недоступном для злоумышленников виде, до первого относительно безопасного узла, коим и является VPN.

Написал этот пост без агрессии или претензий, а с надеждой на изменение wb api в лучшую сторону. Так же надеюсь этот будет полезен тем, кто проектирует новое апи.

При работе с сервисом PI-Data вы можете получить сообщение о том, что ваш API-ключ не работает. Что это значит и как устранить ошибку разберем в этой статье.

Ошибка может возникать в двух случаях: введен неверный ключ или API-ключ не активен.
Чтобы определить тип ошибки, можно сделать простую диагностику: 

  1. Ключ введен неверно — укажите АПИ ключ заново

Проверьте корректность ввода ключа — самый простой способ это заново его скопировать из вашего Личного Кабинета Поставщика Wildberries, вот здесь детальная инструкция

  1. API-ключ не активен — проверьте это самостоятельно — ниже инструкция для этого 

Как проверить активность ключа?

Чтобы проверить активен ли ключ, перейдите по ссылке и отредактируйте ее по образцу ниже.

Введите даты за предыдущий день и ваш API-ключ. Место для вставки мы указали скобками. Удалите скобки и вставьте свои значения: https://suppliers-stats.wildberries.ru/api/v1/supplier/sales?dateFrom=2021-01-12(ввести дату предыдущего дня по такому формату)T00:00:00.000Z&flag=1&key=вашAPIключ

a. Если при вводе вашего ключа на экране появляется много информации о поставках – поздравляем, ваш ключ активен! 

b. Если же появляется всего одна строчка – то может быть несколько причин:

– Ключ рабочий и продаж не было за этот день (поэтому проверять нужно за день, когда точно были продажи)

– Ключ рабочий и дата указана вне периода, за который хранятся данные (макс. 3 месяца, но на практике может быть и меньше) — поэтому лучше всегда проверять за вчерашний день

– Если причины выше исключены, то ваш API-ключ не работает и нужно его перевыпустить.

Если не один из вариантов не работает – обратитесь к нам на почту: team@pi-data.ru

Еще больше статей про API-ключи и не только вы сможете найти в нашем блоге:
– Как сгенерировать API-ключ и как его перевыпустить
– Что такое API ключ ВБ? Какая история доступна по АПИ и что вообще по нему доступно

В данной заметке будут отписаны ошибки которые вы можете увидеть в логе и необходимая реакция на их:

Важное!

  1. «Запрос к WB > Ошибка (0) Ответ: «

    — если ошибка происходит иногда, время от времени появляется, но выгрузки происходят — ничего делать не требуется это периодические зависания API WB

    — eсли ошибка происходит постоянно (выгрузки не проходят, все запросы заканчиваются ошибкой) — пишем в поддержку Wildberries, жалуемся что «запросы от нашего сайта по API не принимаются серверами WB, curl выдаёт ошибку Connection timed out after 10001 milliseconds». Поддержка запросит ваш IP и поправит

Общие

  1. «Запрос к WB > Ошибка (502) Ответ: 502 Bad Gateway» — ошибка со стороны wb, ничего делать не требуется, просто ждем следующего запроса
  2. «Запрос к WB > Ошибка (500) Ответ: dialing to the given TCP address timed out» — ошибка со стороны wb, ничего делать не требуется, просто ждем следующего запроса
  3. «Запрос к WB > Ошибка (500) Ответ: Internal Server Error» — ошибка со стороны wb, ничего делать не требуется, просто ждем следующего запроса
  4. «Запрос к WB > Ошибка (401) Ответ: invalid token​» — в настройках решения указан некорректный токен, зайдите в лк WB и проверьте указанный в настройках токен, либо сгенерируйте новый

Остатки

  1. «Не найдено. Штрихкоды: 203767034198, 203741190659» — такое сообщение появляется когда вы отдаёте на WB остаток по товару со штрихкодом, которого фактически нет в вашем личном кабинете WB. Проверяем и исправляем штрихкод (правильно ли указан на сайте) или исключаем из выгрузки проблемный товар.

    На днях WB начал чистку старых товаров поставщиков, данная ошибка может быть следствием того что WB удалил товар из вашего лк, а связанный товар на сайте остался. В этом случае нужно разорвать связь с сайтом (зайти в карточку товара в битриксе и удалить связь или отключить товар из выгрузки)

  2. «Выбранный склад не предназначен для крупногабаритных товаров» — WB считает что товар в ошибке крупногабаритный и не подходит для отгрузки на выбранный по fbs склад. Повлиять на это со стороны решения невозможно (расчеты производятся на wb, мы отдаём только шк + остаток + склад). Если товар не крупногабаритный — то нужно писать в поддержку WB для уточнения и исправления ситуации.
  3. «Указанный склад не принадлежит данному поставщику» — проверьте настройки решения, поле «ID Склада поставщика» — ошибка говорит о том, что поле заполнено не корректно, данные в поле не совпадают с ID склада в личном кабинете WB

Цены и скидки

  1. «Ошибка (400) Ответ: {«errors»:[«данных номенклатур не было в выгруженном с портала шаблоне: [40799], добавление строк в шаблон запрещено»]}» — такая ошибка бывает в двух случаях:

    а) При обновлении цены или скидки для свежесозданных карточек. Изменение становится доступным автоматически после 6-12ч после создания карточки. В этом случае ничего делать не требуется, как только для данных позиций будет доступно изменение, wb примет запрос.

    б) Если некорректные связи: WB не будет принимать запрос, если в выгрузке присутствует товар, которого нет на WB. Если ошибка висит продолжительное время проверьте артикул WB из описания ошибки — если ли реальная карточка товара на WB с указанным артикулом.

  2. «Ошибка (400) Ответ: {«errors»:[«все номенклатуры с ценами из списка уже загружены, новая загрузка не создана»],»error_code»:1} » — wb при получении запроса на смену цен сравнивает данные в запросе с уже установленными ценами на товары. Если в запросе данные не отличаются от установленных — получаем такую ошибку. Ничего делать не нужно.
  3. «Ошибка (400) Ответ: Ответ: {«errors»:[«на следующие номенклатуры указана слишком высокая цена. Рост более 30 процентов: [15380059]»]}» — wb установил правило — нельзя повышать цены более чем на 30% (до 30% в неделю насколько понял, но лучше уточняйте у поддержки wb). Проверка осуществляется на серверах WB, со стороны решения не повлиять — соответственно решить можно только снижением цены

Сборочные задания

  1. «Сборочное задание 1291117 не загружено. Ошибка Ошибка проверки доступного количества товара `Шапка спортивная`»

    Товар который решение пытается добавить в заказ недоступен к покупке на сайте (включен количественный учет битрикса и количество = 0, битрикс не даст добавить в заказ такой товар). В этом случае нужно либо сделать товар доступным (добавить доступное количество), либо скорректировать настройки решения, установив опцию «Сборочные задания с товарами без доступного количества» = Создать заказ с безымянным товаром

Ошибка запросов к API Wildberries "Доступ запрещен" код 443

Код ответа сервера suppliers-api.wildberries.ru становится равен 443, текст ответа — «Доступ запрещен». Такая ошибка появляется при запросах к API продавца, не к API статистики. При этом API статистики продолжает корректно работать.

Ошибка чаще всего начинает воспроизводиться примерно через 90 дней после выпуска токена. При этом на странице настроек личного кабинета продавца нет никакой информации о проблемах интеграции по API. Наоборот. На странице https://seller.wildberries.ru/supplier-settings/access-to-new-api дата последнего использования токена регулярно обновляется (при каждой вашей попытке выполнения запроса).

Решение:

Перевыпустить токен на странице: https://seller.wildberries.ru/supplier-settings/access-to-new-api и указать новое значение токена у себя в 1С.

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) СПАСИБО ОГРОМНОЕ.

Получилось и код склада получить и остатки обновить.

Понравилась статья? Поделить с друзьями:
  • Ошибки anr что это
  • Ошибки chrysler stratus
  • Ошибки 23456789 на калине
  • Ошибки ebs volvo
  • Ошибки bmw e39 drive2 ru перевод