node soap模块
一、浏览器查看需要调用的接口
1、使用浏览器打开要调用的接口地址,后缀需要加上wsdl
2、找到需要调用的接口方法及入参格式如下
二、可以使用soapUI工具进行调用测试服务是否正常(入参格式由服务商提供)
1、soapUi加载wsdl地址
2、找到需要调用的方法
3、<![CDATA[]]>若节点数据中存在特殊字符可以使用
三、组织xml数据
四、使用soap模块进行调用
1、若不存在soap模块需要使用进行安装
cnpm install soap
2、引用模块
let soap = require('soap')
3、组织xml数据,注意此处的xml = soapUi中的<tem:xml>
let data = {
xml: <Request>
<Common>
<DistrictCode></DistrictCode>
<ClientIp></ClientIp>
</Common>
<Recipes>
<Recipe>
<RecipeId></RecipeId>
</Recipe>
</Recipes>
</Request>
}
4、soap建立连接
// forceSoap12Headers 为设置合适的请求头
soap.createClient(wsdl地址, {forceSoap12Headers: false}, function (err, client) {
//调用要调用的接口方法名,传入组织好的xml数据
client['submitRecipe'](data, function (err, result) {
//获取到返回参数后使用xml2js进行数据格式化
//explicitArray 解决xml2js会默认会把子子节点的值变为一个数组
xml2js.parseString(result, {explicitArray: false},(err,result) =>{
//此处的result已经是json格式
logger.info(result);
})
})
})
5、整体代码
let soap = require('soap')
let xml2js = require('xml2js')
let data = {
xml:
<Request>
<Common>
<DistrictCode></DistrictCode>
<ClientIp></ClientIp>
</Common>
<Recipes>
<Recipe>
<RecipeId></RecipeId>
</Recipe>
</Recipes>
</Request>
}
return new Promise(function (resolve ,reject){
soap.createClient('wsdl', {forceSoap12Headers: false}, function (err, client) {
if(err){
reject(err);
}else{
client['submitRecipe'](data, function (err, result) {
if(err){
reject(err)
}else{
logger.info('--------xxxxxxxxx---------',result);
xml2js.parseString(result.submitRecipeResult, {explicitArray: false},(err,result) =>{
if(err){
logger.error(err);
}else{
logger.info('***********XML*************',result);
}
});
resolve(result);
}
});
}
});
});