微信小程序> 微信小程序——支付结果查询

微信小程序——支付结果查询

浏览量:2476 时间: 来源:古娜拉黑暗之神哇咔咔

支付结果查询的方法:(没有使用小程序支付方法)
1. 定时器查询(轮询)setInterval+clearInterval

clearInterval:支付完成/失败, (不在查询页面的时候)onUnload、

2. webSocke连接

             HTTP协议:一种无状态,无连接的,单向运用协议。

webSocke:html5提供的一种在单个TCP(传输控制协议)连接上进行的全双向通行的协议。

webSocket就是因为HTTP 协议无法实现服务器主动向客户端发起消息,虽然可以定时器,但是效率低,非常浪费资源,还要不停的连接产生的。

-----------http图解:

-----------webSocket图解:

小程序webSocket的运用实例:代码实例借鉴https://www.jianshu.com/p/d78f52498267

!--index.wxml--view class="container"  view bindtap="bindViewTap" class="userinfo"    image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"/image    text class="userinfo-nickname"{{userInfo.nickName}}/text  /view  view class="voice"    button type="primary" size="default" hover-class="button-hover" class="button-voice-play" bindtap="socketBtnTap"{{socktBtnTitle}}/button    button type="primary" size="default" hover-class="button-hover" class="button-voice-play" bindtap="sendMessageBtnTap"发送/button  /view/view
!--index.js--//获取应用实例var app = getApp()var socketOpen = falsevar socketMsgQueue = []Page({  data: {    userInfo: {},    socktBtnTitle: '连接socket'  },  socketBtnTap: function () {    var that = this    var remindTitle = socketOpen ? '正在关闭' : '正在连接'    wx.showToast({      title: remindTitle,      icon: 'loading',      duration: 10000    })    if (!socketOpen) {      //创建一个 WebSocket 连接;      //一个微信小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。      wx.connectSocket({        url: 'ws://域名'      })      //监听WebSocket错误      wx.onSocketError(function (res) {        socketOpen = false        console.log('WebSocket连接打开失败,请检查!')        that.setData({          socktBtnTitle: '连接socket'        })        wx.hideToast()      })      //监听WebSocket连接打开事件。      wx.onSocketOpen(function (res) {        console.log('WebSocket连接已打开!')        wx.hideToast()        that.setData({          socktBtnTitle: '断开socket'        })        socketOpen = true        for (var i = 0; i  socketMsgQueue.length; i++) {          that.sendSocketMessage(socketMsgQueue[i])        }        socketMsgQueue = []      })      //监听WebSocket接受到服务器的消息事件      wx.onSocketMessage(function (res) {        console.log('收到服务器内容:' + res.data)      })      //监听WebSocket关闭      wx.onSocketClose(function (res) {        socketOpen = false        console.log('WebSocket 已关闭!')        wx.hideToast()        that.setData({          socktBtnTitle: '连接socket'        })      })    } else {      //关闭WebSocket连接。      wx.closeSocket()    }  },  //事件处理函数  bindViewTap: function () {    wx.navigateTo({      url: '../logs/logs'    })  },  sendSocketMessage: function (msg) {    if (socketOpen) {      //通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。      wx.sendSocketMessage({        data: msg      })    } else {      socketMsgQueue.push(msg)    }  },  sendMessageBtnTap: function () {    this.sendSocketMessage('小程序来了')  },  onLoad: function () {    console.log('onLoad')    var that = this    //调用应用实例的方法获取全局数据    app.getUserInfo(function (userInfo) {      //更新数据      that.setData({        userInfo: userInfo      })    })  }})

连接socket 按钮绑定 socketBtnTap()
发送按钮 绑定 sendMessageBtnTap()

首先定义了

var socketOpen = falsevar socketMsgQueue = []

 点击“连接socket ”按钮触发socketBtnTap()函数

socketOpen为true,wx.connectSocket建立连接

if (!socketOpen) {      //创建一个 WebSocket 连接;      //一个微信小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。      wx.connectSocket({        url: 'ws://域名'      })}

 

 wx.onSocketOpen监听webSocket,首次连接的时候socketMsgQueue数组是空,for循环不执行

wx.onSocketOpen(function (res) {        console.log('WebSocket连接已打开!')        wx.hideToast()        that.setData({          socktBtnTitle: '断开socket'        })        socketOpen = true        for (var i = 0; i  socketMsgQueue.length; i++) {          that.sendSocketMessage(socketMsgQueue[i])        }        socketMsgQueue = []      })

然后点击“发送”按钮,调用sendMessageBtnTap()函数,然后for循环就可以执行

sendSocketMessage: function (msg) {    if (socketOpen) {      //通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。      wx.sendSocketMessage({        data: msg      })    } else {      socketMsgQueue.push(msg)    }  },  sendMessageBtnTap: function () {    this.sendSocketMessage('小程序来了')  }

3. MQ(rabbitmq)当时做技术评审的时候没有使用这个,因为小程序不支持

我的理解原理大概是这样子

参考:https://www.cnblogs.com/ericli-ericli/p/5917018.html

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎