websocket初体验(小程序)

之前上个公司做过一个二维码付款功能,涉及到websocket功能,直接上代码

小程序onShow方法下加载:

/**  页面的初始数据 **/
 data: {
    code: "",
    onshowCode: "",
    hiden: true,
    show: false,
    array: {},
    has_password: "",
    openid: "",
    showPop: false,
    pwd: "",
    num: "",
    cashierid: "",
    socketOpen: false
  },
  onShow: function() {
    var _this = this;
    a.get("ipass.get_user_qr", {}, function(e) {
//获取到openID(传的参数)      
      console.log(e);
      var openid = e.openid;
      console.log(openid);
      _this.setData({
        array: e,
        openid: openid
      });
      var token = _this.data.openid;
      var socketOpen = false;
      var data = { type: "ready", uid: token };   // 给websocket传值
      var socketMsgQueue = JSON.stringify(data);   // 将值转化为字符串
      // 连接websocket
      wx.connectSocket({
        url: "wss://paytest.kuaiyunma.com",    //websocket 地址
        success(e) {
          console.log(e);
        }
      });
      // 监听WebSocket 连接打开事件
      wx.onSocketOpen(function(res) {
        console.log("123");
        _this.data.socketOpen = true; 
        console.log("数据发送中" + socketMsgQueue);
        _this.sendSocketMessage(socketMsgQueue);  // 自定义方法
      });
      // 监听WebSocket 错误事件
      wx.onSocketError(function(res) {
        console.log("WebSocket连接打开失败,请检查!");
      });
      // 监听WebSocket 接受到服务器的消息事件
      wx.onSocketMessage(function(res) {
        console.log(JSON.parse(res.data));
//获取到websocket返回的值
        var res = JSON.parse(res.data);
//将值转化为对象
        var num = res.fee;
//定义传过来的数值
        var cashierid = res.cashierid;
// 根据传的值进行判断    
        if (res.type == "password") {
          _this.setData({
            showPop: true,
            num: num,
            res: res,
            cashierid: cashierid
          });
        } else if (res.type == "pay_result") {
          if (res.result == "ok") {
            a.post(
              "ipass.pay",
              {
                cashierid: _this.data.cashierid,
                money: _this.data.num
              },
              function(e) {
                console.log(e);
                if (e.result.success === true) {
                  wx.showToast({
                    title: "支付成功!",
                    icon: "success"
                  });
                } else {
                  wx.showToast({
                    title: "支付失败",
                    icon: "none"
                  });
                }
                _this.clearNum();
              }
            );
          } else {
            wx.showToast({
              title: "支付失败",
              icon: "none"
            });
          }
        }
      });
    });
  },
//设置公共传值的方法~~
  sendSocketMessage: function(msg) {
    var socketOpen = this.data.socketOpen;
    if (socketOpen) {
      wx.sendSocketMessage({
        data: msg,
        success(e) {
          console.log(e);
        }
      });
    }
  },
  inputPwd(e) {
    console.log(e);
    var pwd = e.target.dataset.value;
    let rule = /[0-9]/;
    if (!rule.test(pwd)) {
      return;
    }
    pwd = this.data.pwd + pwd;
    console.log(pwd);
    this.setData({
      pwd: pwd
    });
    var _this = this;
    if (pwd.toString().length == 6) {
      wx.showLoading({
        title: "支付中...",
        mask: true
      });
      console.log("成功");
      a.post(
        "ipass.password.auth",
        {
          password: _this.data.pwd
        },
        function(e) {
          console.log(e);
          wx.hideLoading();
          // var socketOpen = true;
          // 定义传的data值
          var data1 = {
            type: "validate_password",
            token: _this.data.res.token,
            cashierid: _this.data.res.cashierid,
            password: _this.data.pwd
          };
          // 将转换的对象转换为字符串
          var socketMsgQueue1 = JSON.stringify(data1);
          if (!e.auth) {
            _this.setData({
              showPop: false,
              pwd: ""
            });
            wx.showToast({
              title: "支付密码错误",
              icon: "none"
            });
          } else {
            // 发送socket信息
            _this.sendSocketMessage(socketMsgQueue1);

            _this.setData({
              showPop: false,
              pwd: ""
            });
          }
        }
      );
      setTimeout(() => {
        wx.hideLoading({
          success: function() {
            _this.setData({
              showPop: false,
              hasPaid: true
            });
          }
        });
      }, 2000);
    }
  },

猜你喜欢

转载自www.cnblogs.com/visiliki-lvy/p/11253645.html