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

使用jlevers/selling-partner-api的confirmShipment()时出现ObjectSerializer.php错误

问题

使用jlevers/selling-partner-api中的confirmShipment()确认亚马逊订单时触发致命错误:Uncaught Error: Class 'null' not found,报错位置在/vendor/jlevers/selling-partner-api/lib/ObjectSerializer.php第366行。已成功创建$apiInstance和$payload,但执行时仍报错。尝试过省略order_items或改为嵌套数组,问题依旧,怀疑是payload参数传递有误。

错误堆栈信息

Fatal error: Uncaught Error: Class 'null' not found in /vendor/jlevers/selling-partner-api/lib/ObjectSerializer.php:366 Stack trace: #0 /vendor/jlevers/selling-partner-api/lib/Api/OrdersV0Api.php(92):
 SellingPartnerApi\ObjectSerializer::deserialize(Object(stdClass), 'null', Array) #1 /vendor/jlevers/selling-partner-api/lib/Api/OrdersV0Api.php(55):
 SellingPartnerApi\Api\OrdersV0Api->confirmShipmentWithHttpInfo('114-0297756-279...', Object(SellingPartnerApi\Model\OrdersV0\ConfirmShipmentRequest)) #2 /amazon_settings.php(457):
 SellingPartnerApi\Api\OrdersV0Api->confirmShipment('114-0297756-279...', Object(SellingPartnerApi\Model\OrdersV0\ConfirmShipmentRequest)) #3 /scripts/test.php(65):
 Amazon->fn_confirmShipment('/home/scripts...') #4 {main} thrown in /vendor/jlevers/selling-partner-api/lib/ObjectSerializer.php on line 366

调用代码

$apiInstance = new SellingPartnerApi\Api\OrdersV0Api($config);
$order_id = 'order_id_example'; // 亚马逊定义的订单ID,格式为3-7-7(实际传入的是正确订单号)
$payload = new \SellingPartnerApi\Model\OrdersV0\ConfirmShipmentRequest(); // confirmShipment的请求体

try {
    $apiInstance->confirmShipment($order_id, $payload);
} catch (Exception $e) {
    echo '调用OrdersV0Api->confirmShipment时异常: ', $e->getMessage(), PHP_EOL;
}

当前$payload结构

SellingPartnerApi\Model\OrdersV0\ConfirmShipmentRequest Object
(
    [container:protected] => Array
        (
            [package_detail] => Array
                (
                    [package_reference_id] => 2790602
                    [carrier_code] => FedEx
                    [shipping_method] => Ground
                    [tracking_number] => 63828440XXX
                    [ship_date] => 2023-11-07T07:17:07-00:00
                    [order_items] => Array
                        (
                            [order_item_id] => 87699213804801
                            [quantity] => 4
                        )

                )

            [cod_collection_method] => 
            [marketplace_id] => ATVPDKIKX0DER
        )

)
解决方案
  1. 修正order_items结构
    package_detail中的order_items要求是对象数组,而非单个键值对数组。你当前的order_items是单个条目,需要用数组包裹,且建议使用SDK提供的模型类构建,确保类型匹配。

  2. 使用SDK模型类规范构建payload
    不要直接给ConfirmShipmentRequest的容器赋值,改用模型类的setter方法或构造函数构建,避免类型不兼容问题。

修正后的代码示例:

// 构建单个订单项
$orderItem = new \SellingPartnerApi\Model\OrdersV0\OrderItem();
$orderItem->setOrderItemId('87699213804801');
$orderItem->setQuantity(4);

// 构建包裹详情
$packageDetail = new \SellingPartnerApi\Model\OrdersV0\PackageDetail();
$packageDetail->setPackageReferenceId('2790602');
$packageDetail->setCarrierCode('FedEx');
$packageDetail->setShippingMethod('Ground');
$packageDetail->setTrackingNumber('63828440XXX');
$packageDetail->setShipDate('2023-11-07T07:17:07-00:00');
$packageDetail->setOrderItems([$orderItem]); // 用数组包裹订单项

// 构建完整请求体
$payload = new \SellingPartnerApi\Model\OrdersV0\ConfirmShipmentRequest();
$payload->setPackageDetail($packageDetail);
$payload->setMarketplaceId('ATVPDKIKX0DER');
// 无需设置的字段(如cod_collection_method)可直接省略

// 调用API
try {
    $apiInstance->confirmShipment($order_id, $payload);
} catch (Exception $e) {
    echo '调用OrdersV0Api->confirmShipment时异常: ', $e->getMessage(), PHP_EOL;
}
  1. 排查SDK版本
    若上述修正后仍报错,尝试将jlevers/selling-partner-api升级到最新版本,可能是SDK内部类型定义bug导致的反序列化错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:47:25