Php 使用Fedex API RateService指定Fedex One费率的数组结构

Php 使用Fedex API RateService指定Fedex One费率的数组结构,php,wsdl,fedex,Php,Wsdl,Fedex,我有一个工作请求,要求使用标准联邦快递费率获取我的货物的费率,但我想使用特殊的联邦快递单费率选项,这样我就可以获得他们的统一费率报价 不幸的是,他们的代码示例没有显示如何指定费率请求应该使用Fedex One Rate,而我完全无法通过xml解析WSDL。我尝试了几种不同的数组结构来传递(我假设)正确的变量,但没有任何效果 我使用第三方生成器生成了两个html版本的WSDL(这两个版本都没有太大帮助,但您可能比我读得更好) 第一个包含直接链接到其定义的数据类型的wsdl: 第二个更基本,它只是以

我有一个工作请求,要求使用标准联邦快递费率获取我的货物的费率,但我想使用特殊的联邦快递单费率选项,这样我就可以获得他们的统一费率报价

不幸的是,他们的代码示例没有显示如何指定费率请求应该使用Fedex One Rate,而我完全无法通过xml解析WSDL。我尝试了几种不同的数组结构来传递(我假设)正确的变量,但没有任何效果

我使用第三方生成器生成了两个html版本的WSDL(这两个版本都没有太大帮助,但您可能比我读得更好)

第一个包含直接链接到其定义的数据类型的wsdl:

第二个更基本,它只是以更线性的方式提供层次结构,在每个级别上都有有效的值:

据我所知,我可以通过两种方式/地点声明我希望我的费率报价使用一种费率:

1) $request['VariableOptions'] = 'FEDEX_ONE_RATE';

当我使用(1)时,我会得到一个成功的响应,其中包括一个价格列表,但它们不是一级价格。这是标准价格

当我使用(2)时,我得到一个失败响应:

stdClass Object
(
    [HighestSeverity] => WARNING
    [Notifications] => stdClass Object
        (
            [Severity] => WARNING
            [Source] => crs
            [Code] => 556
            [Message] => There are no valid services available. 
            [LocalizedMessage] => There are no valid services available. 
        )

    [TransactionDetail] => stdClass Object
        (
            [CustomerTransactionId] =>  *** Service Availability Request v5.1 using PHP ***
        )

    [Version] => stdClass Object
        (
            [ServiceId] => crs
            [Major] => 16
            [Intermediate] => 0
            [Minor] => 0
        )

)
如果我同时使用(1)和(2),那么我会得到(2)条错误消息以及一条额外的警告,指出我用两种不同的方式指定了一个速率,(2)将覆盖(1)

这是我的完整请求数组:

array (
  'WebAuthenticationDetail' => 
  array (
    'UserCredential' => 
    array (
      'Key' => 'xxx',
      'Password' => 'xxx',
    ),
  ),
  'ClientDetail' => 
  array (
    'AccountNumber' => 'xxx',
    'MeterNumber' => 'xxx',
  ),
  'TransactionDetail' => 
  array (
    'CustomerTransactionId' => ' *** Service Availability Request v5.1 using PHP ***',
  ),
  'Version' => 
  array (
    'ServiceId' => 'crs',
    'Major' => '16',
    'Intermediate' => '0',
    'Minor' => '0',
  ),
  'ReturnTransitAndCommit' => true,
  'RequestedShipment' => 
  array (
    'DropoffType' => 'STATION',
    'ShipTimestamp' => '2015-06-14T14:13:46-07:00',
    'Shipper' => 
    array (
      'Contact' => 
      array (
        'PersonName' => 'Kenny Wyland',
        'CompanyName' => 'K2 Cashflow',
        'PhoneNumber' => 'xxxxxxxxxx',
      ),
      'Address' => 
      array (
        'StreetLines' => 
        array (
          0 => 'xxxx E xxxxx St',
        ),
        'City' => 'Long Beach',
        'StateOrProvinceCode' => 'CA',
        'PostalCode' => '90805',
        'CountryCode' => 'US',
      ),
    ),
    'Recipient' => 
    array (
      'Contact' => 
      array (
        'PersonName' => 'Bob Smith',
        'PhoneNumber' => 'xxx-xxx-xxxx',
      ),
      'Address' => 
      array (
        'StreetLines' => 
        array (
          0 => 'xxxxx xxxxxxx Rd',
        ),
        'City' => 'Corona',
        'StateOrProvinceCode' => 'CA',
        'PostalCode' => '92883',
        'CountryCode' => 'US',
        'Residential' => true,
      ),
    ),
    'ShippingChargesPayment' => 
    array (
      'PaymentType' => 'SENDER',
      'Payor' => 
      array (
        'ResponsibleParty' => 
        array (
          'AccountNumber' => 'xxxx',
          'Contact' => NULL,
          'Address' => 
          array (
            'CountryCode' => 'US',
          ),
        ),
      ),
    ),
    'PackageCount' => '1',
    'RequestedPackageLineItems' => 
    array (
      0 => 
      array (
        'SequenceNumber' => 1,
        'GroupPackageCount' => 1,
        'Weight' => 
        array (
          'Value' => 0.01,
          'Units' => 'LB',
        ),
      ),
    ),
    'SpecialServicesRequested' => 
    array (
      'SpecialServiceTypes' => 
      array (
        0 => 'FEDEX_ONE_RATE',
      ),
    ),
  ),
)
文件第2.4.4点指出,获得单费率定价有几个要求:

  • 指定“联邦快递一次运费”ShipmentSpecialService
  • 您已经拥有(您使用的是联邦快递货运优先权和联邦快递货运经济,第2.2.4.1点中规定的)

    下一项要求:

  • 指定以下包装类型之一:
  • 联邦快递小盒子

    在代码中,它应该是:

    $request['RequestedShipment']['PackagingType'] = 'FEDEX_SMALL_BOX';
    
    之后是第三个要求:

  • 指定美国始发地和目的地
  • 你的代码中已经有了

    第四项要求:

  • 指定以下联邦快递服务之一:
  • 第一天晚上

    代码为:

    $request['RequestedShipment']['ServiceType'] = 'FIRST_OVERNIGHT';
    
    另外,请注意结尾的注释:

    *注意:Web服务客户端可以通过指定 在 RateRequest.variableOptions


    您是否检查了以下文档:。根据它(第2.4.4点),您还必须指定包装类型和服务类型。这似乎是问题所在。如果你能将此作为一个答案(最好是一个代码片段)发布,我将奖励你。你能给出最终请求数组吗?如何指定“FEDEX_ONE_RATE”ShipmentSpecialService?是$request['requestedshipping']['ShipmentSpecialService']='FEDEX_ONE_RATE';
    $request['RequestedShipment']['ServiceType'] = 'FIRST_OVERNIGHT';