2013-08-28 2 views
2

Что я здесь делаю неправильно?Обновление статуса заказа в Prestashop через webservice api

Сначала я делаю запрос на получение существующего заказа, и я изменяю значение поля current_status в извлеченном xml. Тогда я сделать запрос PUT с измененным XML в качестве параметра, но я получаю что-то вроде этого в ответ:

<?xml version="1.0" encoding="UTF-8"?> 
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> 
<errors> 
<error> 
<code><![CDATA[127]]></code> 
<message><![CDATA[XML error : String could not be parsed as XML 
XML length : 2864 
Original XML : xml=%3C%3Fxml+version%3D%221%2E0%22+encoding...%3C%2Fprestashop%3E%0A]]></message> 
</error> 
</errors> 
</prestashop> 

Когда я отлаживать код не существует никаких проблем с параметром XML в запросе PUT перед ececution. Что делает, тогда «Оригинальный XML» показывает xml, закодированный так? Должен ли я устанавливать какую-то кодировку? Мой код находится на C#.

ответ

0

Похоже, что параметр xml должен быть типа RequestBody. Если не указано, автоматически устанавливается тип GetOrPost, который вызывает ошибку «String не может быть проанализирован как XML». Я не уверен, как все работает, но кажется, что это решение проблемы.

RestRequest request; 
request = new RestRequest("api/orders/" + orderID, Method.GET); 
IRestResponse response = client.Execute(request); 

XElement orderXML = XElement.Parse(response.Content); 
XElement orderEl = orderXML.Descendants().FirstOrDefault(); 
orderEl.Element("current_state").Value = "10";  

request = new RestRequest("api/orders", Method.PUT); 
request.AddParameter("xml", orderXML.ToString(), ParameterType.RequestBody); 
IRestResponse response2 = client.Execute(request); 
0

Вы также можете использовать .Net-оболочку, написанную C#, вместо отправки и получения XML-запросов. Это также позволяет загружать и изменять изображения, которые немного сложны, используя простые XML и HTTP-запросы. Он называется PrestaSharp.

Смежные вопросы