小程序获取手机号(1)
微信小程序获取用户手机号,从获取code到解析获取手机号的完整路程。
小程序获取用户手机号
前言:
应甲方需求,要求访客通过临时密码登录时获取用户手机号,在小程序用户通过日志功能记录某些场景时能知道是谁上传的日志。
基本流程:
先在微信公众平台获取APPID(小程序ID) 和 AppSecret(密钥),通过Button按钮获取Code编码,把Code编码传递给后台或在前端本地进行解密。
其次是解密,解密共两步,第一步调用微信官方接口,获取Token,第二步调用另一个官方接口,解析Code获得用户手机号。
AppID和AppSecret:
前往 微信公众平台 -> 开发管理,开发设置分类开发者ID处获取AppID和生成AppSecret。
? 微信公众平台
? 需要注意的是,生成AppSecret时需要管理员扫码,生成成功后会弹窗告诉你密钥,这个时候一定一定一定要点击复制并及时保存下来,否则弹窗关闭后你就别想在找到它了,只能点击重置重新生成一个。
界面截图:
获取Code:
在uniApp中使Button按钮,属性open-type=getPhoneNumber,并绑定getphonenumber事件,此时点击按钮便会弹出授权弹窗,用户确认后才能获取到Code。
? 注意:每个code时效为五分钟,过期既失效。
? 小程序文档
? uniAPP文档
<button type="default" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">获取手机号</button>decryptPhoneNumber(e) {
// 根据业务需求调整逻辑
let errMsg = null;
if (e.detail.errMsg.includes('fail user deny')) errMsg = "登录失败,您已拒绝获取信息!";
else if (!e.detail.code) errMsg = "登录失败,获取信息异常!";
if (errMsg) {
uni.showToast({
title: errMsg,
icon: "none"
});
return;
}
// 获取Code
const code = e.detail.code;
}前端解析:
由于内容较多放在另一篇文章中了,链接在下方。
后端解析:
后端如何解析,由于博主不擅长Java故再此处无法提供可被复制的代码,只能提供步骤。
第一步获取令牌即(ACCESS_TOKEN):
? 注意获取到的令牌是有时效限制的,两小时后就会失效,要缓存令牌,获取令牌每天是有频率限制的,超了当天就不能再次获取了。
令牌接口:https://api.weixin.qq.com/cgi-bin/token
请求方式:GET
接收三个参数:
grant_type: "client_credential"
appid: "填入之前获取的AppID"
secret: "填入之前获取的AppSecret"第二步解析Code:
? 官方文档
? 注意,每个Code时效为五分钟。
拿到Token后,在解析时记得做容错处理,调用该接口解析Code时可能会失败,失败原因大致分为两种,第一种是Code失效,每个Code只能用一次且时效为五分钟,五分钟后就会失效,第二种是Token失效,Token时效为两小时,如果有人调用了第一步获取Token的接口,之前获取的Token也会失效,所以需要做好容错处理。
解析接口:https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN
请求方式:POST
参数类型:JSON
接收两个参数:
code:前端通过Button获取的Code,该参数放在body内
access_token:第一步获取到的令牌,该参数放在query处
具体Java实现步骤可参考该CSDN文章: JAVA后端解析参考该CSDN
