php - example - Problema con el módulo Nodejs Soap al llamar a servicios de fedex
soap createclient options (3)
Supongo que estás usando las URL de prueba en PHP pero las URL en vivo en node.js. En su código PHP usa wsdl-test/
y en su código node.js usa wsdl/
. Si realmente está usando los archivos WSDL de prueba en PHP, entonces creo que finalmente se está resolviendo en https: // wsbeta .fedex.com: 443 / web-services / rate mientras que en node.js se está resolviendo en https : // ws .fedex.com: 443 / web-services / rate donde probablemente aún no tenga acceso directo.
Estoy usando nodejs soap module para llamar a los servicios de fedex pero obtengo un error:
{
"HighestSeverity": "ERROR",
"Notifications": [
{
"Severity": "ERROR",
"Source": "prof",
"Code": "1000",
"Message": "Authentication Failed"
}
],
"Version": {
"ServiceId": {},
"Major": {},
"Intermediate": {},
"Minor": {}
}
}
A continuación está mi código 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);
});
});
Pero cuando envío estos datos con php debajo de uno, está funcionando.
$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);
El mismo código está funcionando en php pero no en Nodejs. Por favor, hágame saber dónde está el problema?
Puede intentar usar el módulo node-shipping-fedex para usar jabón directamente. https://github.com/typefoo/node-shipping-fedex
Veo que pegaste esto:
{
"HighestSeverity": "ERROR",
"Notifications": [
{
"Severity": "ERROR",
"Source": "prof",
"Code": "1000",
"Message": "Authentication Failed"
}
],
"Version": {
"ServiceId": {},
"Major": {},
"Intermediate": {},
"Minor": {}
}
}
¿Es esta la respuesta que recibió del servicio web SOAP?
Si es así, se ha conectado correctamente y ha recibido una respuesta, aunque contiene un error que especifica lo siguiente: Falló la autenticación.
En la función createClient (), ¿existe la posibilidad de establecer espacios de nombres y prefijos que sean específicos del servicio web de Fedex en cuestión?
¿Tienes una copia del WSDL? Si lo hace, puede encontrar más detalles sobre exactamente cómo debe llamarse el servicio web y exactamente en qué formato deben llamarse las operaciones.
No estoy seguro del funcionamiento interno del cliente SOAP Node.js, pero lo que sí sé es que en PHP a veces, al crear una instancia SimpleXMLElement, es necesario registrar los espacios de nombres contra el objeto para atravesar la respuesta SOAP con XSLT en PHP.