2014-04-15 20 views
20

sto usando il modulo di sapone nodejs per chiamare i servizi FedEx ma ottenendo un errore:Problema con modulo Nodejs sapone durante la chiamata servizi FedEx

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

Di seguito è riportato il mio codice 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); 
    }); 
}); 

Ma quando sto inviando questi dati con php sotto uno allora sta funzionando.

$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); 

Lo stesso codice funziona in PHP ma non in Nodejs. Per favore fatemi sapere dove è il problema?

+0

hai la risposta? Sto avendo lo stesso problema con Magento ... ottenendo la stessa risposta .. –

+0

Questo è il problema con Fedex. Fedex non sta analizzando i dati alla fine. Ora sto inviando i dati nello stesso formato incluso nei file di codice di esempio. – Rohit

+0

Vorrei usare uno strumento come il violinista (http://www.telerik.com/fiddler) che può guardare il traffico mentre attraversa il filo. Probabilmente c'è qualche intestazione o qualcosa che non è impostato in modo esplicito in nodejs, ma è tramite php. –

risposta

0

Suppongo che tu stia utilizzando gli URL di test in PHP ma gli URL live in node.js. Nel tuo codice PHP usi wsdl-test/ e nel tuo codice node.js usi wsdl/. Se stai effettivamente utilizzando i file WSDL di prova in PHP, penso che alla fine stai risolvendo in https: // wsbeta .fedex.com: 443/web-services/rate mentre in node.js stai risolvendo to https: // ws .fedex.com: 443/web-services/rate dove probabilmente non hai ancora accesso dal vivo.

1

Rilevo si è incollato questo:

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

È questa la risposta che hai ricevuto dal servizio web SOAP?

In tal caso, è possibile connettersi e ricevere una risposta correttamente, anche se contiene un errore che specifica quanto segue: Autenticazione non riuscita.

Nella funzione createClient() esiste la possibilità di impostare spazi dei nomi e prefissi specifici per il servizio Web Fedex in questione?

Avete una copia del WSDL? Se lo fai, potresti scoprire maggiori dettagli su come esattamente il servizio web deve essere chiamato e esattamente su quale formato devono essere chiamate le chiamate.

Non sono sicuro del funzionamento interno del client SOAP Node.js ma quello che so è che in PHP a volte quando si crea un'istanza SimpleXMLElement è necessario registrare gli spazi dei nomi sull'oggetto per attraversare la risposta SOAP con XSLT in PHP.