PrestaShop 1.7.8.7 REST API更新订单资源报错:修改资源需提供Id
解决PrestaShop 1.7.8.7 WebService更新订单shipping_number失败的问题
问题定位
你遇到的Undefined offset: 1和code 90: id is required when modifying a resource错误,核心原因是XML结构不符合PrestaShop WebService要求,同时可能遗漏了权限配置。
正确操作步骤
1. 确认WebService权限
先在PrestaShop后台的WebService配置中,找到orders资源,确保勾选PUT权限——没有这个权限所有更新请求都会被拦截。
2. 生成合规的请求XML
从GET请求/api/orders/1?display=full获取完整XML后,仅修改<shipping_number>的值,必须保留<id>字段,且XML结构必须遵循以下格式:
<?xml version="1.0" encoding="UTF-8"?> <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> <order> <id><![CDATA[1]]></id> <!-- 必须保留,值需与URL中的订单ID一致 --> <!-- 保留其他原始字段,仅修改目标字段 --> <shipping_number><![CDATA[你的新运单号]]></shipping_number> <!-- 其他订单字段... --> </order> </prestashop>
注意:不能用<orders>包裹<order>,也不能直接将<order>作为根节点,必须保留<prestashop>根节点。
3. Postman请求配置
- 请求方法:PUT
- 请求URL:
/api/orders/1(必须明确指定订单ID) - 请求头:设置
Content-Type: application/xml - 请求体:粘贴上述修改后的完整XML
常见误区避坑
- 不要用POST/PATCH更新资源,PrestaShop WebService规定更新单个资源必须用PUT
- 不能仅提交部分字段,必须包含
<id>及其他必填字段(直接复用GET返回的XML、只修改目标字段是最稳妥的方式) - 不要修改
<id>的值,该字段用于识别待更新订单,必须与URL中的ID完全一致
内容的提问来源于stack exchange,提问作者Tomuke
相关产品推荐
相关产品推荐

