隔了大概一年多再次写小程序,发现api中有些已经改了,今天总结一些微信获取登陆授权的步骤。因为现在授权必须由用户主动触发,所以需要button按钮
第一步:在wxml写button按钮
<button bindgetuserinfo="login" open-type="getUserInfo">登陆</button>
第二步:js文件中首先调用wx.getsetting()获取登陆授权,然后调用wx.login()拿到code,把code传到后台换取openid和session_key。如果需要uid则需要调用wx.getUserInfo().拿到enc,iv。走后台接口把code,session_key,enc,iv全部返给后台就可以拿到uid了。
login() {
var that = this;
wx.getSetting({//用户登陆授权
success: res => {
console.log('开始获取uninid')
wx.login({//用户登陆获取code传给后台,拿到sessionlkey,和openid,
success: res => {
// console.log(res)
that.setData({
code: res.code
})
app.globalData.request.get({ code: res.code }, 'getSessionKey').then(res => {
console.log('login')
that.setData({
sessionk: res.data.session_key
})
console.log(that.data.sessionk)
wx.getUserInfo({//获取iv,enc
lang: "zh_CN",
success: res => {
app.globalData.request.get({//向后台发送参数拿到用户信息
code: that.data.code,
enc: res.encryptedData,
iv: res.iv,
session_key: that.data.sessionk
}, 'getUserData').then(res => {
console.log('发送成功')
console.log(res.data.data)
that.setData({
blocks:true
})
wx.setStorage({//用户信息存储到本地
key: 'userinfo',
data: res.data.data,
})
}, err => {
console.log(err)
})
// console.log('userinfo' + JSON.stringify(res))
}
})
}, err => {
console.log('发送失败')
})
}
})
}
})
},
上面就完成了,如果需要第二次判断登陆授权,我这里收藏了两种方法,第一个是将用户信息存储到本地,每次进入页面进行判断,第二种是判断getsetting中的 scope值是否为true,为true则是已经授过权。上面的request又进行了二次封装,如果有大佬看到错误希望能指正一下,感谢