最近,微信小程序发布了新的版本,是关于用户信息的问题,
2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与获取用户个人信息(头像、昵称、性别与地区),
将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息),
获取加密后的openID与unionID数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。
这就需要我们之前的代码进行升级适配。
小程序登录、用户信息相关接口调整说明
更新方法: 在WXML内,使用bindtap="getUserProfile"这个方法,
官方api直接给到了我们调用接口的方法,如下:
《getUserProfile接口文档》
<script>
Page({
data: {
userInfo: {},
hasUserInfo: false,
canIUseGetUserProfile: false,
},
onLoad() {
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
})
}
},
getUserProfile(e) {
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
},
getUserInfo(e) {
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
})
</script>
但是我们在实际应用的时候,一般是调用完微信的登陆接口之后,再进行获取用户的信息。
对比之前获取的方式,之前我们需要获取敏感信息的话,需要获取 Vi 和 encryptedData的值,来
传送给后端,再进行返回,获取用户的openId和unionId。
注意!注意!注意!注意!
新的api方法已经不需要上述的操作的,
调用微信的登陆接口之后,获取res.code之后,使用app.postAjax直接可以给到后端来换取openId和unionId。
wx.login接口文档
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
另外,我这里尝试了新的getUserProfile的方法,发现,wx.login可以在wx.getUserProfile调用,但是wx.getUserProfile无法在wx.login内调用;
如下所示:
<script>
wx.getUserProfile({
success: (res) => {
that.setData({
userName: res.userInfo.nickName, // 用户昵称
userGender: res.userInfo.gender, // 用户性别
})
wx.login({
success: res =>{
let code = res.code //这里获取的就是登陆的code,可以传送给后端来换取openid和unionid
let data = {} //请求数据
let methods = "GET"// 请求方式
app.postAjax(""+ code, data, methods).then( res=> { // 具体的换取方法请参考微信官方文档以下路径
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
console.log(res) //获取后端传来的值。
})
}
})
}
})
</script>
以上就是对于2021年4月13日后发布的小程序新版本,如何获取用户信息的方法。