微信的wx.request当前只支持对https的请求,所以请注意你的url
我本次需要测试的webService请求恰恰是http的,没办法,只好先在微程序里设置不校验了
图中最后一个勾选上,就可以在微信开发者工具中先测试了。但是真正在手机上查看的时候貌似还是不行的!
想要访问webService,最好先明白webService的一些相关概念,如soap、wsdl,因为你访问的时候真的无法绕开这些东西。
之前分享的一篇文章里有相关概念的介绍,不了解的朋友可以看看webService的相关概念
因为webService访问的是wsdl页面,使用的是SOAP协议,所以我们访问时采用XMLHTTP发送我们的请求。我的代码如下
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 删除。