На данной странице описаны типичные сложности, с которыми сталкиваются пользователи плагина "Интеграция с Яндекс.Маркет". Предполагается, что вы уже настроили плагин по инструкции.
Содержание:
В случае возникновения каких-либо ошибок во взаимодействии вашего сайта с Яндекс.Маркетом, вы можете увидеть следующее сообщение: "Ваша система отвечает через API с ошибками. Сейчас товары показываются на витрине, но будут скрыты, если ошибок станет больше".
В этом случае нужно зайти в лог запросов (В правом меню, в нижней части наведите на название магазина - Лог запросов),
Нужно переключиться на вкладку "Лог запросов к вашему серверу, выбрать дату и время начала, переключиться на "Ошибки" и посмотреть детали конкретных ошибок, кликнув на одну из строк
Тип ошибки - CANT_GET_RESPONSE.
Детали ошибки:
В этом конкретном примере мы видим, что на некоторые запросы наш сайт ответил ошибкой с кодом 500 (Internal Server Error) . Данная ошибка может возникать по разным причинам. Часто - это ошибка в сторонних плагинах, которые "слушают" создание заказа и выполняют какие-то свои задачи. Нужно включать логи и смотреть где именно она возникает. Подробнее о том, как узнать причины ошибки 500.
В данном конкретном случае (на скриншоте) в тексте ответа содержится информация об ошибке с номером 1021.
В файле error.log есть отсылка на подробности в файле db.log, в котором и нашлась причина возникновения ошибок 1021 - просто на хостинге закончилось место.
Детали ошибки:
Ошибка, связанная с долгим ответом сервера - 422 Shop response is too slow. SLA breached. Обычно это не постоянная ошибка, а периодически возникающая несколько раз в день.
Причин долгого ответа может быть множество, чаще всего они связаны либо с недостаточными характеристиками сервера сайта, например, может быть выбран слабый тариф хостинга, не соответствующий нагрузке сайта. Либо ошибка возникает в периоды разовых пиковых нагрузок - синхронизаций с другими системами, обменом с 1С, большой активностью поисковых роботов в этот момент, либо DDOS атаки на сайт.
Ошибка связана с тем, что в ответе сайта имеются данные, которые Яндекс.Маркет не ожидает получить в ответ и не может их распарсить.
Аналогично предыдущим пунктам посмотрите, какой ответ отдаёт сайт на вкладке "Ответ".
Пример возможной ситуации: плагин "Услуга на корзину "Подъем" (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"
Проверьте, что плагин включён в инсталлере. Он может сам автоматически выключиться, если у вас отсутствует или истекла лицензия на плагин. Это штатные механизмы webasyst.
Внимание! Синхронизируются только новые заказы, созданные после установки плагина
Если вы проходите самопроверку, смотрите пункт 2.4
В этом случае нужно зайти в лог запросов (В правом меню, в нижней части наведите на название магазина - Лог запросов),
Проверить что запросы на передачу заказов вообще отправляются, меняем время на максимальное (23ч), ищем метод POST /order/accept/
Все запросы POST /order/accept/ означают отправку информации о новом заказе в ваш магазин. Кликнув на строку вы можете посмотреть детали заказа, а на вкладке "Ответ" что именно ответил ваш магазин.
Иногда случаются ошибки в работе Маркета и он не отправляет запросы по API какое-то время. Если запросов нет, значит Маркет ничего не отправлял.
Проверьте, что у вас включена отправка запросов из Маркета. Для этого зайдите в раздел "Модули и API", вкладка "Получение запросов от Маркета":
Дополнение: в момент индексации прайс-листа Яндекс.Маркет не создаёт тестовые заказы!
Если запросы есть, тогда посмотреть, есть ли ошибка в логах, она будет отображаться по кнопке "Детали".
Возможные варианты:
Запросы отправляются, ошибки нет, но на сайте нет заказов:
Если у вас установлено приложение "Firewall", оно может блокировать запросы от Я.Маркета
Плагин может отказаться принимать заказ, если товар не найден, либо он в недостаточном количестве. В этом случае в логе ответа будет: { "order": { "accepted": false, "reason": "OUT_OF_DATE" } }
Как продиагностировать: проверить в логах Яндекс.Маркет, какой товар с каким offerID запрашивает маркет. Смотрим запрос /accept. Вероятные причины ошибки:
Может возникать следующая ошибка при одном из заданий самопроверки:
Не получилось создать заказ Настройки доставки через API отличаются от настроек, которые вы сделали в личном кабинете. Посмотреть ошибку можно в логе запросов. Проследите, чтобы настройки доставки везде были одинаковыми, и выполните задание ещё раз.
Эта ошибка возникает в том случае, если ответ по доставке, отдаваемый плагином, отличается от ожидаемого Маркетом.
В этом случае нужно сделать следующее, после каждого пункта можно пробовать снова создать заказ:
Внимание! Больше нет необходимости настраивать условия доставки в плагине. Для активируйте галочку "Не использовать метод /cart" в личном кабинете Маркета: Настройки API -> Получение запросов от Маркета.
В некоторых случаях нужно проверить, какими условиями доставки отвечает плагин на вашем сайте для конкретных регионов при создании заказа по модели DBS, чтобы продиагностировать причины ошибок. Здесь опишем как это сделать через личный кабинет Маркета:
В вашем личном кабинете Маркета нужно зайти в лог запросов (В правом меню, в нижней части наведите на название магазина - Лог запросов),
В Отладке нужно перейти на вкладку "Лог запросов к вашему серверу", далее выставить дату, выбрать ресурс POST /cart, можно по поиску найти нужный вам заказ и открыть детали запроса, нажав на нужную строку:
В окне "Детали операции" во вкладке "Запрос" вы можете увидеть, для какого населённого пункта запрашивается информация, а во вкладке "Ответ" вы можете увидеть, какие условия доставки предлагают настройки плагина на вашем сайте.
Проверьте, что они совпадают с настроенными в личном кабинете.
Данная проблема может возникнуть в следующих случаях:
В первую очередь стоит проверить выбрано ли какое-либо действие для соответствующего статуса.
Например, вы хотите, чтобы в момент прихода отмены заказа выполнялось действие "Удалить". В настройках для данного профиля магазина должно быть выбрано это действие:
Если действие выбрано, но не выполняется, нужно проверить, отправлял ли Яндекс.Маркет нам какие-либо запросы. Для этого переходим в личный кабинет Яндекс.Маркет, в лог запросов (В правом меню, в нижней части наведите на название магазина - Лог запросов),
Введите номер заказа из Маркета и обратите внимание на запросы с ресурсом /order/status/ :
По кнопке "Детали" можно посмотреть какой именно статус был отправлен в наш магазин, и какой он дал ответ, пример:
В данном случае был отправлен статус "Cancelled" (отменён). На вкладке "Ответ" при нормальной ситуации должно быть написано "Тело отсутствует", т.к. ответ на смену статуса не требуется. В случае какой-либо ошибки сайта, на этой вкладке могут быть написаны её подробности.
Если запроса с нужным вам статусом нет в этом интерфейсе, значит Яндекс.Маркет не отправлял запрос о смене статуса. Мы с таким сталкивались пару раз. Обратитесь в поддержку Маркета.
Внимание! В последнее время Я.Маркет не отправляет некоторые статусы заказов, например "Доставляется" или "Доставлен". Согласно ответу поддержки, это нормальная ситуация, и вы можете самостоятельно запрашивать актуальную информацию о заказах через соответствующий Cron (добавлено в версии 1.29.0).
Cron задача находится в разделе "Заказы" нужного вам профиля, пример:
Как добавить задачу в Cron подробно в этой статье.
Если ответ еще не найден, нужно исследовать логи нашего магазина на Shop-script. Включаете "Дебаг"-режим в общих настройках и проверяете, что записывается в логи. Также, стоит обратить внимание, не обновлятеся ли штатный лог error.log или db.log в момент получения запроса из Маркета. Поищите в этих файлах ошибки, в которых упомянут id плагина - pokupki.
Кратко: самая частая проблема - неверно выбрано сопоставление "Ваш SKU" (offerID), поэтому остатки отдаются неверно. Подробно про настройку здесь.
Подробный процесс диагностики:
Передача остатков в Яндекс.Маркет в данный момент осуществляется с помощью двух механизмов:
Допустим, вы обнаружили, что наличие остатков в Яндекс.Маркет не соответствует сайту. Как проверить, почему они не обновились:
1. Выберите один или несколько товаров в личном кабинете Яндекс.Маркет, запишите значения из поля "Ваш SKU":
В данном случае это fbs213, fbs212, fbs214
2. Далее в личном кабинете нужно перейти в лог запросов (В правом меню, в нижней части наведите на название магазина - Лог запросов),
Нас интересуют запросы /stocks На вкладке "Лог запросов к вашему серверу" - те запросы, что посылает сам Маркет, а на вкладке "К серверу Маркета" - те запросы, что ваш сайт посылал самостоятельно.
Обратите внимание, чтобы дата и время были выбраны правильно. Подробности запроса доступны по нажатию на строку.
Какие здесь могут быть ошибки:
1) Отсутствуют исходящие запросы /stocks от Маркета - неправильно выставлен временной интервал для просмотра запросов , либо не включено обновление остатков через API.
Если вы хотите, чтобы маркет отправлял на ваш сайт запросы о наличии, то в личном кабинете в разделе "Настройки API" переключите следующий чекбокс:
Однако, это делать не обязательно, вы можете самостоятельно отправлять информацию об остатках через запросы с сайта при помощи планировщика Cron.
Внимание! По последней информации эта настройка есть не у всех магазинов, постеменно Яндекс Маркет её убирает. Сейчас по-умолчанию принимают остатки обоими методами.
У маркета бывают переходные периоды, это значит, что что-то может быть в интерфейсе одного магазина, а у другого еще нет.
2) Запросы /stocks присутствуют, но указано, что есть какие-то ошибки:
3) Запросы /stocks присутствуют, ошибок нет, в теле пусто
Если в реальных запросах наличия ошибок нет, но в ответе "Тело отсутствует", то это нормально. Ответ поддержки Маркета:
Это вполне нормальная ситуация ,когда тело ответа скрывается, открыто оно только в тестовых запросах , сделано это для экономии вычислительных ресурсов, главное ,чтобы статус запроса был 200
Как же узнать, какая информация передаётся об остатках? Переходим в админку нашего сайта и включаем "Дебаг режим":
При этом режиме все запросы будут записываться в логи сайта. Перейдите в приложение "Логи".
В файле plugins/pokupki/apiRequest.debug.log можно увидеть, по каким товарам было запрошены остатки, пример:
Попробуйте найти те SKU, которые записали ранее, присутствуют ли они в запросе Маркета. Для удобства файл лога вы можете скачать и посмотреть в текстовом редакторе на вашем компьютере (рекомендуем Sublime Text).
Если SKU в запросе отсутствуют, значит Маркет не запрашивает по нему наличие. Это может происходить по различным, не зависящим от нас причинам - может быть товар в архиве?
Если SKU присутствует, нужно изучить другой файл - ответ сайта. Найдите файл /plugins/pokupki/api.Response.debug.log - в него записывается ответ нашего сайта, та информация, которая отправляется в Яндекс.Маркет.
Теперь попробуйте найти ранее записанные SKU в этом файле.
Если SKU присутствует, то проверьте, какое по нему отправляется наличие, и какое указано в самом товаре. В случае несовпадения проверьте:
Если SKU отсутствует, значит такой товар не найден на вашем сайте. Проверьте следующее:
Такое может происходить по следующим причинам:
В случае использования самостоятельной отправки остатков, вся информация будет записана в файл /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"}
значит варианта два:
В случае отсутствия такой записи в логах, нужно проверить, с каким 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 (в вашем случае путь может быть другой, уточните его у поддержки хостинга)
При проблемах с передачей цен включите "Дебаг режим" в общих настройках. После этого все отправляемые данные и ответ Яндекс.Макрета будут запиываться в логи.
Обратите внимание, особенно при выставлении "наценки", чтобы разница между ценой и зачеркнутой ценой была больше установленного порога. Обычно это не менее 5%.
Ошибка "Partner use only default price" означает, что вам нужно активировать галочку "Обновлять базовые цены"
Некоторые магазины не могут обновлять цены для отдельных магазинов, а только для всего кабинета сразу.
Страница падает из-за таймаута соединения. При обновлении большого кол-ва товаров, передача всех цен не гарантирована, используйте запуск по Cron.
Нужно проверить Cron задание. Какие могут быть здесь ошибки:
- Запуск не из под той версии PHP.
Пример, сайт работает на PHP 7.4 (видно в приложении "Настройки" или в приложении "Логи".
А в настройке CRON указали 8.2.:
Если вы не указываете версию (пишете в команде просто php), попробуйте указать. Например, для PHP 8.1 путь может быть таким: /opt/php81/bin/php
- Запуск не из под того пользователя.
Обратите внимание, чтобы команда в Cron была добавлена из под юзера, указаного в настройках плагина:
Встретился такой кейс: замечено в логах, что происходит отправка числа цены с очень большой дробной частью, хотя сама цена в товаре нормальная:
{"offerId":"8529","price":{"currencyId":"RUR","value":5997.6999999999998181010596454143524169921875,"discountBase":7197.239999999999781721271574497222900390625}}
Маркет на это отвечает ошибкой "В вашей цене слишком много цифр":
{"code":"BAD_REQUEST","message":"Offer at index 25 should not have price with too many digits"}
Проблема замечена на сайте с хостингом Beget. По какой-то причине дефолтное значение php директивы serialize_precision выставлено на 100, это приводит к некорректному округлению.
Нужно изменить эту диррективу на serialize_precision = -1
Проверьте, скачивается ли акт в личном кабинете Яндекс.Маркет.
Проверьте логи в Маркете, аналогично пункту 1 данной инструкции.
Если ошибка только при запросе order/status:
Ошибка 500 при запросе order/status
Если ошибка при любом запросе, но иногда:
Яндекс.Маркет может запрашивать актуальное наличие товаров через запрос /stocks хоть каждую минуту. Поэтому, если на сайте возникли какие-либо неполадки, в результате чего он стал временно недоступен, либо стал дольше отвечать на запросы, это может привести к ошибкам в ответе по API, т.к. Яндекс ждёт ответа всего-лишь несколько десятков секунд. Проблем в плагине в этом случае нет.
В любом случае, нужно смотреть описание конкретных ошибок в логах
Такое могло произойти, если в момент получения заказа в настройках модели был указан один номер кампании, а уже после, по какой-то причине, изменён на другой. Для последующих заказов всё будет нормально.
Вторая возможная причина: Id кампании вообще не заполнен в настройках этого профиля.
В диагностике вам может помочь:
Здесь вы сможете посмотреть, что отправляется из Маркета и какой он получает ответ.
В этом случае в приложении "Логи" будут записи о запросах и ответах, которые принимает или отправляет плагин.
С помощью него вы сможете отправить тестовый запрос на ваш сайт и посмотреть, какой он даёт ответ в том или ином случае.
В личном кабинете продавца "Яндекс.Маркет" зайдите в раздел левого меню Настройки - тестовые заказы
Здесь можно отправить тестовый заказ и проверить работу плагина.
Что за ошибка в логах -
{"errors":[{"code":"FORBIDDEN","message":"Access denied"}],"status":"ERROR"}
Это ошибка входящего токена, перепроверьте его.
Если у вас возникала какая-то другая проблема, не описанная на данной странице, нужно написать в поддержку по почте support@bodysite.ru , мы все проверим.