站三界导航
首页 uniapp代码使用uniapp 微信登录第一次失败,第二次就成功,附带解决办法,绝对好使

使用uniapp 微信登录第一次失败,第二次就成功,附带解决办法,绝对好使

  • uniapp代码
  • 来源:站三界导航
  • 72阅读
  • 2023-04-23

需求:通过微信绑定手机号弹窗,获取用户信息,带到后台
原因:sessionkey 过期了
为啥过期:与微信官方交互了两次,sessionkey 更新导致 sessionkey 不一致
最终解决思路:

具体问题:

使用框架使用的是 uni,写的是微信小程序,ul框架用的:thorui
产品要点击微信一键登录,通过获取手机号在获取用户信息存放到数据库中,刚开始我也实现了,但是每次登录的时候第一次都会失败,第二次点击就可以了,一开始我还以为是后台的问题,想要疯狂甩锅,代码实现是:在button按钮绑定事件,拿到用户信息,进行un,login,然后根据code获取sessionkey,调接口传encryptedData和sessionkey到后台进行对encryptedData解密,返回用户信息

具体实现:
对 thorul的button 进行二次封装,增加了获取手机号功能,返回的是一些encryptedData,cloudID 用户加密之后的信息,要放到后台,通过sessionkey 进行解密返回

先说一下第二套方案吧,但是他是不行的,但是我就要说:

发现了是两次sessionkey不一样了,于是在封装的button进行了处理,在button中进行的uni.login

binduserphone(data){  let userData=data  uni.login({  provider: 'weixin',  success: function(rep) {  userData.userDataLoginCode=rep  //rep中有code通过code获取sessionkey,此时与微信官方进行两次交互,但是code是最后的我以为可以解开用户信息  _this.$emit('getphonenumber', userData);  }  });  }

在这里其实是不行的
第一次与微信官方获取用户解密的信息生成了一个sessionkey
第二次通过un.login登录获取sessionkey
但是此时你的sessionkey钥匙打不开你第一次的锁,所以授权失败,当你第二次的登录的时候,你的sessionkey已经存在了,所以授权成功,**于是我有了思路,想着能不能在第一次获取加密信息的时候拿到sessionkey存起来,看了下没有相对数据,百度无果,

浏览了相关公司的小程序发现的确可以,顺丰的,享道的摩拜的都可以,但是我发现他们都有一个共同的问题就是当点击授权的时候回延迟1秒左右,于是问题解决了

解决方案:

先进行uni.login获取sessionkey在获取encryptedData传给后台,问题就解决了,
我在那个button 按钮上面加了一个tab事件,进行获取sessionkey在进行encryptedData解密,要在封装的button中加一个settimeout就好了

本文结束
本文来自投稿,不代表站三界导航立场,如若转载,请注明出处:https://www.zhansanjie.com/article/details/40928.html

版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。

分享
站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。