微信小程序连接webservice(soap)
在微信小程序中,调用接口通常使用wx.request。而通过wx.request通常不能直接调用基于soap协议的webservice。
首先我们得知道 wx.request其中的两个属性"method"和"Data"
wx.request({
url: ,
data: ,
method: , // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
},
})
“method"是指定请求的方法,通常使用"GET"和"POST”
"data"是用于发送指定的数据到服务器,在不同的方法中扮演着不同的角色。在"GET"方法中,"data"中的数据会转化为字符串拼接到url后面,如
wx.request({
url: http://你的服务器地址, //最终的url为http://你的服务器地址?name=张三&age=19
data:{
name:张三,
age:19
} ,
method: , // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
},
})
在"POST"方法中,"data"中数据就会变成请求体发送到服务器,并根据 “Content-Type”字段决定发送的格式是json还是xml
而又wx.request默认的请求格式是json,soap的消息格式是基于xml的,所以不能直接发送soap请求
完整如下代码:
//method中设置你想调用的方法名
var method = '...';
//wsdlurl中设置需要访问的webservice的url地址
var wsdlurl = '...';
var targetNamespace = '...'; //在wsdl文件可以找到
//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=targetNamespace>';
datacopy += '<soapenv:Header/>';
datacopy += '<soapenv:Body>';
//接着拼你要访问的方法名、参数名和你传递的实参值,比如我要访问的方法是function(String arg0)
//而我的实际调用是function(2),所以拼字符串如下
datacopy += '<ser:...>'; //填写方法名
datacopy += '<arg0>'+...+'</arg0>'; //参数必须一致
datacopy += '</ser:...>';//填写方法名
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', //告诉服务器请求体是采用utf-8编码的xml文本
'SOAPAction': targetNamespace + method, //告诉服务器此请求旨在调用特定的web服务操作,通常与content-type一起使用
},