微信小程序授权登录报错

2021-02-25 10:13发布

[图]

5条回答
20200921文 - 做更棒的自己!
2楼 · 2021-02-25 10:16

从你的描述来看,微信小程序的授权失败了,首先可能是网速比较差导致的,用户可以检查一下联网情况,然后再重新授权一下,看能不能解决问题。
若依旧不能解决问题的话,可以联系微信客服咨询一下

不吃鱼的猫
3楼 · 2021-02-25 10:30

仔细检查看看是否代码写错或者返回方式不对

樱田妮妮NiNi
4楼 · 2021-02-25 11:00

1、获取code和userinfo顺序反了,看下图

意思就是要先获得code,截一段我的(是好的)

如果是有概率的问题,这样应该就没有问题了

2、获取的加密数据encrypted_data或iv在服务端不是最新的,比如写死了,这个在服务端调试一下就能检查出来

3、PHP环境没有开启openssl,我的就是这个问题,我用php7.1一直出不来,后来偶尔切换了一次7.0马上就可以了;


我想吃肉
5楼 · 2021-02-25 18:27

源码:

1、wxml

{{canIUse && Is_true}}">

open-type="getUserInfo"bindgetuserinfo="bindGetUserInfo">

2、js

// pages/login/login.js

var app = getApp();

Page({

  /**

   * 页面的初始数据

   */

  data: {

    canIUse: wx.canIUse('button.open-type.getUserInfo'),//判断当前版本是否可用小程序的API,回调,参数,组件等功能

    userInfo: {},

    user_device_model: '', //设备名称

    user_device_screen_whith: '', //屏幕宽

    user_device_screen_height: '', //屏幕高

    user_device_NetType: '', //设备网络

    user_device_Language: '', //用户设备语言

    user_device_platform: '', //设备型号

    Is_true: false,//登录按钮是否显示

  },

  /**

   * 生命周期函数--监听页面加载

   */

  onLoad: function (options) {

    wx.showLoading({

      title: '请稍后',

    })

    var that = this;

    // 获取用户当前位置,返回用户的授权结果true/false,查看是否授权

    wx.getSetting({

      success: function (res) {

       /*

图片

        */

       //没有user_no,让用户重新授权

        if (wx.getStorageSync('user_no') == '') {

          res.authSetting['scope.userInfo'] = false;

        }

    //res.authSetting['scope.userInfo']=true,已授权过

        if (res.authSetting['scope.userInfo']) {

          //调用 getUserInfo 获取用户信息(此操作需要先授权,才能调用成功)

          wx.getUserInfo({

            lang: 'zh_CN',

            success: function (res) {

                  //缓存信息,并返回到指定页面

                 wx.setStorageSync('userInfo', res.userInfo);

                  var storage_sync_url = wx.getStorageSync('url');

                  if (storage_sync_url != '') {

                    wx.reLaunch({

                      url: '/' + storage_sync_url,

                    })

                  } else {

                    wx.reLaunch({

                      url: "/pages/index/index",

                    })

                  }

            }

          })

        } else {//显示登录按钮,执行授权

          wx.hideLoading();

          that.setData({

            Is_true: true,

          })

        }

      }

    })

    //获取网络

    wx.getNetworkType({

      success: function (res) {

        that.setData({

          user_device_NetType: res.networkType,

        })

      },

    })

    //获取手机型号

    wx.getSystemInfo({

      success: function (res) {

        that.setData({

          // user_device_model: res.model,

          user_device_model: res.brand,

          user_device_screen_whith: res.screenWidth,

          user_device_screen_height: res.screenHeight,

          user_device_Language: res.language,

          user_device_platform: res.platform

        })

      },

    })

  },


 //修改用户型号信息

  UserDeviceUpdate: function (user_no) {

    var that = this;

    wx.request({

      url: app.url + "/user/Login/UserDeviceUpdate.php", 

      data: {

        "user_no": user_no,

        "user_device_model": that.data.user_device_model,

        "user_device_screen_whith": that.data.user_device_screen_whith,

        "user_device_screen_height": that.data.user_device_screen_height,

        "user_device_NetType": that.data.user_device_NetType,

        "user_device_Language": that.data.user_device_Language,

        "user_device_type": that.data.user_device_platform

      },

      header: {

        'content-type': 'application/x-www-form-urlencoded'

      },

      method: 'POST',

      success: function (res) { },

      fail: function (res) { },

      complete: function (res) { },

    })

  },

//点击登录按钮,弹出授权界面

bindGetUserInfo: function (event) {

    var that = this;

    //点击拒绝

    if (event.detail.errMsg == 'getUserInfo:fail auth deny') {

      wx.showModal({

        showCancel: false,

        title: '警告',

        content: '您点击了拒绝授权,将无法正常使用小程序的功能体验。请点击确认授权,或者删除小程序重新进入。',

        success: function (res) {

          if (res.confirm) {

            wx.redirectTo({

              url: 'login',

            })

          }

        }

      })

    } else {//点击允许

      wx.showLoading({

        title: '加载中',

      })

      wx.setStorageSync('userInfo', event.detail.userInfo)

      //使用

      wx.getSetting({

        success: res => {

          if (res.authSetting['scope.userInfo']) {

            // 已经授权,调用登录结果获取登录凭证code,通过凭证换取用户登录信息

            wx.login({

              success: function (res) {

图片

              var code = res.code; //登录凭证

                if (code) {

                  //2、调用获取用户信息接口,发起网络请求

                  wx.getUserInfo({

                    lang: 'zh_CN',

                    success: function (res) {

                      //3.请求自己的服务器,解密用户信息 获取unionId等加密信息

                      wx.request({

                        url: app.url + "/user/Login/login.php", //自己的服务接口地址

                        method: 'post',

                        header: {

                          'content-type': 'application/x-www-form-urlencoded'

                        },

                        data: {

                          encryptedData: res.encryptedData,

                          iv: res.iv,

                          code: code

                        },

                        success: function (data) {

                          //4.解密成功后 获取自己服务器返回的结果

                          if (data.statusCode == 200) {

                            wx.setStorageSync('openid', data.data.openId) //缓存openID

                            wx.request({

                              url: app.url + "/user/Login/user.php",

                              method: 'POST',

                              header: {

                                'content-type': 'application/x-www-form-urlencoded'

                              },

                              data: {

                                "nickname": data.data.nickName,

                                "gender": data.data.gender,

                                "city": data.data.city,

                                "province": data.data.province,

                                "openid": data.data.openId,

                                "pic": data.data.avatarUrl,

                                "unionid": data.data.unionId,

                              },

                              success: function (res) {

                                that.UserDeviceUpdate(res.data);

                                wx.setStorageSync('user_no', res.data) //缓存user_no

                                var storage_sync_url = wx.getStorageSync('url');

                                if (storage_sync_url != '') {

                                  wx.reLaunch({

                                    url: '/' + storage_sync_url,

                                  })

                                } else {

                                  wx.reLaunch({

                                    url: "/pages/index/index",

                                  })

                                }

                              },

                              fail: function () { }

                            })

                          } else { console.log('解密失败') }

                        },

                        fail: function () { console.log('系统错误') }

                      })

                    },

                    fail: function () {console.log('获取用户信息失败') }

                  })

                } else { console.log('获取用户登录态失败!' + r.errMsg) }

              },

              fail: function () { console.log('登陆失败') }

            })

          } else { console.log('获取用户信息失败') }

        }

      })

    }

  },

})



相关问题推荐

  • 回答 120

    相对前几年来说,要高上不少了,毕竟入行的人也是越来越多了,基础的工作对应想要参与的人群基数越来越大,但是对于高端人才的需求还是很多,人才还是相对稀缺性的。所以,想要学web或者其他技术也一样,别等,别观望。web前端就业方向特别多包括web前端开发...

  • 回答 25

    相对定位和绝对定位是定位的两种表现形式,区别如下:一、主体不同1、相对定位:是设置为相对定位的元素框会偏移某个距离。2、绝对定位:absolute 脱离文档流,通过 top,bottom,left,right 定位。二、特点不同1、相对定位:在使用相对定位时,无论是否进行移...

  • 抓包是什么意思?2020-04-01 17:36
    回答 7
    已采纳

    抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。抓包可以通过抓包工具来查看网络数据包内容。通过对抓获的数据包进行分析,可以得到有用的信息。目前流行的...

  • 回答 89

    常用的前端框架有Bootstrap框架、React框架、Vue框架、Angular框架、Foundation框架等等

  • 回答 65
    已采纳

    前端是目的就业前景非常不错的一个计算机技术,但是自学的话还是有一定难度的,网络上自学是碎片化的,同时互联网技术跟新换代快,自己的话比较吃力也学习不到最新的技术。

  • SSR 是什么意思?2020-03-20 18:56
    回答 6

    SSR就是一台服务器,可以利用 SSR 在远程的服务器上配置 SSR,使其能够成为 SSR 节点,这样本地电脑或者其它设备利用 SSR 节点实现 VPN 或者远程上网及游戏加速等方面。ShadowsocksR(简称 SSR)是 Shadowsocks 分支,在 Shadowsocks 的基础上增加了一些数据...

  • 回答 11

    1、代码判断xAxis: {type: 'time',splitLine: {show: false},interval: 3600, // 设置x轴时间间隔axisLabel: {formatter: function(value, index) {return liangTools.unix2hm(value)}}},首先要把xAxis 显示类型设置成time,然后设置对应X轴......

  • 回答 52
    已采纳

    计算机培训方向比较多,建议找适合自己的方向选择培训编程类:JAVA、WEB、Python、C/C++、C#等测试类:软件测试运维类:云计算、网络安全设计类:UI设计、3D建模等

  • 回答 8

    HTML5 + CSS + JavaScript 开发 跨平台重用代码 

  • 回答 4

    采用rem单位自动响应,并提供独有栅格化系统快速定义宽高、边距节省css代码量,同时总结各大型移动端网页,提供一套ui颜色搭配规范,尺寸规范,字体规范等。

  • 回答 10

    iView UI、ioni、SUI

  • 回答 6

     jQTouch 

  • 回答 4

    如果只是普通的移动端用vue react 或者dva 如果是要编译成小程序什么的或者混生 就用uni-app(对应vue语法)taro(对应react) 或者纯原生 这个没有限制的,自己怎么舒服怎么来

  • 回答 4

    因为可以运用在网页和小程序的开饭中,而且开源,用着便宜,企业都很喜欢

  • 回答 10

    一、Visual Studio Code下载地址:https://code.visualstudio.com/微软在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。Visual Stud...

  • 回答 9

    jQuery自带淡入淡出效果 https://www.w3school.com.cn/jquery/jquery_fade.asp 看看这个 

没有解决我的问题,去提问