База знаний
Войдите в личный кабинет для возможности задавать вопросы и отвечать на комментарии.
Полезная информация

Диагностика работы плагина "Интеграция с Яндекс.Маркет"

Поддержка Bodysite
Поддержка Bodysite
14 октября 2021 18:22
+1

На данной странице описаны типичные сложности, с которыми сталкиваются пользователи плагина "Интеграция с Яндекс.Маркет". Предполагается, что вы уже настроили плагин по инструкции.

Содержание:

1. Ваша система отвечает через API с ошибками

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

В этом случае нужно зайти в лог запросов (В правом меню, в нижней части наведите на название магазина -  Отладка - Лог запросов к вашему серверу), 


Выбрать дату и время начала, переключиться на "Ошибки" и посмотреть детали конкретных ошибок


1.1. Пример - ошибка 500

Детали ошибки:

В этом конкретном примере мы видим, что на некоторые запросы наш сайт ответил ошибкой с кодом 500 (Internal Server Error) В тексте ответа содержится информация об ошибке с номером 1021. 

Далее уже можно переходить к сайту и изучать его логи на предмет причины неполадок.

В файле error.log есть отсылка на подробности в файле db.log, в котором и нашлась причина возникновения ошибок 1021 - на хостинге закончилось место.

1.2. Пример - 422 Shop response is too slow. SLA breached

Детали ошибки:

Ошибка, связанная с долгим ответом сервера - 422 Shop response is too slow. SLA breached. Обычно это не постоянная ошибка, а периодически возникающая несколько раз в день. 

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

1.3. Пример - INVALID_RESPONSE / JSON PARSE ERROR

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

Аналогично предыдущим пунктам посмотрите, какой ответ отдаёт сайт на вкладке "Ответ".

Пример возможной ситуации: плагин "Услуга на корзину "Подъем" (raiseorderprice) выдёт ошибку при создании заказа и ломает ответ Яндексу:

<b>Fatal error</b>:  Uncaught TypeError: Argument 1 passed to shopRaiseorderpricePlugin::extractShippingId() must be of the type string, null given, called in /var/www/u1111111/data/www/site.ru/wa-apps/shop/plugins/raiseorderprice/lib/shopRaiseorderprice.plugin.php on line 85 and defined in /var/www/u1111111/data/www/site.ru/wa-apps/shop/plugins/raiseorderprice/lib/shopRaiseorderprice.plugin.php:215

Как исправить ошибку "the remote host certificate verification failed"

2. В админ-панель сайта не приходят заказы

Внимание! Синхронизируются только новые заказы, созданные после установки плагина

Если вы проходите самопроверку, смотрите пункт 2.4

2.1. А были ли вообще отправлены заказы?

В этом случае нужно зайти в лог запросов (Настройки - Лог запросов), 

Проверить что запросы на передачу заказов вообще отправляются, меняем время на максимальное (23ч), ищем метод /accept

Иногда случаются ошибки в работе Маркета и он не отправляет запросы по API какое-то время. Если запросов нет, значит Маркет ничего не отправлял.

Дополнение: в момент индексации прайс-листа Яндекс.Маркет не создаёт тестовые заказы!

2.2. Возможные ошибки

Если запросы есть, тогда посмотреть, есть ли ошибка в логах, она будет отображаться по кнопке "Детали".

Возможные варианты:

  • 403 Forbitten
  • Not in GZIP format
  • Ошибка 404: проверьте, правильно ли скопирована ссылка из плагина
  • Item price is not positive: 0. Данная ошибка говорит о том, что ваш сайт отвечает, что цена товара нулевая. Если на самом деле цена товара не ноль, значит, скорее всего, неверно происходит сопоставление (не находит такой товар по offerID)
  • Ошибка 500: Incorrect string value и эмодзи

Если у вас хостинг Firstvds

Запросы отправляются, ошибки нет, но на сайте нет заказов:

Если у вас установлено приложение "Firewall", оно может блокировать запросы от Я.Маркета

2.3. "Вы отказались принимать заказ"

Плагин может отказаться принимать заказ, если товар не найден, либо он в недостаточном количестве. В этом случае в логе ответа будет: { "order": { "accepted": false, "reason": "OUT_OF_DATE" } }

Как продиагностировать: проверить в логах Яндекс.Маркет, какой товар с каким offerID запрашивает маркет. Смотрим запрос /accept. Вероятные причины ошибки:

  • Товара нет в наличии в нужном количестве на выбранном складе.
  • Товар отсутствует в списке, который вы выбрали для работы с этим профилем.
  • Товар скрыт.
  • Неверно сопоставляются OfferID Подробнее про сопоставление

2.4. Не удалось создать заказ при самопроверке

Может возникать следующая ошибка при одном из заданий самопроверки:

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

Эта ошибка возникает в том случае, если ответ по доставке, отдаваемый плагином, отличается от ожидаемого Маркетом. 

В этом случае нужно сделать следующее, после каждого пункта можно пробовать снова создать заказ:

  1. Максимально упростить условия доставки - убрать все пункты СДЭК, или вообще самовывоз, оставить только один или два варианта.
  2. Проверить, что указанные сроки доставки или самовывоза полностью соответствуют для указанных регионов. Они должны быть указаны и в личном кабинете Маркета, и в настройках плагина. Они должны совпадать. 
  3. Обратите внимание на выходные и праздничные дни. Опять же, они должны совпадать. 
  4. Обратите внимение на "время переноса". Оно должно совпадать.
  5. Посмотрите в логе запроса (в личном кабинете: Настройки - Лог запросов), для какого города Маркет запрашивает информацию, и какой получает ответ. Посчитайте вручную по срокам, указанным в личном кабинете, совпадают ли они. Подробнее как посмотреть ответ плагина - смотрите в пункте 2.5.
  6. Если ничего не помогает - нужно написать в техподдержку Маркета.

2.5. Как посмотреть, какими условиями доставки отвечает плагин.

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

В вашем личном кабинете Маркета в левом меню нужно навести на название кабинета, чтобы появилось дополнительное меню и там выбрать пункт "Отладка":

В Отладке нужно перейти на вкладку "Лог запросов к вашему серверу", далее выставить дату, выбрать ресурс POST /cart, можно по поиску найти нужный вам заказ и открыть детали запроса по трём точкам справа (столбец Детали):

В окне "Детали операции" во вкладке "Запрос" вы можете увидеть, для какого населённого пункта запрашивается информация, а во вкладке "Ответ" вы можете увидеть, какие условия доставки предлагают настройки плагина на вашем сайте. 

Проверьте, что они совпадают с настроенными в личном кабинете.

3. Не передаются статусы в маркет

Данная проблема может возникнуть в следующих случаях:

  • В настройках плагина действия магазина сопоставлены неверно. Выполняются действия, не выбранные в настройках плагина, и, соответственно, ничего не отправляется. Как проверить: в логи плагина ничего не записывается, в Маркете нет никаких запросов от сайта в логах. Подробнее про сопоставление статусов
  • Исходящий авторизационный токен неверен/отозван. Как проверить: в логах плагина будет запись об ошибке (Access Denied / Token Invalid). Токен может быть заблокирован при смене пароля у аккаунта Яндекса или по другим причинам, нужно его обновить. Как это делается написано здесь
  • Нарушена цепочка последовательности статусов. Вы пытаетесь сменить статус на тот, который недоступен для текущего заказа. Например, для модели FBS предусмотрена четкая последовательность: Принят - Готов к отгрузке - Отгружен. Если попытаться из "Принят" сразу перейти в "Отгружен", из этого ничего не выйдет. Как проверить: в логах плагина, в файле api.error.log будет запись: {"status":"ERROR","errors":[{"code":"STATUS_NOT_ALLOWED", "message": "No permission to set substatus SHIPPED for order XXXXX with status PROCESSING and substatus STARTED"}]}

4. Не меняется статус в Shop-script при смене статуса в Маркете

В первую очередь стоит проверить выбрано ли какое-либо действие для соответствующего статуса.

Например, вы хотите, чтобы в момент прихода отмены заказа выполнялось действие "Удалить". В настройках для данного профиля магазина должно быть выбрано это действие:

Если действие выбрано, но не выполняется, нужно проверить, отправлял ли Яндекс.Маркет нам какие-либо запросы. Для этого переходим в личный кабинет Яндекс.Маркет, левое меню, Настройки - Лог запросов.

Введите номер заказа из Маркета и обратите внимание на запросы с ресурсом /order/status/ :

По кнопке "Детали" можно посмотреть какой именно статус был отправлен в наш магазин, и какой он дал ответ, пример:

В данном случае был отправлен статус "Cancelled" (отменён). На вкладке "Ответ" при нормальной ситуации должно быть написано "Тело отсутствует", т.к. ответ на смену статуса не требуется. В случае какой-либо ошибки сайта, на этой вкладке могут быть написаны её подробности.

Если запроса с нужным вам статусом нет в этом интерфейсе, значит Яндекс.Маркет не отправлял запрос о смене статуса. Мы с таким сталкивались пару раз. Обратитесь в поддержку Маркета.

Внимание! В последнее время Я.Маркет не отправляет некоторые статусы заказов, например "Доставляется" или "Доставлен". Согласно ответу поддержки, это нормальная ситуация, и вы можете самостоятельно запрашивать актуальную информацию о заказах через соответствующий Cron (добавлено в версии 1.29.0)

Если ответ еще не найден, нужно исследовать логи нашего магазина на Shop-script. Включаете "Дебаг"-режим в общих настройках и проверяете, что записывается в логи. Также, стоит обратить внимание, не обновлятеся ли штатный лог error.log или db.log в момент получения запроса из Маркета. Поищите в этих файлах ошибки, в которых упомянут id плагина - pokupki.

5. Проблемы с передачей остатков

Кратко: самая частая проблема - неверно выбрано сопоставление "Ваш SKU" (offerID), поэтому остатки отдаются неверно. Подробно про настройку здесь.

Подробный процесс диагностики:

Передача остатков в Яндекс.Маркет в данный момент осуществляется с помощью двух механизмов:

  • Яндекс.Маркет сам запрашивает остатки по своему списку товаров, присылая запросы /stocks в любой момент.
  • Вы сами отправляете информацию в Маркет об остатках через метод /stocks, через кнопку в интерфейсе, или через автоматический планировщик CRON. Подробнее об этом здесь.

5.1. Диагностика для входящих обновлений остатков

Допустим, вы обнаружили, что наличие остатков в Яндекс.Маркет не соответствует сайту. Как проверить, почему они не обновились:
1. Выберите один или несколько товаров в личном кабинете Яндекс.Маркет, запишите значения из поля "Ваш SKU":

В данном случае это fbs213, fbs212, fbs214

2. Далее в личном кабинете нужно перейти в раздел "Отладка" - "Лог запросов к вашему серверу":

Нас интересуют запросы /stocks На вкладке "Лог запросов к вашему серверу" - те запросы, что посылает сам Маркет, а на вкладке "К серверу Маркета" - те запросы, что ваш сайт посылал самостоятельно. 

Обратите внимание, чтобы дата и время были выбраны правильно. Подробности запроса доступны по нажатию на "три точки":

Какие здесь могут быть ошибки:

1) Отсутствуют исходящие запросы /stocks от Маркета - неправильно выставлен временной интервал для просмотра запросов , либо не включено обновление остатков через API.

Проверьте обновление, нажав в личном кабинете в разделе "Настройки API" следующую кнопку: 

Внимание! По последней информации эта настройка есть не у всех магазинов, постеменно Яндекс Маркет её убирает. Сейчас по-умолчанию принимают остатки обоими методами.

У маркета бывают переходные периоды, это значит, что что-то может быть в интерфейсе одного магазина, а у другого еще нет.

2) Запросы /stocks присутствуют, но указано, что есть какие-то ошибки:

3) Запросы /stocks присутствуют, ошибок нет, в теле пусто

Если в реальных запросах наличия ошибок нет, но в ответе "Тело отсутствует", то это нормально. Ответ поддержки Маркета:

Это вполне нормальная ситуация ,когда тело ответа скрывается, открыто оно только в тестовых запросах , сделано это для экономии вычислительных ресурсов, главное ,чтобы статус запроса был 200

Как же узнать, какая информация передаётся об остатках? Переходим в админку нашего сайта и включаем "Дебаг режим": 

При этом режиме все запросы будут записываться в логи сайта. Перейдите в приложение "Логи". 

В файле plugins/pokupki/apiRequest.debug.log можно увидеть, по каким товарам было запрошены остатки, пример:

Попробуйте найти те SKU, которые записали ранее, присутствуют ли они в запросе Маркета. Для удобства файл лога вы можете скачать и посмотреть в текстовом редакторе на вашем компьютере (рекомендуем Sublime Text). 

Если SKU в запросе отсутствуют, значит Маркет не запрашивает по нему наличие. Это может происходить по различным, не зависящим от нас причинам - может быть товар в архиве? 

Если SKU присутствует, нужно изучить другой файл - ответ сайта. Найдите файл /plugins/pokupki/api.Response.debug.log - в него записывается ответ нашего сайта, та информация, которая отправляется в Яндекс.Маркет.

Теперь попробуйте найти ранее записанные SKU в этом файле. 

Если SKU присутствует, то проверьте, какое по нему отправляется наличие, и какое указано в самом товаре. В случае несовпадения проверьте:

  1. Сопоставление OfferID - ID товара/ID артикула/Код артикула. Подробнее про сопоставление.
  2. Выбранные склады в этой настройке.
  3. Условия по изменению наличия в этой настройке.

Если SKU отсутствует, значит такой товар не найден на вашем сайте. Проверьте следующее:

  1. Какие товары выбраны для определения наличия, присутствует ли в нём этот товар. Подробнее про настройку
  2. Неверно указан принцип сопоставления товаров. Проверьте, как выставлено сопоставление - ID товара/ID артикула/Код артикула. Подробнее про сопоставление.
  3. Не учтён формат SKU - например, в Маркете у вас fbs1234 (добавлена приставка к ID). Он заводится здесь.

5.1.1. Сайт отвечает, что товара 0 при запросах /cart

Такое может происходить по следующим причинам:

  • Товара нет в наличии в нужном количестве на выбранном складе.
  • Товар отсутствует в списке, который вы выбрали для работы с этим профилем.
  • Товар скрыт.
  • Неверно сопоставляются OfferID Подробнее про сопоставление

5.2. Диагностика для исходящих обновлений остатков

В случае использования самостоятельной отправки остатков, вся информация будет записана в файл /plugins/pokupki/api.Request.offers-stock.debug.log (Если в общих настройках плагина включен "дебаг режим"). В нем вы так же можете найти какой товар с каким наличием отправляется в Маркет, а полученные данные видны в личном кабинете на вкладке "К серверу Маркета", запросы /stocks.

Если при нажатии кнопки отправки остатков, вы видите, что обновляется лог /shop/plugins/pokupki/api.error.log , а внутри следующее сообщение:

{"error":{"code":403,"message":"Access denied"},"errors":[{"code":"FORBIDDEN","message":"Access denied"}],"status":"ERROR"}

значит варианта два:

  1. Исходящий токен доступа утратил актуальность, как обновить.
  2. Неверно введён номер кампании

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

Если у вас следующая ошибка при запуске обновления через Cron:

PHP Fatal error:  Uncaught Error: Cannot use object of type shopPokupkiShopProductSku as array in

Либо предупреждение:

PHP Notice:  Undefined index: catalog_selection_entities_union

то, вероятно, нужно проверить путь до интерпретатора php. Либо в Cron попробовать указать просто - php, либо более полный путь с учетом версии, пример такого: /opt/php74/bin/php (в вашем случае путь может быть другой, уточните его у поддержки хостинга)

Частый вопрос: обновил версию PHP на сайте (с 7.3. до 7.4.), перестали обновляться остатки

Вероятно, нужно обновить CRON команду: если ранее в ней была указана версия 7.3., замените указание на 7.4. Пример: было /opt/php73/bin/php , нужно поменять на /opt/php74/bin/php (в вашем случае путь может быть другой, уточните его у поддержки хостинга)

6. Проблемы с передачей цен

6.1. Слишком маленькая разница между ценой и "зачеркнутой ценой".

Обратите внимание, особенно при выставлении "наценки", чтобы разница между ценой и зачеркнутой ценой была больше установленного порога. Обычно это не менее 5%.

6.2. Ошибка 504 при нажатии на кнопку "Обновить сейчас" в настройках плагина.

Страница падает из-за таймаута соединения. При обновлении большого кол-ва товаров, передача всех цен не гарантирована, используйте запуск по Cron.

6.3. Не отправляются цены по CRON

Нужно проверить Cron задание. Какие могут быть здесь ошибки:

- Запуск не из под той версии PHP. 

Пример, сайт работает на PHP 7.4 (видно в приложении "Настройки" или в приложении "Логи". 

А в настройке CRON указали 8.2.:

Если вы не указываете версию (пишете в команде просто php), попробуйте указать. Например, для PHP 8.1 путь может быть таким: /opt/php81/bin/php

- Запуск не из под того пользователя. 

Обратите внимание, чтобы команда в Cron была добавлена из под юзера, указаного в настройках плагина:

Диагностика

7. Не скачивается акт приёма-передачи

  • Акт доступен только в день отгрузки
  • Проверьте, что все заказы переведены в статус "Готов к отгрузке".
  • Ошибка "Token Invalid" - проверьте исходящий авторизационный токен. Токен может быть заблокирован при смене пароля у аккаунта Яндекса, нужно его обновить. Как это делается написано здесь.

Проверьте, скачивается ли акт в личном кабинете Яндекс.Маркет. 

8. Магазин отключили из-за ошибок в работе API

Если ошибка только при запросе order/status:

Ошибка 500 при запросе order/status

Если ошибка при любом запросе, но иногда:

Яндекс.Маркет может запрашивать актуальное наличие товаров через запрос /stocks хоть каждую минуту. Поэтому, если на сайте возникли какие-либо неполадки, в результате чего он стал временно недоступен, либо стал дольше отвечать на запросы, это может привести к ошибкам в ответе по API, т.к. Яндекс ждёт ответа всего-лишь несколько десятков секунд. Проблем в плагине в этом случае нет.

В любом случае, нужно смотреть описание конкретных ошибок в логах

9. Заказ по модели FBS, но отображаются кнопки от DBS ("изменить дату доставки")

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

Вторая возможная причина: Id кампании вообще не заполнен в настройках этого профиля.

10. Инструменты диагностики

В диагностике вам может помочь:

10.1. Лог запросов в личном кабинете Яндекс.Маркет

Здесь вы сможете посмотреть, что отправляется из Маркета и какой он получает ответ.

10.2. Включение логирования в плагине

В этом случае в приложении "Логи" будут записи о запросах и ответах, которые принимает или отправляет плагин.

10.3. Отправка тестовых запросов через сервис "Postman"

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

10.4. Отправка тестовых заказов через интерфейс в Яндекс.Маркет

В личном кабинете продавца "Яндекс.Маркет" зайдите в раздел левого меню Настройки - тестовые заказы

Здесь можно отправить тестовый заказ и проверить работу плагина.

11. Другие ошибки и вопросы

Что за ошибка в логах - 

{"errors":[{"code":"FORBIDDEN","message":"Access denied"}],"status":"ERROR"}

Это ошибка входящего токена, перепроверьте его.

  • Указал точки выдачи, но они не отображаются при оформлении
  • Не заходит в заказ, ошибка Query Error 1267: Illegal mix of collations (latin1_swedish_ci,IMPLICIT)
  • При нажатии на кнопку "добавить грузовое место" окно закрывается
  • Как пройти самопроверку, ведь нужно отказаться от заказа?
  • Как передать статус "передан в доставку", ведь действие отсутствует? (уже вернули обратно)
  • Как исправить ошибку "the remote host certificate verification failed"
  • Если у вас возникала какая-то другая проблема, не описанная на данной странице, нужно написать в поддержку по почте support@bodysite.ru , мы все проверим.