Shopify自定义应用Admin REST API操作报400错误求助
Shopify Admin REST API 400 Bad Request 排查与解决(库存设置/订单标签更新)
核心问题定位
你遇到的POST设置库存、PUT更新订单标签均返回400的问题,大概率是请求格式不符合Shopify REST API的要求,以下是具体的修正方案和排查步骤:
一、正确的请求示例
Shopify Admin REST API要求所有修改类请求的参数必须包裹在对应资源的根节点下,这是最容易忽略的点:
1. 设置库存级别(POST /inventory_levels/set.json)
curl -X POST "https://你的店铺域名.myshopify.com/admin/api/2023-04/inventory_levels/set.json" \ -H "X-Shopify-Access-Token: 你的应用访问令牌" \ -H "Content-Type: application/json" \ -d '{ "inventory_level": { "location_id": 你的仓库ID, "inventory_item_id": 你的库存商品ID, "available": 目标库存数量 } }'
2. 更新订单标签(PUT /orders/{order_id}.json)
curl -X PUT "https://你的店铺域名.myshopify.com/admin/api/2023-04/orders/你的订单ID.json" \ -H "X-Shopify-Access-Token: 你的应用访问令牌" \ -H "Content-Type: application/json" \ -d '{ "order": { "tags": "标签1,标签2" } }'
二、关键错误点修正
Content-Type 必须为 application/json
你尝试的application/x-ndjson是Shopify GraphQL批量操作的格式,不适用于REST API,会直接导致参数识别失败。参数必须包裹在资源根节点内
不能直接传递{"inventory_item_id": ...},必须嵌套在inventory_level对象中;订单标签同理,要放在order对象内。JSON格式合法性
检查payload是否有语法错误(比如逗号遗漏、引号不匹配),可以用在线JSON校验工具确认格式正确。
三、进一步排查步骤
- 查看响应体的详细错误信息:400错误通常会返回具体的参数错误提示,比如
{"errors": {"inventory_level": {"available": "must be an integer"}}},这能快速定位问题。 - 确认API版本一致性:确保请求URL中的API版本(2023-04)和你参考的文档版本完全一致。
- 验证访问令牌权限:在Shopify后台进入你的自定义应用页面,确认
write_inventory、write_orders权限已被授予且生效,同时检查令牌是否过期。 - 启用API日志:在Shopify后台的「应用和销售渠道」→「开发应用」→「你的应用」→「API凭证」中开启API日志,查看请求的详细交互记录,排查是否有请求头或参数被意外篡改。
内容的提问来源于stack exchange,提问作者pulse6099
相关产品推荐
相关产品推荐

