Обновление выполнения Shopify API завершается с ошибкой необработанного объекта

Некоторое время назад я разработал веб-приложение, использующее Shopify API, оно работало без проблем около 2 месяцев, пока на этой неделе не начала возникать ошибка.

Мы пытаемся обновить выполнение заказов с помощью вызова API в PHP.

В PHP мы отправляем POST на следующее: http://www.the-web-shop-like-this.com/admin/orders/0123456789/fulfillments.json

Мы отправляем следующую переменную: $ fillment_update.

Переменная устанавливается так:

$fulfillment_update = "
     'fulfillment': { 
        'tracking_number': '',
        'notify_customer': true
            }";

POST'ing пустого track_number должен был заставить систему shopify генерировать электронное письмо о выполнении и отмечать этот заказ как выполненный - номер отслеживания никогда не добавляется, а notify_customer всегда имеет значение true.

Shopify API возвращается (с выходных) со словами: «Необработанная сущность».

Есть идеи, дамы и господа?

Заранее спасибо!


person Paul    schedule 14.11.2012    source источник
comment
Задокументировано ли поведение с пустым «track_number» для вызова определенного поведения или это ваш собственный взлом? Может, они просто исправили ошибку, на которую вы полагались…   -  person feeela    schedule 14.11.2012
comment
Я имитировал способ использования внутренней административной панели, встроенной в Shopify: вы могли просто нажать «обновить информацию о выполнении» и оставить номер отслеживания пустым. Вы можете быть правы, говоря, что они исправили ошибку - единственная проблема - для людей, которые не хотят отправлять информацию для отслеживания - я связался с Shopify, но обычно им требуется много дней, чтобы ответить. Скрестив пальцы, есть способ обойти это!   -  person Paul    schedule 14.11.2012
comment
вместо того, чтобы что-то имитировать, вам следует прочитать документацию по API…   -  person feeela    schedule 14.11.2012
comment
Если это помогает: api.shopify.com/fulfillment.html - изменить существующее исполнение - › Нет никакого упоминания о том, требуется ли какая-либо из переменных или должна ли быть опубликована / размещена для выполнения работы? Означает ли это отсутствие надлежащей документации?   -  person Paul    schedule 14.11.2012
comment
Что ж, в их примере они устанавливают tracking_number на NULL, а не на пустую строку, как вы это сделали. Вы пробовали это?   -  person feeela    schedule 14.11.2012
comment
Также пробовали NULL, null, 'null', 'NULL'. Не могу найти подробное описание того, почему будет возвращено 'Unprocessable Entity' .. в документации немного не хватает imo   -  person Paul    schedule 15.11.2012
comment
В указанном вами URL-адресе отсутствует идентификатор выполнения, который требуется, если вы пытаетесь обновить конкретное выполнение. Это все, что я могу вам сказать без фактического названия магазина и ключа API, который вы используете.   -  person David Underwood    schedule 16.11.2012
comment
@DavidUnderwood - Магазин: iphone-surgery.myshopify.com КЛЮЧ API: 8bef90e666ae1ce23f0163834b1b3c47 В вашей документации указано, что я могу выполнить все строки заказа, используя указанный выше код - спасибо за обращение   -  person Paul    schedule 16.11.2012


Ответы (1)


Я вижу странную кодировку параметров в параметрах вашего запроса. Вот что получает Rails:

{"_json"=>"'fulfillment': { 'tracking_number': '', 'notify_customer': true}", "order_id"=>"147265452"}

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

P.S .: Известно ли вам о существующих клиентских библиотеках для PHP? Вот список, я настоятельно рекомендую использовать один из них, если у вас нет конкретной причины: http://wiki.shopify.com/Shopify_App_Development#.E2.80.9CI.E2.80.99m_a_PHP_developer.E2.80.9D

person David Underwood    schedule 19.11.2012
comment
Просто для пояснения: у меня создалось впечатление, что the-web-shop-like-this.com/admin/orders/0123456789/fulfillments/ должен был использоваться только для обновления существующего исполнения? Возможно, попутно я запутал вас - мы просто хотим, чтобы заказ был выполнен, независимо от того, какие строки в нем есть - вы говорите, что мы больше не можем установить весь заказ как «выполнено»? - person Paul; 19.11.2012
comment
Ах я вижу. Ваша формулировка вопроса (Мы пытаемся обновить выполнение заказов) смутила меня. Я отредактирую свой ответ, чтобы он соответствовал вашей реальной проблеме :) - person David Underwood; 19.11.2012
comment
Вместо того, чтобы тратить слишком много времени, я теперь подозреваю, что в моем коде могут быть символы, отличные от UTF8 (не знаю, откуда они взялись), и дам вам знать, как только я продолжу это расследование! - person Paul; 19.11.2012
comment
Неважно, что я делаю, Shopify просто возвращает Not Found при использовании PUT, если я использую POST, я получаю ошибку необработанного объекта. - person Paul; 19.11.2012
comment
Спасибо за вашу помощь, Дэвид - ваш ответ указал мне в правильном направлении - я думаю, что было две проблемы: 1) Я не отправлял свои параметры через функцию PHP call как массив должным образом - поэтому он отправлял их через на Shopify неправильно. 2) В файле были (я считаю) какие-то странные символы ANSI - я перекодировал файлы в UTF8 - person Paul; 19.11.2012