大家都知道支付宝小程序坑非常多,ios的兼容也很头疼,这次就碰到了这个问题,试了uniapp的webscoket,也试了支付宝自己的webscoket,都报错,原生的webscoket也试了,不能用,一直报错握手失败(一样的代码微信小程序一切正常,支付宝安卓正常,iOS例外)
代码如下
uni.connectSocket({
url: ws, //此处是你的wss地址,支付宝2019年五月以后只支持wss地址
fail: (err) => {
uni.showToast({
title: '连接失败,请稍后再试!',
icon: "none"
});
}
})
uni.onSocketOpen(res=>{
console.log('WebSocket连接打开成功!', res)
this.opened=true
const cmd= this.stats?'status':'connect'
this.timeId=setInterval(()=>{
if(!this.opened){
return
}
uni.sendSocketMessage({
data:cmd
})
},1000)
})
uni.onSocketMessage((message)=>{
let data=JSON.parse(message.data);
console.log(data)
})
uni.onSocketClose(()=>{
this.opened=false
if(this.timeId){
clearInterval(this.timeId)
console.log(789,'已经关闭了')
}
// #ifdef MP-ALIPAY
my.closeSocket() //这个支付宝一定要添加,不然可能会数据重复多次
my.offSocketMessage();
my.offSocketMessage();
my.offSocketError();
my.offSocketOpen();
my.offSocketClose();
// #endif
})
uni.onSocketError(res => {
console.log('WebSocket连接打开失败!', res)
})
相当于uni.connectSocket创建成功以后,直接走了error,刚开始一直以为是前端的错误,结果试了三个都没有成功,后续询问了支付宝官方技术支持回复如下
接到这个回复,就轻松了,压力到了后端,嘿嘿
后端同学查看半天,这个headers都有,但一直报这个错误,后来发现是因为,headers多了"authorization":"Basic KG51bGwpOihudWxsKQ=="这个,手动拦截屏蔽这个就好了
就这个错误折磨了我一天半,后端一天半,完事了已经,希望可以给大家一点帮助