微信小程序获取用户的openid
我们在开发微信小程序的过程中会经常遇到需要获取到用户详细个人信息的数据微信小程序官方提供的内置方法只能获取到用户头像,昵称…一类的信息,获取不到openid一类的数据。这些数据都是通过微信小程序加密之后的存放在iv与encryptedData中,我们需要对iv进行解密才能获取到用户个人的openid一类的隐私信息,而iv与encryptedData需要通过后台解密进行获取
1.wx.login()方法先获取到验证用户信息的code,
// 首先获取到获取用户信息的code,微信小程序官方说明code码的有效期只有5-10分钟左右
wx.login({
success: res => {
// 获取到code后,发送 res.code 到后台换取 openId
let code = res.code
that.codeGetOpenid(code)
}
})
2.将code发送到后台,由后台给我们返回token等的信息
// 使用code换取openid
codeGetOpenid(code) {
let that = this;
wx.request({
// 请求地址
url: 'https://www.baidu.com',//这里写公司内服务器的域名
// 将code发送到后台
data: {
code
},
// 请求方式
method: "POST",
// 请求头
header: {
'content-type': 'application/x-www-form-urlencoded' // 默认值
},
// 成功回调
success(res) {
if (res.data.code) {
let ret = res.data.object
// 通过openid请求数据,这里的openid不是用户的openid,而是后台返回给我们的openid
that.authSetting(ret.openId)
}
}
})
}
3.获取用户加密数据传递给后台进行解密
// An highlighted block
// 获取用户加密数据
authSetting(openid) {
let that = this;
wx.getSetting({
success(res) {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称
wx.getUserInfo({
success(userinfo) {
// 通过openid请求用户详细数据
that.getuserData(userinfo, openid)
}
})
}
}
})
}
4.将IV与openId(后台返的)以及encryptedData传到后台,后台进IV和encryptedData进行解密处理,返回用户详细数据
// 获取用户详细信息
getuserData(userinfo, id) {
let that = this
wx.request({
url: 'https://www.baidu.com',//这里填写服务端的接口
//将数据发送到后
data: {
iv: userinfo.iv,
openId: id,
encryptedData: userinfo.encryptedData
},
method: "POST",
header: {
'content-type': 'application/x-www-form-urlencoded' // 默认值
},
success(resp) {
if (resp.data.code) {
//这里的ret就是用户解密后的信息
let ret = resp.data.object
}
}
})
}
这样下来就能成功的获取到用户的详细信息的了,虽然有点麻烦,但回头想想这样设计也对,毕竟用户的个人信息不能随便获取,必须经用户授权才能获取到。
版权声明:文章原创,转载请标明出处。谢谢https://blog.csdn.net/qq_40146638/article/details/87287608