我在尝试使用 Fedex 的 Web 服务提取跟踪信息时遇到问题。我正在使用有效的跟踪号码,并且可以在 Fedex 的网站上查看详细信息。但是,我收到错误 9040“我们的系统尚未收到以下货件的信息。请重试或致电 1.800.Go.FedEx(R) 800.463.3339 联系客户服务。” 我会遗漏一些东西吗?
我的代码:
<?php
$path_to_wsdl = "URL_TO_WSDL";
ini_set("soap.wsdl_cache_enabled", "0");
$client = new SoapClient($path_to_wsdl, array('trace' => 1));
$request['WebAuthenticationDetail'] = array(
'UserCredential' =>array(
'Key' => 'MY_KEY',
'Password' => 'MY_PASSWORD'
)
);
$request['ClientDetail'] = array(
'AccountNumber' => 'MY_ACCT',
'MeterNumber' => 'MY_METER'
);
$request['TransactionDetail'] = array('CustomerTransactionId' => 'ActiveShipping');
$request['Version'] = array(
'ServiceId' => 'trck',
'Major' => '5',
'Intermediate' => '0',
'Minor' => '0'
);
$request['PackageIdentifier'] = array(
'Value' => 'TRACKING#',
'Type' => 'TRACKING_NUMBER_OR_DOORTAG');
$response = $client->track($request);
var_dump($response);
?>
Run Code Online (Sandbox Code Playgroud)
知道了!
致电网络服务部门,他们告诉我从 wsdl 文件中删除“beta”。这似乎与我之前在响应此问题时发现的地址不同。在 wsdl 文件的第 1507 行,进行以下更改:
从:
<s1:address location="https://wsbeta.fedex.com:443/web-services/track"/>
Run Code Online (Sandbox Code Playgroud)
到
<s1:address location="https://ws.fedex.com:443/web-services/track"/>
Run Code Online (Sandbox Code Playgroud)
我稍微改变了代码的其余部分,但这应该不会产生影响。为了安全起见,这里是:
<?php
$path_to_wsdl = "PATH_TO_WSDL_FILE";
$client = new SoapClient($path_to_wsdl, array('trace' => 1));
$trackRequest = array(
'WebAuthenticationDetail' => array(
'UserCredential' => array(
'Key' => 'MY_KEY',
'Password' => 'MY_PASSWORD'
)
),
'ClientDetail' => array(
'AccountNumber' => 'MY_ACCT_#',
'MeterNumber' => 'MY_METER_#'
),
'Version' => array(
'ServiceId' => 'trck',
'Major' => '5',
'Intermediate' => '0',
'Minor' => '0'
),
'PackageIdentifier' => array(
'Type' => 'TRACKING_NUMBER_OR_DOORTAG',
'Value' => 'THE_TRACKING_#',
),
'CustomerTrasactionId',
'IncludeDetailedScans' => 1
);
$response = $client->track($trackRequest);
var_dump($response);
?>
Run Code Online (Sandbox Code Playgroud)