在调用fedex服务时发出Nodejs Soap模块

我正在使用nodejs soap模块来调用fedex服务,但得到一个错误:

{ "HighestSeverity": "ERROR", "Notifications": [ { "Severity": "ERROR", "Source": "prof", "Code": "1000", "Message": "Authentication Failed" } ], "Version": { "ServiceId": {}, "Major": {}, "Intermediate": {}, "Minor": {} } } 

以下是我的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); }); }); 

但是,当我发送这个数据与低于一个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); 

相同的代码在PHP中工作,但不在Nodejs中。 请让我知道问题在哪里?

您可以尝试直接使用soap的node-shipping-fedex模块insterad。 https://github.com/typefoo/node-shipping-fedex

我注意到你贴了这个:

  { "HighestSeverity": "ERROR", "Notifications": [ { "Severity": "ERROR", "Source": "prof", "Code": "1000", "Message": "Authentication Failed" } ], "Version": { "ServiceId": {}, "Major": {}, "Intermediate": {}, "Minor": {} } } 

这是从SOAP Web服务收到的响应吗?

如果是这样,那么你已经成功地连接并接收到一个响应,尽pipe包含一个错误,指定了以下内容:身份validation失败。

在createClient()函数中,是否可以设置特定于有问题的Fedex Web服务的名称空间和前缀?

你有WSDL的副本吗? 如果你这样做,你可以find更多关于如何调用Web服务的详细信息,以及需要调用什么格式的操作。

我不清楚Node.js SOAP客户端的内部工作原理,但我知道的是,在PHP中,有时在创buildSimpleXMLElement实例时,需要注册名称空间以对象,以便使用XSLT遍历SOAP响应PHP。

我的猜测是,你使用PHP中的testingurl,但在node.js中的实时url。 在您的PHP代码中,您使用wsdl-test/并在您的node.js代码中使用wsdl/ 。 如果你真的在PHP中使用testingWSDL文件,那么我认为你最终解决https:// wsbeta .fedex.com:443 /networking服务/速度,而在node.js你解决https :// ws .fedex.com:443 / web-services / rate您可能还没有实时访问权限。

Interesting Posts