2013-03-22 18 views
5

Attualmente sto tentando di utilizzare node-soap (https://github.com/milewise/node-soap) per effettuare chiamate al server SOAP Authorize.net. Tuttavia, non riesco a ottenere il mio codice client passare i parametri corretti. So che la funzione sta chiamando il server da quando ricevo una risposta all'errore del server.Chiamata SOAP Node.js con tipi complessi

Quando esamino il WSDL, noto che la chiamata al server richiede parametri ComplexType. C'è un modo per creare i ComplexTypes di cui ho bisogno o posso semplicemente usare gli oggetti Javascript? Ecco il mio codice attuale:

var soap = require('soap'); 

    var url = 'https://api.authorize.net/soap/v1/Service.asmx?WSDL'; 

    soap.createClient(url, function(err, client) { 

    var args = { 
     merchantAuthentication: { 
     name: '285tUPuS', 
     transactionKey: '58JKJ4T95uee75wd' 
     } 
    }; 

    client.Service.ServiceSoap12.GetTransactionDetails(args, 
     function(err, result) { 

      if (err) { 
      console.log(err); 
      } else { 
      console.log(result.GetTransactionDetailsResult[0].messages); 
      } 
     }); 

});

+0

Hai mai trovato una soluzione a questo? – tier1

+0

Sfortunatamente no. –

risposta

1

Il modulo node-soap sta convertendo l'oggetto JavaScript in XML prima di inviare la transazione al server. Incapsula la richiesta in un elemento xml come delineato da wsdl. Ecco un esempio di cosa potrebbe essere prodotto da node-soap quando si passa l'oggetto fornito (importante notare che l'elemento esterno è creato dal modulo node-soap in base a wsdl):

Questo esempio utilizza wsdl per l'API CyberSource

<data:requestMessage xmlns:data="urn:schemas-cybersource-com:transaction-data-1.93" xmlns="urn:schemas-cybersource-com:transaction-data-1.93"> 

    <data:merchantAuthentication> 
    <data:name>285tUPuS</data:name> 
    <data:transactionKey>58JKJ4T95uee75wd</data:transactionKey> 
    </data:merchantAuthentication> 

</data:requestMessage> 

Inoltre, non so esattamente come funziona l'api Authorize.net, ma suona come si potrebbe voler controllare utilizzando nome utente token di autenticazione se necessario:

client.setSecurity(new soap.WSSecurity('username’, ‘password’)); 
Problemi correlati