2021年4月13日后发布的小程序新版本,最新微信小程序授权获取用户信息(getUserInfo(淘汰) 替换 getUserProfile)后总结

今天花了一天时间,踩坑无数,特此总结

官方宣布2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与< button open-type=“getUserInfo” />获取用户个人信息,以前的代码,获得的用户信息,均为匿名信息。用 “微信用户"代替了用户的呢称,看着用着都难受呀。

   4月13日后发布的新版本小程序,开发者调用wx.getUserInfo或< button open-type=“getUserInfo”/>将不再弹出弹窗,直接返回匿名的用户个人信息,获取加密后的openID、unionID数据的能力不做调整。

    如仍使用原来方式将会获得红色区域的匿名信息,即一切流程会非常顺畅,使用wx.getUserInfo获得也很顺畅,但是获得都是匿名信息
    若开发者调用wx.authorize接口请求scope.userInfo授权,用户侧不会触发授权弹框,直接返回授权成功。即wx.authorize 只会获得假性的授权成功。
    若开发者调用wx.getSetting接口请求用户的授权状态,会直接读取到scope.userInfo为true

即wx.getSetting去判断是否已授权获取用户信息也是假性的。
wx.login接口获取的登录凭证可在后台直接换取unionID,openid。开发者需要在获取用户的头像昵称信息,可调用wx.getUserProfile接口,开发者每次通过该接口均需用户确认。

        wx.getUserProfile接口调用,花的时间很长,一开始,

wx.getUserProfile({
    desc:'获取你的昵称、头像、地区及性别',
    success: (res) => {
        console.log('获取用户信息成功', res)
        //获取用户信息的各类操作
    }
})

没任何反应,最后加上fail:部分,问题出现了

wx.getUserProfile({
    desc:'获取你的昵称、头像、地区及性别',
    success: (res) => {
        console.log('获取用户信息成功', res)
        //获取用户信息的各类操作
    },
    fail: (res) =>{
        console.log('获取用户信息失败',res)
        wx.showToast({
            title: '信息授权失败~',
            duration: 1000,
            icon: 'error',
            mask: true
        })
    }
})

PC端小程序报错wx.getUserProfile is not a function,值得注意的是新的接口wx.getUserProfile,只能使用catchtap或者bindtap进行调用(可以在wx.showmodel中使用),并不能再onload、onshow等位置直接调用,并且返回参数有所改变
调整 按钮类型后此问题解决

但又出现了新的问题:

问题1. fail can only be invoked by user TAP gesture.
需要用户手动确认才能通过验证:

uni.showModal({
	title: '温馨提示',
	content: '亲,授权微信登录后才能正常使用小程序功能',
	success(res) {
  }
}

此问题改来改去,就是一直出这个问题,最后换了个号,试一下,同样的代码,可以用,很时奇怪,查了很多原因,网上有的说版本,有的设置,等试了很多,没用,最后发现,试过其它号,一行行代码对过后,发现,都一样,结果不一样,这才想起重启电脑,可以了

getUserProfile(e) {
    console.log(app.ggdata.userbzid)

    if (app.ggdata.userbzid > 0) {
      // api.myshowm('提示', '您已授权,无需重复操作,如没显示,可退出再重新进入即可。', '确定' ,showCancel: false);

      wx.showModal({
        title: '提示',

        content: '您已授权,无需重复操作,如没显示,可退出再重新进入即可',

        showCancel: false

      })

      return

    }

    else

    {
      wx.getUserProfile({
        lang:'zh_CN',

        desc: '获取你的昵称、头像、地区及性别',

        success: res => {
          console.log(res);

          console.log(1);

          wx.login({
            success: function (loginres) {
              console.log(loginres)              

              // 下面开始调用注册接口

              wx.request({
                url: api.apiPath.apireg,

                data: { 

                  code: loginres.code, 

                  encrypted_data: res.encryptedData, 

                  iv: res.iv 

                }, // 设置请求的 参数

                header: {
                  "Content-Type": "json"

                },

                success: (res) => {
                  wx.hideLoading();

                  console.log('注册成功')

                }

              })

            }

          })

        },

        fail: res => {
          console.log(2);

          console.log(res)

          //拒绝授权

          wx.showToast({
            title: '您拒绝了请求,不能正常使用小程序',

            icon: 'error',

            duration: 2000

          });

          return;

        }

      });

    }

  },

问题2. fail desc length does not meet the requirements
接口字段有调整:desc

uni.getUserProfile({
	desc: '获取你的昵称、头像、地区及性别',
	success: res => {
		console.log(res);
		console.log(1);
	}
}

特记:wx.login >>> code >>> 请求接口换取openid >>> openid >>> 自定义请求态 >>> uid
只是获取用户信息的地方发生改变了,获取用户信息必须通过wx.getUserProfile获取

还有一种方式就是将调试基础库调到2.14版本

 "libVersion": "2.14",

posted @ 2021-12-05 10:47  King-DA  阅读(363)  评论(0编辑  收藏  举报