大家可以帮助我。
如何请求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适当的片段.....
答案 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