2015-08-28 186 views
0

我在响应速度服务api时出错,但没有得到我所缺少的。在联邦快递服务api中获取错误

这里是我的代码

$path_to_wsdl = Folder::realpath(dirname(__FILE__) . '/wsdl/RateService_v18.wsdl'); 
     ini_set("soap.wsdl_cache_enabled", "0"); 
     $client = new SoapClient($path_to_wsdl, array('trace' => 1, 'stream_context' => stream_context_create(array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false))))); 



     $request['WebAuthenticationDetail'] = array(
      'UserCredential' => array(
       'Key' => 'fedex key', 
       'Password' => 'fedex password' 
      ) 
     ); 
     $request['ClientDetail'] = array(
      'AccountNumber' => 'fedex account number', 
      'MeterNumber' => 'fedex meter no.' 
     ); 
     $request['TransactionDetail'] = array(
      'CustomerTransactionId' => ' *** Rate Request v18 using PHP ***' 
     ); 
     $request['Version'] = array(
      'ServiceId' => 'crs', 
      'Major' => '18', 
      'Intermediate' => '0', 
      'Minor' => '1' 
     ); 
     $request['ReturnTransitAndCommit'] = true; 
     $request['RequestedShipment']['DropoffType'] = 'REGULAR_PICKUP'; // valid values REGULAR_PICKUP, REQUEST_COURIER, ... 
     $request['RequestedShipment']['ShipTimestamp'] = date('c'); 
     $request['RequestedShipment']['ServiceType'] = 'PRIORITY_OVERNIGHT'; // valid values STANDARD_OVERNIGHT, PRIORITY_OVERNIGHT, FEDEX_GROUND, ... 
     $request['RequestedShipment']['PackagingType'] = 'YOUR_PACKAGING'; // valid values FEDEX_BOX, FEDEX_PAK, FEDEX_TUBE, YOUR_PACKAGING, ... 
     $request['RequestedShipment']['Shipper'] = array('Address' => array(
       'StreetLines' => array('10 Fed Ex Pkwy'), // Origin details 
       'City' => 'Memphis', 
       'StateOrProvinceCode' => 'TN', 
       'PostalCode' => '38115', 
       'CountryCode' => 'US')); 
     $request['RequestedShipment']['Recipient'] = array(
      'Address' => array(
       'StreetLines' => array('13450 Farmcrest Ct'), // Destination details 
       'City' => 'Herndon', 
       'StateOrProvinceCode' => 'VA', 
       'PostalCode' => '20171', 
       'CountryCode' => 'US' 
      ) 
     ); 
     $request['RequestedShipment']['ShippingChargesPayment'] = array(
      'PaymentType' => 'SENDER', 
      'Payor' => array(
       'AccountNumber' => 'fedex acc no.', 
       'CountryCode' => 'US' 
      ) 
     ); 
     $request['RequestedShipment']['RateRequestTypes'] = 'ACCOUNT'; 
     $request['RequestedShipment']['RateRequestTypes'] = 'LIST'; 
     $request['RequestedShipment']['PackageCount'] = '2'; 
     $request['RequestedShipment']['PackageDetail'] = 'INDIVIDUAL_PACKAGES'; // Or PACKAGE_SUMMARY 
     $request['RequestedShipment']['RequestedPackageLineItems'] = array(
      '0' => array(
       'Weight' => array(
        'Value' => 2.0, 
        'Units' => 'LB' 
       ), 
       'Dimensions' => array(
        'Length' => 10, 
        'Width' => 10, 
        'Height' => 3, 
        'Units' => 'IN' 
       ) 
      ), 
      '1' => array(
       'Weight' => array(
        'Value' => 5.0, 
        'Units' => 'LB' 
       ), 
       'Dimensions' => array(
        'Length' => 20, 
        'Width' => 20, 
        'Height' => 10, 
        'Units' => 'IN' 
       ) 
      ) 
     ); 




     try { 
      return $client->getRates($request); 
     } catch (SoapFault $exception) { 
      return $exception; 
     } 

这里是我得到

[faultstring] => Fault 
    [faultcode] => SOAP-ENV:Server 
    [detail] => stdClass Object 
     (
      [cause] => UnrecoverableClientError 
      [code] => SchemaError 
      [desc] => validation failure for RateRequest Error:cvc-enumeration-valid: Value '1' is not facet-valid with respect to enumeration 
     ) 

我坚持这个特殊的线 - “验证失败的RateRequest错误错误异常:CVC-枚举有效:值'1'对于枚举不是方面有效的“。

+0

*真的很难在网上搜索错误消息吗?我的意思是这个错误已经非常明显,但是如果你还没有明白它的意思,谷歌的第一次打击就有了解释。 – burzum

+0

@burzum我没有得到哪个特定的字段无效 –

回答

2

最后得到的答案

替换RateService_v18.wsdl下面给出的行文件

<xs:element name="Minor" type="xs:int" fixed="1" minOccurs="1"> 

<xs:element name="Minor" type="xs:int" minOccurs="1"> 

,并发送小参数为0,如下图所示

$request['Version'] = array(
      'ServiceId' => 'crs', 
      'Major' => '18', 
      'Intermediate' => '0', 
      'Minor' => '0' 
     );