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

Magento 2.2.2 REST API运单跟踪信息未更新问题求助

解决Magento 2.2.2 REST API创建运单时跟踪信息未保存及重复调用报错的问题

让我们一步步拆解你的问题:

首先,重复调用报错是正常系统行为

你第二次调用时收到的错误提示The order does not allow a shipment to be created. You can't create a shipment without products.是完全合理的——因为首次调用已经成功创建了运单,并且订单状态变为complete,说明该订单下的所有商品已经完成发货流程,Magento不允许为同一个订单创建多个运单(除非订单存在部分发货的场景,但你的订单已标记为complete,意味着全部发货完成)。这个报错不是bug,是系统的正常校验逻辑。

核心问题:首次创建运单时跟踪信息未保存

接下来重点分析为什么首次调用返回了运单ID,但跟踪号、承运商信息没更新。结合你提供的请求体和Magento 2.2.2的API特性,可能的原因及解决方案如下:

1. 请求体中数据类型错误(最可能的原因)

你在order_item_id和qty字段上添加了引号,把它们转成了字符串类型,但Magento的REST API期望这两个字段是整数类型。虽然系统可能容忍字符串类型创建运单,但会导致后续关联跟踪信息的逻辑出现异常。

修正后的请求体应该去掉这两个字段的引号:

$tracking_str = '{ 
    "items": [ 
        { 
            "extension_attributes": {}, 
            "order_item_id": '.$orderItemId.', 
            "qty": '.$qty_invoiced.' 
        } 
    ], 
    "notify": false, 
    "appendComment": true, 
    "comment": { 
        "extension_attributes": {}, 
        "comment": "Item(s) has been shipped", 
        "is_visible_on_front": 0 
    }, 
    "tracks": [ 
        { 
            "extension_attributes": {}, 
            "track_number": "'.$TrackingNumber.'", 
            "title": "'.$ShipTitle.'", 
            "carrier_code": "'.$carrierCode.'" 
        } 
    ], 
    "packages": [ 
        { 
            "extension_attributes": {} 
        } 
    ], 
    "arguments": { 
        "extension_attributes": {} 
    } 
}';

2. 承运商代码(carrier_code)无效

Magento要求carrier_code必须是系统中已启用的承运商代码,比如内置的ups、fedex、dhl,或者你自定义的承运商代码。如果传入的carrier_code不存在,系统会忽略跟踪信息的保存。

你可以通过以下方式验证:

  • 登录Magento后台,进入Stores > Settings > Configuration > Sales > Shipping Methods,查看已启用的承运商对应的代码;
  • 调用REST API GET /V1/carrier/list获取系统可用的承运商列表,确认你传入的carrier_code在返回结果中。

3. 检查Magento日志排查异常

如果以上两点都没问题,建议查看Magento的日志文件:

  • var/log/exception.log:查看是否有跟踪信息保存时抛出的异常;
  • var/log/system.log:查看API请求处理过程中的警告或错误信息。

这些日志会帮你定位到具体的失败原因,比如数据库写入错误、权限问题等。

4. Magento 2.2.2版本的已知bug

Magento 2.2.2是比较老旧的版本,可能存在一些已知的API bug,比如创建运单时无法正确关联跟踪信息。你可以尝试升级到该分支的最新补丁版本(比如2.2.10),或者查看Magento官方的issue库,确认是否有对应的修复补丁。

验证解决方案的步骤

  1. 用修正后的请求体重新测试首次创建运单的接口;
  2. 调用GET /V1/shipment/{shipmentId}/tracks接口,查看返回的跟踪信息是否存在;
  3. 检查订单详情页的运单跟踪信息是否正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:56:53