簡體   English   中英

具有身份驗證頭的npm soap

[英]npm soap with auth header

我正在嘗試給我們npm soap軟件包創建一系列我可以通過angular 4與之連接的遠程服務器的端點。我已經閱讀了文檔,但是對於其用法仍不清楚。 下面是WSDL。 如何創建可用於與以下端點連接的客戶端? 這是WSDL。

http://208.180.122.191:8081/niku/wsdl/Query/ts_pending_approvals?tenantId=clarity

我的期望是我會收到以下答復:

var soap = require('soap');
var url = 'http://208.180.122.191:8081/niku/wsdl/Query/ts_pending_approvals?tenantId=clarity';
var args = {Username: "jdoe", Password: "*******"};
soap.createClient(url, function(err, client) {
client.Login(args, function(err, result) {
        console.log(result);
    });
});

當我調用console.log(client.describe())時,得到以下信息:

{ ts_pending_approvalsQueryService:
  { ts_pending_approvalsQueryService:
   { Query: [Object],
     Login: [Object],
     WrappedLogin: [Object],
     Logout: [Object] } } }

但是,當我打電話給login並傳遞用戶名和密碼時,我無法定義。 使用SoapUI,我可以使用以下命令成功完成請求。 我的問題是如何在節點中對此進行仿真。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:quer="http://www.niku.com/xog/Query">
 <soapenv:Header/>
 <soapenv:Body>
    <quer:Login>
       <quer:Username>jdoe</quer:Username>
       <quer:Password>******</quer:Password>
    </quer:Login>
 </soapenv:Body>
 </soapenv:Envelope>

我可以通過設置端點自行解決此問題,該端點為我提供了預期的響應令牌:6312078__98C024DA-25CF-441E-A47B-A84DDE2FF140

var soap = require('soap');
var url = 'http://208.180.122.191:8081/niku/wsdl/Query/ts_pending_approvals';
var args = {Username: "jdoe", Password: "*****"};
soap.createClient(url, function(err, client) {
   client.setEndpoint("http://208.180.122.191:8081/niku/xog")
   client.Login(args,(error,result)=>{
       if (error) throw error;
       console.log(result)
   })
});

還值得注意的是,當您使用該程序包並已發送其他參數時,除了需要多個參數的復雜結構之外,還可能必須發送標頭,這些標頭映射到WSDL中指定的名稱空間。 經過反復試驗,我能夠弄清楚這一點。 請參見下面的工作示例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
// 1TS Open Timesheet

ppmRouter.get("/open_time_sheet",(req,res,next) => {

    var resourceid = req.query.param_resourceid

    var soap = require('soap');
    var url = config.wsdlQueryPath + 'open_time_sheet';
    var sheader = { Auth: {Username: config.xog_user, Password: config.password}}
    var args = { 
        Query:  {Code: "open_time_sheet"}, 
        Filter: {
            param_resourceid: resourceid
        }
    };

    soap.createClient(url, function(err, client) {
        client.addSoapHeader(sheader,"","tns","Auth");
        client.setEndpoint(config.xog_url)
        client.Query(args,(error,result)=>{
            if (error) throw error;
            console.log(result)
            res.send(result)
        })
    });

})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM