Roh*_*hit 20 php soap fedex node.js
我使用nodejs soap模块调用fedex服务但收到错误:
{
"HighestSeverity": "ERROR",
"Notifications": [
{
"Severity": "ERROR",
"Source": "prof",
"Code": "1000",
"Message": "Authentication Failed"
}
],
"Version": {
"ServiceId": {},
"Major": {},
"Intermediate": {},
"Minor": {}
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我的nodejs代码:
var data = {};
data["WebAuthenticationDetail"] = {
"UserCredential": {
"Key": developer_key,//getProperty('key');
"Password": password
}
};
//console.log(JSON.stringify(data));
data['ClientDetail'] = {
'AccountNumber': account_number,//getProperty('shipaccount');
'MeterNumber': meter_number//getProperty('meter');
};
data['Version'] = {
'ServiceId': 'crs',
'Major': 14,
'Intermediate': 0,
'Minor': 0
};
var soap = require('soap');
var path = require('path');
var path_to_wsdl = path.resolve(__dirname + '/wsdl/RateService_v14.wsdl');
soap.createClient(path_to_wsdl, function (err, client) {
if (err)throw err;
client.getRates(data, function (err, result) {
if (err)throw err;
res.send(result);
});
});
Run Code Online (Sandbox Code Playgroud)
但是当我用PHP发送这些数据时,它正在工作.
$path_to_wsdl = "wsdl-testing/RateService_v14.wsdl";
ini_set("soap.wsdl_cache_enabled", "0");
$client = new SoapClient($path_to_wsdl /*, array('trace' => 1) */);
$request['WebAuthenticationDetail'] = array(
'UserCredential' => array(
'Key' => $developer_key,
'Password' => $password
) );
$request['ClientDetail'] = array(
'AccountNumber' => $account_number,
'MeterNumber' => $meter_number,
);
$request['Version'] = array(
'ServiceId' => 'crs',
'Major' => '14',
'Intermediate' => '0',
'Minor' => '0');
$response = $client -> getRates($request);
Logger::info('here is the response====', $response);
Run Code Online (Sandbox Code Playgroud)
相同的代码在php中工作,但在Nodejs中没有.请告诉我问题在哪里?
我的猜测是,您在 PHP 中使用测试 URL,但在 Node.js 中使用实时 URL。在您使用的 PHP 代码中wsdl-test/以及在您使用的 Node.js 代码中wsdl/。如果您确实在 PHP 中使用测试 WSDL 文件,那么我认为您最终会解析为 https:// wsbeta .fedex.com:443/web-services/rate,而在 node.js 中您会解析为 https :// ws .fedex.com:443/web-services/rate 您可能还没有实时访问权限。