小程序
小游戏
企业微信
微信支付
扫描小程序码分享
查了一下,getuserinfo获取到的加密信息解密时会有几率失败,请问各位大佬有没有什么好的解决方法!!!!!!急!!!!!!!!!!!!!!!!
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
这个问题我已经彻底解决了,其实方案很简单,换一下思路就好了!
在按钮的getuserinfo事件中首先判断是否选择同意,代码如下:
const eUserRes = e && e.detail
if (!eUserRes.iv || !eUserRes.encryptedData) {
return
}
这里会直接判断是否同意授权,如果选择拒绝,程序就不会再往下走了
接下来调用login和useinfo:
try {
wx.login({
success: function (login) {
wx.getUserInfo({
success: function (userRes) {
const params = {
js_code: login.code,
encrypted_data: userRes.encryptedData,
iv: userRes.iv
// 业务自己的登录逻辑在这儿写
})
} catch (error) {
console.log('登录失败')
这么做百分百不会再有失败的情况了,希望能帮到大家
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
我现在是这样处理的,当解密失败的时候再去调用自身,结果就是无限的失败.... 请问下有没有什么办法能够解决
你这样处理肯定不行啊,事件对象e永远都是错误的那次,既然是几率失败,可能是解密失败吧,code和e.detail一起生成的,你获取了e.detai后,又调用了一次login来获取code,这不有可能刷新登录态,code和e.detail对应不上,要么点击按钮前提前调用code,要么在login回掉里,再调用一下,wx.getUserInfo,来获取新的加密数据(虽然不太合理,相当于微信多请求一次,不过好用,不必判断授权不授权什么的)
多谢多谢,那也就是说我需要在bindgetuserinfo回调中调用login,然后在login的回调中在调用一边bindgetuserinfo? 不是说wx.getUserInfo已经快要废弃了嘛 , 怎么能不通过按钮来直接获取到用户信息呢
我现在是点击允许授权后触发,先拿到e.detail,然后再拿到code去换 ,但是我看文档中,之前的wx.getUserInfo是必须是要先login,wx.getUserInfo才能拿到私密信息的,有点懵.....
你点击按钮,肯定就授权了,授权后,wx.getUserInfo就可以用了,至于是不是废弃不晓得,不过准确的说,是不弹窗了,而你不需要wx.getUserInfo弹窗,因为点击动作恰恰已经调起了授权窗,这样使用虽然不符合官方初衷,但官方初衷就是个坑https://developers.weixin.qq.com/community/develop/doc/0006026b3c83c0e244573a0025bc08
就是说还是最简单的login+wx.getUserInfo,只不过利用了一次登录按钮弹出的授权窗而已,而不使用e.detail里的数据
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
这个问题我已经彻底解决了,其实方案很简单,换一下思路就好了!
在按钮的getuserinfo事件中首先判断是否选择同意,代码如下:
const eUserRes = e && e.detail
if (!eUserRes.iv || !eUserRes.encryptedData) {
return
}
这里会直接判断是否同意授权,如果选择拒绝,程序就不会再往下走了
接下来调用login和useinfo:
try {
wx.login({
success: function (login) {
wx.getUserInfo({
success: function (userRes) {
const params = {
js_code: login.code,
encrypted_data: userRes.encryptedData,
iv: userRes.iv
}
// 业务自己的登录逻辑在这儿写
}
})
}
})
} catch (error) {
console.log('登录失败')
}
这么做百分百不会再有失败的情况了,希望能帮到大家
我现在是这样处理的,当解密失败的时候再去调用自身,结果就是无限的失败.... 请问下有没有什么办法能够解决
你这样处理肯定不行啊,事件对象e永远都是错误的那次,既然是几率失败,可能是解密失败吧,code和e.detail一起生成的,你获取了e.detai后,又调用了一次login来获取code,这不有可能刷新登录态,code和e.detail对应不上,要么点击按钮前提前调用code,要么在login回掉里,再调用一下,wx.getUserInfo,来获取新的加密数据(虽然不太合理,相当于微信多请求一次,不过好用,不必判断授权不授权什么的)
多谢多谢,那也就是说我需要在bindgetuserinfo回调中调用login,然后在login的回调中在调用一边bindgetuserinfo? 不是说wx.getUserInfo已经快要废弃了嘛 , 怎么能不通过按钮来直接获取到用户信息呢
我现在是点击允许授权后触发,先拿到e.detail,然后再拿到code去换 ,但是我看文档中,之前的wx.getUserInfo是必须是要先login,wx.getUserInfo才能拿到私密信息的,有点懵.....
你点击按钮,肯定就授权了,授权后,wx.getUserInfo就可以用了,至于是不是废弃不晓得,不过准确的说,是不弹窗了,而你不需要wx.getUserInfo弹窗,因为点击动作恰恰已经调起了授权窗,这样使用虽然不符合官方初衷,但官方初衷就是个坑https://developers.weixin.qq.com/community/develop/doc/0006026b3c83c0e244573a0025bc08
就是说还是最简单的login+wx.getUserInfo,只不过利用了一次登录按钮弹出的授权窗而已,而不使用e.detail里的数据