微信小程序> 微信小程序登录解密异常

微信小程序登录解密异常

浏览量:2708 时间: 来源:木子松的猫

错误描述

用户登录微信小程序,初始登录会报错,接着再登录,就会登录成功。

后端catch住的异常

小程序

抛异常原因

小程序客户端调用微信服务器的接口顺序反了。
小程序客户端需要调用微信服务器的wx.login接口来获取code,然后调用wx.getUserInfo来获取加密数据和偏移向量iv。正确的顺序应该是先调用login,然后再调用getUserInfo。
而公司代码先调用了getUserInfo获取了解密数据,然后又调用的login,就会刷新登录态,这样获取的code换取的解密秘钥和提前获取的加密数据的加密秘钥就可能不一致的,所以无法成功解密。

错误代码

//先调用了getUserInfo,获取用户信息  bindGetUserInfo: function (e) {    //  console.log(e)    wx.showToast({      title: '加载中',      icon: 'loading',      duration: 3000    });    var that = this,      userInfo = e.detail,      encryptedData = userInfo.encryptedData,      iv = userInfo.iv;   //然后才调用了login    wx.login({      success: function (res) {        //用拿到的code,从后台获取sessionId        wx.request({          url: sessionID,          method: 'GET',          data: {            js_code: res.code,            movieCode: movieCode          },          header: {            "Content-Type": "application/x-www-form-urlencoded",            'Accept': 'application/json'          },        });     }  });

正确代码

//先调用loginwx.login({      success: function (res) {           //用拿到的code,从后台获取sessionId        wx.request({          url: sessionID,          method: 'GET',          data: {            js_code: res.code,            movieCode: movieCode          },          header: {            "Content-Type": "application/x-www-form-urlencoded",            'Accept': 'application/json'          },          success: function (res) {            // console.log('sessionId:');            // console.log(res.data.resultData);            // console.log(res.data.resultData);            var sessionId = res.data.resultData; //从后台获取到的sessionId            wx.setStorageSync('sessionId', sessionId);            //然后调用getUserInfo获取加密数据encryptedData和iv            wx.getUserInfo({              success: function(msg){                console.log(msg);                var encryptedData = msg.encryptedData,                 iv = msg.iv;                wx.request({                  url: userInfoUrl,                  method: 'POST',                  data: {                    encryptedData: encryptedData,                    iv: iv,                    sessionId: sessionId                  },         //代码不完整,参考者请注意。。。。

结语

这个问题搞了好几天,一直以为是后端的问题,一直再调整后端,直到快要放弃的时候,才发现,原来问题症结在此。所以,调用微信服务器接口的顺序一定是wx.login在前,wx.getUserInfo在后。

版权声明

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

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

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