通过webservice api更新Prestashop中的订单状态

本文关键字:单状态 状态 api webservice 更新 Prestashop 通过 | 更新日期: 2023-09-27 18:29:15

我做错了什么?

首先,我请求获取现有订单,并更改检索到的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>

当我调试代码时,在接收之前PUT请求中的xml参数没有问题。那么"原始XML"如何显示这样的XML ecoded?我必须设置某种编码吗?我的代码是C#。

通过webservice api更新Prestashop中的订单状态

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);

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