小元
博客
详情文字在这里缓缓展开
静候你翻开这一页

小程序获取手机号(1)

微信小程序获取用户手机号,从获取code到解析获取手机号的完整路程。

小程序获取用户手机号


    前言:

       应甲方需求,要求访客通过临时密码登录时获取用户手机号,在小程序用户通过日志功能记录某些场景时能知道是谁上传的日志。


   基本流程:

       先在微信公众平台获取APPID(小程序ID) 和 AppSecret(密钥),通过Button按钮获取Code编码,把Code编码传递给后台或在前端本地进行解密。

       其次是解密,解密共两步,第一步调用微信官方接口,获取Token,第二步调用另一个官方接口,解析Code获得用户手机号。


   AppID和AppSecret:

       前往 微信公众平台 -> 开发管理,开发设置分类开发者ID处获取AppID和生成AppSecret

       ? 微信公众平台

       ? 需要注意的是,生成AppSecret时需要管理员扫码,生成成功后会弹窗告诉你密钥,这个时候一定一定一定要点击复制并及时保存下来,否则弹窗关闭后你就别想在找到它了,只能点击重置重新生成一个。

       界面截图:1716520521686.png


   获取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;

}


   前端解析:

       由于内容较多放在另一篇文章中了,链接在下方。

       ? 前端解析code获取手机号


   后端解析:

       后端如何解析,由于博主不擅长Java故再此处无法提供可被复制的代码,只能提供步骤。

       第一步获取令牌即(ACCESS_TOKEN):

           ? ACCESS_TOEKN官方文档说明

           ? 注意获取到的令牌是有时效限制的,两小时后就会失效,要缓存令牌,获取令牌每天是有频率限制的,超了当天就不能再次获取了。

令牌接口: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

渝ICP备2024031078号-1
本网站一切内容不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
如无意中侵犯了企业或个人的知识产权等,请及时通过电子邮件(1102905617@qq.com)告知我,本网站将会给予删除。
最新公告
😊访客你好,很高兴你的到来,本博客仍在建设中,还有些许功能尚在开发中,最后祝你在此能有所收获。
💥小元博客第三代自2025年9月上线以来,2026/08/09日迎来了它的第三次更新本次更新内容如下:
1. 文章详情页样式变更,由原来的弹窗改为单独的页面。
2. 使用Nuxt对项目进行了SEO优化,优化了搜索引擎的抓取和索引。
3. 对验签进行了优化,降低了请求被误触发拦截的概率。
4. 移动端也正在稳步推进中,在不久的将来会与大家见面。
5. 修复了首页黄历节日不显示的问题,以及其它bug的修复。