小程序获取手机号
前言
- 小程序通过 wx.login 获取 code(用户登录凭证,有效期五分钟,使用一次后实效)
- 服务端拿到 code,调用auth.code2Session,获取用户的 openid (用户在当前应用的唯一标识)、session_key (会话秘钥是对用户数据进行 加密签名 的秘钥,在获取用户信息时会用到) 等信息。为了安全,服务器不应该把会话秘钥下发到小程序,也不应该对外提供这个秘钥
- 通过获取到的 openid,session_key 以及用户的其他加密信息通过 服务端获取开放数据(下面有下载地址) 完成获取手机号
获取用户信息
1.用户授权后,小程序通过 wx.getUserInfo(依据官方提示) 获取用户信息,敏感信息被加密
wx.login({
success(res) {
//获取code
if (res.code) {
wx.request({
url: 服务器端获取openid的地址,
header: {
'content-type': 'application/x-www-form-urlencoded',
},
method: 'POST',
data: {
code: res.code,
},
//获取openid
success(res) {
app.globalData.openid = res.data.data.openid;
if(res.data.code==1){
wx.getUserInfo({
success: function (res) {
wx.request({
url: '服务器端获取session_key的地址',
header: {
'content-type': 'application/x-www-form-urlencoded',
},
method: 'POST',
data: {
nickName: res.userInfo.nickName,
pic: res.userInfo.avatarUrl,
openid: app.globalData.openid,
},
success(e) {
app.globalData.openid = e.data.data.openid;
app.globalData.token = e.data.data.token;
app.globalData.uid = e.data.data.user_id;
wx.setStorage({
key: 'uid',
data: e.data.data.user_id
}),
wx.setStorage({
key: 'openid',
data: e.data.data.openid
})
wx.navigateTo({
url: '执行之后跳转的地址',
})
}
})
}
})
}else{
console.log("登录失败")
}
}
})
}
},
})
2.把加密信息窜给服务端,,使用在登录时获取的 session_key 解密数据,可依据官方:服务端获取开放数据
3.下载好之后通过调用 decryptData 方法以及用户信息就可以获取到时候手机号了,这里需要你的appid
public function getUserMobile($appid){
$post = Request::post();
//获取手机凭证
$data['openid'] = $post['openid'];
$data['session_key'] = $post['session_key'];
$result = $this->decryptData($post['encryptedData'],$post['iv'],$data,$appid,$data['session_key']);
if ($result == 0) {
return [code=>0,mag=>'成功',data=>$result]
}
return [code=>-1,mag=>'失败']
}
到这里就可以完成了,之后你就可以加入自己的需求,觉得还行的下方扣个1 谢谢 .欢迎关注
本人也是菜鸟,希望也可帮到小伙伴们,有任何问题或者不再清楚的 欢迎留言!!