2013-03-22 58 views
5

我正在嘗試使用node-soaphttps://github.com/milewise/node-soap)調用Authorize.net的SOAP服務器。但是,我似乎無法讓我的客戶端代碼傳遞適當的參數。我知道該函數正在調用服務器,因爲我收到服務器錯誤響應。Node.js使用複雜類型的SOAP調用

當我檢查WSDL時,我注意到服務器調用需要ComplexType參數。有沒有辦法創建我需要的ComplexTypes,或者我可以只使用Javascript對象?這是我目前的代碼:

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

你有沒有找到解決這個問題的方法? – tier1 2013-08-02 17:06:52

+0

不幸的是,沒有。 – 2013-08-06 20:40:36

回答

1

在將事務發送到服務器之前,node-soap模塊正在將JavaScript對象轉換爲XML。它將請求包裝在wsdl概述的xml元素中。下面是node-soap在傳遞提供的對象(重要的是注意外部元素是由節點soap模塊根據wsdl創建的)創建的內容的一個示例:

此示例使用wsdl對於Cyber​​Source的API

<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> 

另外,我不知道究竟是怎麼Authorize.net API的工作,但它聽起來像是你可能想看看如果需要使用用戶名令牌認證:

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