2013-08-28 108 views
2

我在这里做错了什么?通过webservice api更新Prestashop中的订单状态

首先,我提出请求来获取现有订单,并更改检索到的xml中current_status字段的值。然后,我就与修改后的XML作为参数PUT请求,但我得到这样的回应:

<?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> 

当我调试我的代码有一个在ececution之前PUT请求XML参数没有问题。 Whay然后'原始XML'显示XML像这样?我必须设置某种编码吗?我的代码是用C#编写的。

回答

0

看来xml参数必须是RequestBody类型。如果未指定,则会自动设置为键入GetOrPost,从而导致“字符串无法解析为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

您还可以使用由C#编写的.Net包装器,而不是发送和检索XML请求。它还允许您上传和更改使用普通XML和http请求有点棘手的图像。它被称为PrestaSharp

相关问题