前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序访问webService(wsdl)

微信小程序访问webService(wsdl)

作者头像
用户6493868
发布2022-03-08 23:26:45
1.4K0
发布2022-03-08 23:26:45
举报
文章被收录于专栏:vue封装H5vue封装H5

微信的wx.request当前只支持对https的请求,所以请注意你的url

我本次需要测试的webService请求恰恰是http的,没办法,只好先在微程序里设置不校验了

图中最后一个勾选上,就可以在微信开发者工具中先测试了。但是真正在手机上查看的时候貌似还是不行的!

想要访问webService,最好先明白webService的一些相关概念,如soap、wsdl,因为你访问的时候真的无法绕开这些东西。

之前分享的一篇文章里有相关概念的介绍,不了解的朋友可以看看webService的相关概念

因为webService访问的是wsdl页面,使用的是SOAP协议,所以我们访问时采用XMLHTTP发送我们的请求。我的代码如下

代码语言:javascript
复制
Page({
  data:{
    userInfo:{}
  },
 formHandle:function(e){  
//method中设置你想调用的方法名
     var method='getReader';
//wsdlurl中设置需要访问的webservice的url地址
var wsdlurl='http://58.*.*.*:8081/HWWebService/LibServicePort?wsdl';
var targetNamespace='http://service.ws.*.com/';
//datacopy中拼字符串,即http传输中的soap信息
var datacopy= '<?xml version="1.0" encoding="utf-8"?>';
datacopy += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.*.com/">';
datacopy += '<soapenv:Header/>';
datacopy += '<soapenv:Body>';
//接着拼你要访问的方法名、参数名和你传递的实参值,比如我要访问的方法是getReader(String arg0,int arg1)
//而我的实际调用是getReader('libsys',2),所以拼字符串如下
datacopy += '<ser:getReader>';
             datacopy += '<arg0>libsys</arg0>';
             datacopy += '<arg1>2</arg1>';
             datacopy += '</ser:getReader>';
             datacopy += '</soapenv:Body>';
             datacopy += '</soapenv:Envelope>';
    wx.request({ 
         url: wsdlurl,
         data: datacopy, 
         method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT 
         header: { 
         'content-type':'text/xml; charset=utf-8',
         'SOAPAction':targetNamespace+method,
         }, 
         // 设置请求的 header
         success: function(res){
         // success
         var resData = res.data; 
         console.log(resData);
         },
         fail: function() {
         // fail
         }, 
         complete: function() { 
         // complete 
         }
     })
     }, 
     })

打印出来resdata可以看到,这就是从服务器端返回的数据,如果想深入解析xml数据获取对应的文本信息可以参照如下方式:

var xmlDoc = func.parseXML(resData);

var eamil = xmlDoc.getElementsByTagName("email")[0].firstChild.nodeValue;

代码调试过程中也遇到过诸多问题,可以下载软件SoapUI做一下测试,看看你的wsdl是否能够成功访问。

如果SoapUI没问题,而程序不行,可以用浏览器的开发者工具看一下你发送的http请求中包含哪些信息,和SoapUI中的信息进行对比或许就能发现问题了

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档