You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用shopify-api-node创建/更新履约单报400错误如何解决

400报错核心原因

Shopify 2022-01及之后的API版本已经废弃了直接传订单ID创建履约的旧逻辑,你的代码存在四个必触发校验失败的问题:

  • 入参关联ID错误:直接传入orderId调用创建接口,新版API要求必须绑定对应订单下状态为open的履约订单(Fulfillment Order)ID,订单ID本身不能作为创建履约的关联主键。
  • 必填参数缺失:没有传发货地点location_id,也没有指定要履约的订单行项目,参数校验直接不通过。
  • 格式错误:tracking_url没有带https://协议头,且tracking相关字段没有按新版要求嵌套在tracking_info结构下,旧版SDK也要求履约相关字段必须嵌套在fulfillment根对象下。
  • SDK调用方式错误:新版Node SDK的fulfillment.create方法只接收一个配置对象作为入参,不支持(orderId, data)这种两参数的旧写法。
可直接运行的调整方案
  1. 先查询目标订单对应的可履约Fulfillment Order,拿到必填的关联ID
// 查询订单关联的所有履约单
const { fulfillment_orders } = await shopify.fulfillmentOrder.list({
  order_id: orderId
});
// 筛选出待履约的有效履约单,拆单场景会返回多个open状态的履约单
const validFulfillmentOrder = fulfillment_orders.find(item => item.status === 'open');
const fulfillmentOrderId = validFulfillmentOrder.id;
// 直接从履约单里取绑定的发货地点ID,不需要单独查店铺地点列表
const locationId = validFulfillmentOrder.assigned_location.id;
  1. 构造符合API校验规则的请求参数
const createPayload = {
  fulfillment: {
    // 绑定履约单,整单履约不需要单独传行项目,拆单场景在数组内补充行项ID和发货数量即可
    line_items_by_fulfillment_order: [
      {
        fulfillment_order_id: fulfillmentOrderId
      }
    ],
    // 物流信息按要求嵌套,url必须带http/https协议头
    tracking_info: {
      company: "DHL",
      number: "123123",
      url: "https://trackingdhl.com/tracking/123123"
    },
    location_id: locationId,
    notify_customer: true // 可选配置,是否给客户发发货通知
  }
};
  1. 调用正确的SDK方法创建履约
const fulfill = await shopify.fulfillment.create(createPayload);
console.log('fulfill ======>', fulfill);
补充说明

如果是更新已创建履约单的物流信息,直接调用shopify.fulfillment.update方法,传入履约单ID和要更新的tracking字段即可,不需要重复传行项目和地点信息。不建议继续使用2022-01之前的旧版API,旧版本接口已经逐步停止支持。

内容的提问来源于stack exchange,提问作者Eddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:39:27