API Amazon MWS: некоторые заказы отсутствуют при загрузке заказов

Я реализовал систему для загрузки заказов продавца Amazon. Система работает так:

  • мы начинаем загружать заказы с 12:00 до 14:00, поэтому я говорю Amazon (через их Java-клиент): «Дайте мне все заказы с 12:02 до 14:00 (две минуты разницы во времени для размещения ожидающих заказы, как описано Amazon в их API).
  • Мы полностью загружаем эти заказы: если их больше сотни, мы используем следующий токен, и когда они у нас есть, мы используем операцию listOrderItems для каждого заказа, чтобы получить позиции.

Некоторые из этих заказов ожидают обработки, и если это так, мы сохраняем их в нашей базе данных и проверяем в следующий раз, готовы ли они к загрузке. Наше следующее задание будет выполняться в течение следующих двух часов, запрашивая все заказы с 2:00 до 3:58.

Эта операция работала нормально, но наши клиенты начали сообщать о пропущенных заказах со своей стороны. По-видимому, время от времени заказ проскальзывает сквозь пресловутые щели, и мы не знаем, почему. Чтобы исправить это, мы установили 30-минутное перекрытие, чтобы каждый раз, когда мы загружали заказы, мы смотрели на 30 минут назад. В дополнение к штрафу за загрузку избыточных заказов мы должны проверить базу данных, чтобы увидеть, был ли заказ уже обработан, поэтому это немного замедляет работу.

И сыпать соль на рану, это до сих пор не решило проблему! Это случается не так часто, но в среднем в день пропадает от 0 до 4 заказов.


person IcedDante    schedule 06.04.2015    source источник
comment
Ваше приложение вызывает MWS ListOrders, используя какие именно параметры? У вас есть выбор LastUpdatedAfter/Before и CreatedAfter/Before. Кстати, я не понимаю, как для отложенных ордеров требуется двухминутная разница во времени, поскольку они могут оставаться в состоянии ожидания в течение нескольких дней?   -  person Hazzit    schedule 07.04.2015
comment
Мы используем Создано до/после   -  person IcedDante    schedule 07.04.2015


Ответы (1)


Получение заказов через ListOrders имеет ряд подводных камней.

Ниже приведен ответ службы поддержки MWS,

Обратите внимание, что заказ заполняется в данных ListOrders только после того, как он прошел некоторые внутренние проверки (в основном для мошеннических заказов). Это означает, что будет задержка между созданием заказа и его отображением в запросах API (или в SellerCentral, если на то пошло). Эта задержка обычно составляет несколько минут, иногда полчаса и очень редко несколько часов.

И некоторые заказы могут очень скоро перейти из статуса ожидания в статус неотгруженного. Идентификатор заказа --- находится в состоянии ожидания только в течение 7 секунд, и все сделанные вами запросы относятся к моменту, когда этот заказ фактически доступен для API для заполнения в ListOrders. И даже заказ --- находится в состоянии ожидания 17 секунд, а вы делали запросы до этого. Как только вы получите уведомление по электронной почте, они больше не находятся в состоянии ожидания.

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

По моему опыту, надежный способ получить все заказы — позвонить GetReportList и запросить все _GET_ORDERS_DATA_ отчеты, которые еще не были подтверждены, а затем подтвердить те, которые вы сохранили в своей системе. Флаг «Подтверждено» в системе Amazon обеспечивает синхронизацию двух систем. Прелесть этого решения в том, что вам не нужно беспокоиться о метках времени.

person Hazzit    schedule 08.04.2015
comment
Единственным недостатком решения является то, что заказы не доступны по запросу. Я думаю, что гибрид двух вызовов API — лучший подход. Спасибо за отличную информацию - person IcedDante; 14.04.2015
comment
@IcedDante может быть, я немного опоздал с просьбой к вам, но, похоже, я попал в ту же ситуацию, что и вы ... не могли бы вы подсказать мне ваше решение? - person Zaffar Saffee; 18.03.2016