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

php-fedex-api-wrapper中如何设置SignatureOption为DIRECT

解决Fedex ShipService签名选项始终返回SERVICE_DEFAULT的问题

我在调用Fedex ShipService创建运单时,无论传入什么参数,返回的SignatureOption始终是SERVICE_DEFAULT,但实际需要设置为DIRECT。联系Fedex支持后得知,签名选项需要通过SpecialServiceTypes来配置,我尝试了两段代码但都没解决问题:

第一段代码:

$packageLineItem1->setSequenceNumber( 1 )
        ->setItemDescription( 'Product TEST' )
        ->setSpecialServicesRequested( new ComplexType\PackageSpecialServicesRequested( [
        'SpecialServiceTypes'   => SimpleType\PackageSpecialServiceType::_SIGNATURE_OPTION,
        'SignatureOptionDetail' => new ComplexType\SignatureOptionDetail( [
        'OptionType' => SimpleType\SignatureOptionType::_DIRECT] 
                ),] ) )

第二段代码:

$specialServiceRequested = new ComplexType\PackageSpecialServicesRequested();
$specialServiceRequested->setSpecialServiceTypes(SimpleType\PackageSpecialServiceType::_SIGNATURE_OPTION);
$specialServiceRequested->setSignatureOptionDetail( new ComplexType\SignatureOptionDetail( [
    'OptionType' => SimpleType\SignatureOptionType::_DIRECT,
] ));
$packageLineItem1->setSequenceNumber( 1 )
         ->setItemDescription( 'Product TEST' )
         ->setSpecialServicesRequested( $specialServiceRequested )

问题原因及解决方案

大部分Fedex PHP SDK要求SpecialServiceTypes参数传入数组格式(即使只需要指定一种服务类型)。如果传入单个字符串常量,SDK可能无法正确序列化该字段,导致Fedex服务器无法识别签名选项配置,最终返回默认值。

调整后的代码如下:

方案一:数组形式初始化

$packageLineItem1->setSequenceNumber( 1 )
        ->setItemDescription( 'Product TEST' )
        ->setSpecialServicesRequested( new ComplexType\PackageSpecialServicesRequested( [
        'SpecialServiceTypes'   => [SimpleType\PackageSpecialServiceType::_SIGNATURE_OPTION], // 改为数组格式
        'SignatureOptionDetail' => new ComplexType\SignatureOptionDetail( [
        'OptionType' => SimpleType\SignatureOptionType::_DIRECT] 
                ),] ) )

方案二:通过setter传入数组

$specialServiceRequested = new ComplexType\PackageSpecialServicesRequested();
// 传入数组而非单个值
$specialServiceRequested->setSpecialServiceTypes([SimpleType\PackageSpecialServiceType::_SIGNATURE_OPTION]);
$specialServiceRequested->setSignatureOptionDetail( new ComplexType\SignatureOptionDetail( [
    'OptionType' => SimpleType\SignatureOptionType::_DIRECT,
] ));
$packageLineItem1->setSequenceNumber( 1 )
         ->setItemDescription( 'Product TEST' )
         ->setSpecialServicesRequested( $specialServiceRequested )

额外排查点

  • 验证常量正确性:确认SimpleType\PackageSpecialServiceType::_SIGNATURE_OPTION和SimpleType\SignatureOptionType::_DIRECT的常量值是否与Fedex API文档一致,避免拼写或定义错误。
  • 检查请求Payload:开启SDK的日志功能,查看实际发送给Fedex的请求内容(XML/JSON),确认SignatureOptionDetail和SpecialServiceTypes是否被正确序列化并包含在请求中。
  • SDK版本兼容性:如果使用的是第三方Fedex SDK,检查是否有版本更新,部分旧版本可能存在字段序列化的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:21:04