调用Shopify API创建Fulfillment返回422错误的技术咨询
Shopify Fulfillment API 返回422错误的修复方案
2022-04版本的Fulfillment接口对请求体结构校验严格,你当前代码存在2个明确的结构/类型错误,和ID取值无关,修正即可解决:
- 非法传
null给tracking_info字段:该字段仅支持两种传值方式,要么传入包含物流商、运单号、查询链接的合法跟踪信息对象,要么完全不传该字段。显式传null会被判定为参数类型不匹配,直接触发422。 - 字段类型传参错误:
notify_customer是布尔类型字段,仅接受true/false用于控制是否给客户发送发货通知;message是字符串类型字段,用于传递发货通知内的自定义备注。你当前将同一个变量同时赋值给两个字段,若该变量是布尔值,会导致message字段类型不合法,触发校验失败。
修正后的参考代码
// 按字段类型定义传值 const fulfillmentNotifyCustomer = true; // 布尔值,控制是否发送发货通知 const fulfillmentMessage = "您的订单已发出,预计3-5天送达"; // 字符串,自定义通知备注,不需要可直接删除该字段传参 let response = await axios.get(`${shopify_url}/admin/api/2022-04/orders/${order_id}/fulfillment_orders.json`, shopify_config) let fulfillment = { fulfillment: { // 无自定义备注可删除下一行 message: fulfillmentMessage, notify_customer: fulfillmentNotifyCustomer, // 无物流跟踪信息直接删除tracking_info字段,禁止传null // tracking_info: { // company: "顺丰速运", // number: "SF1234567890", // url: "物流查询链接" // }, line_items_by_fulfillment_order: [{ fulfillment_order_id: response.data.fulfillment_orders[0].id, fulfillment_order_line_items: [{ id: line_item_id, quantity: line_item_qty }] }] } }; response = await axios.post(`${shopify_url}/admin/api/2022-04/fulfillments.json`, fulfillment, shopify_config);
额外排查项:如果修正上述问题后仍返回422,检查请求配置
shopify_config的headers中是否配置了正确的Content-Type: application/json,Axios默认会为POST请求添加该头,若自定义headers时覆盖了默认配置,缺失该头也会导致请求被接口拒绝。该问题和你使用Promise链式调用还是async/await语法无关,不需要调整异步写法。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

