使用nodejs

时间:2017-03-09 03:54:21

标签: node.js soap wsdl

大家可以帮助我。

如何请求soap Web服务并获取xml响应。 塞纳里奥: 使用肥皂ui即时发送wsdl url用户名,密码验证,我也会发送soap xml数据,我会得到回复。 同样如何使用nodejs或sails。

  
    

在SoapUi中,我的soap xml请求就像

  
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tier="http://HCSLN9191-GMS.gois.ito.unisys.com/Tier1ICLStd:Tier1ICLMB_StdDispatch">
   <soapenv:Header/>
   <soapenv:Body>
      <tier:UnisysMB_Dispatch>
         <PayLoad>SomeData</PayLoad>
      </tier:UnisysMB_Dispatch>
   </soapenv:Body>
</soapenv:Envelope>
  
    

我的肥皂认证就像

  

$ UserName:xyz&amp;密码:XYZ

  
    

我的wldl网址是     http://esbuatt1wm.ito.xyz.com:7001/ws/Tier1ICLStd_New:Tier1ICLMB_StdDispatch_New?WSDL

  

在提供此信息后,我得到xml响应,如

<ser-root:CommAck xmlns:ser-root="http://HCSLN1181-GMS.gois.ito.unisys.com/Tier1ICLStd_New:Tier1ICLMB_StdDispatch_New" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CommAck>
<MB_UUID>cbbb683d-e9b1-4d12-b0db-8006134aad27</MB_UUID>
<ServiceID>McDonalds</ServiceID>
<Acknowledge>0</Acknowledge>
<Comment>Payload does not contain the pattermatch xpath.</Comment>
</CommAck>
</ser-root:CommAck>

我的问题是如何使用node easy soap获取上面的xml响应, 我是肥皂概念的新手。 anyboud可以帮助我给上面的senario适当的片段.....

4 个答案:

答案 0 :(得分:2)

您可以使用此程序包https://www.npmjs.com/package/soap。示例在同一链接中。我粘贴了一些内容:

使用npm安装:

  npm install soap

示例:

var soap = require('soap');
  var url = 'http://example.com/wsdl?wsdl';
  var args = {name: 'value'};
  soap.createClient(url, function(err, client) {
      client.MyFunction(args, function(err, result) {
          console.log(result);
      });
  });

BasicAuthSecurity

  client.setSecurity(new soap.BasicAuthSecurity('username', 'password'));

答案 1 :(得分:0)

您可以使用Axios基于Promise的Node.js程序包。

一个例子:

const baseURL = '';
const apiKey = '';
const xmlBody = `XML body here // you can also add api key using ${apiKey} like this if needed`;
axios.post(BaseURL,xmlBody,{
headers: {
'Content-Type': 'text/xml'
}
}
).then(response => {console.log(response.data)}
).catch(err => {console.log(err)});

答案 2 :(得分:0)

您可以使用soap模块。我最终不得不使用它,因此在下面提供的链接中对其进行了说明。 对于用户名和密码,如果您的WSDL受密码保护,那么您还需要在将使用node-soap创建的客户端中设置正确的wsdl_headers

查看此答案:https://stackoverflow.com/a/29036380/4157003

此外,在使用任何服务之前,您还需要设置正确的安全机制

 client.setSecurity(new soap.BasicAuthSecurity('username', 'password'));

您可以检查此链接以获取更多信息 https://codecalls.com/2020/05/17/using-soap-with-node-js/

答案 3 :(得分:0)

您可以使用 easy-soap-request npm 包。

如果要在nodejs中创建SOAP头passwordDigest,

const crypto = require('crypto');

function passwordDigest(created, nonce, pass) {
  // Password_Digest = Base64 ( SHA-1 ( bytes(decode64(nonce)) + bytes(created) + bytes(password) ) )
  let pd = Int8Array.from([...Int8Array.from(Buffer.from(nonce, 'base64')),
                           ...Int8Array.from(Buffer.from(created)),
                           ...Int8Array.from(Buffer.from(pass))]);
  pd = crypto.createHash('sha1').update(pd).digest('base64');
  return pd;
}

这篇文章有更详细的解释 https://stackoverflow.com/a/66824784/15485314