uniapp微信小程序获取用户手机号uniCloud云开发版

开发微信小程序,很多时候需要获取用户的手机号,这样方便平台更好的为用户服务,但是微信小程序不允许开发者直接获取用户的手机号,需要用户手动授权才能获取手机号,且需要配合后端进行解密才能获得完整的手机号,这里的前端采用的是uniapp开发,后端采用的是uniCloud,下面就给大家展示一下实现代码。

一、给button按钮添加open-type属性

javascript 复制代码
<view class="layout">		
	<view class="tel">获取手机号示例</view>
	<button @getphonenumber="getPhoneNumber" open-type="getPhoneNumber" type="primary">获取手机号</button>
</view>

如上所示,需要给button按钮,设置open-type="getPhoneNumber"属性,并且设置事件@getphonenumber="getPhoneNumber"

javascript 复制代码
//获取手机号
const getPhoneNumber = (e)=>{	
	console.log(e);
}

点击"获取手机号"按钮,会有授权弹窗,执行getPhoneNumber 该方法,不会直接获取到真实的手机号,而且获取到加密的数据信息,如下图所示。

那么如何才能获取用户授权后,真实的手机号码那,需要看一下官方的文档,getPhoneNumber文档地址,文档中可以直接使用https调用获取,但是需要用到appid和secret,如果在前端展示了自己的秘钥这样是不安全的,因为发送网络请求或者查看源码都会泄露秘钥的,最好在服务端执行,只需要将前端获取的code传给后端执行即可,代码如下:

javascript 复制代码
//获取云对象
const cloudObj = uniCloud.importObject("cloud-service");

const getPhoneNumber = async(e)=>{
	let obj = {
		code:e.detail.code,
		encryptedData: e.detail.encryptedData,
		iv: e.detail.iv
	}
	//调用云对象的phone方法
	let res = await cloudObj.phone(obj);
	console.log(res);
}

二、unicloud云端获取code调用查询手机号接口

看一下获取手机号的必填入参,已知code是从客户端通过getPhoneNumber方法获取到的,并且从传参给了云对象,但是access_token没有,需要你自己在后端获取凭证,凭证有效期5分钟,可以存入缓存,如果业务比较单一可以不存储,每次执行一次也可以,这种仅限于业务非常单一的形式,获取凭证的接口地址:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html

javascript 复制代码
//unicloud云对象内的phone方法,params是客户端传来的值
async phone(params){
	//调用微信凭证接口,获取access_token,传入appid和secret
	//在这里可以判断是否已经有access_token缓存,如果没有再去调用凭证接口,避免重复调用
	let {data:{access_token}} = await uniCloud.request({
		url:"https://api.weixin.qq.com/cgi-bin/token",
		data:{
			grant_type:"client_credential",
			appid:"wxb3f72f0c8b700000",
			secret:"88826c257f4d0dc7e77f4b14911000000"
		}
	})
	let res = await uniCloud.request({
		url:"https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="+access_token,
		method:"POST",
		data:{
			code:params.code
		}
	})
	return res;
}

通过以上方法,就可以获取到phone_info就是我们需要的真实手机号了,后端可以将手机号返回给客户端,也可以直接作为登录注册使用。

相关推荐
JavaDog程序狗1 天前
【指南】uni-app微信小程序多环境CI-CD完全指南
ci/cd·uni-app·jenkins
PedroQue991 天前
uni-router v2.1.0 升级:导航守卫全面支持返回值模式
前端·uni-app
weixin_BYSJ19871 天前
springboot技能与工具共享小程序---附源码29657
java·javascript·spring boot·python·小程序·django·php
weixin_BYSJ19871 天前
flask民族服饰饰品商城小程序---附源码37399
java·javascript·spring boot·python·小程序·django·php
show4331 天前
2026小程序工具生态技术趋势:轻量化免费替代桌面软件的路径解析
小程序
码云之上2 天前
小程序 iOS 多输入框焦点乱序脱坑记
ios·微信小程序·taro
ON.LIN2 天前
云边去水印小程序详细搭建教程(附源码)
小程序
2501_915909062 天前
iOS test 测试怎么做?功能、性能、兼容、稳定与安全五类测试指南
android·ios·小程序·https·uni-app·iphone·webview
deng1hao2 天前
2026小微企业企业邮箱选择指南:低成本高性价比方案
网络·科技·小程序
Ai-_Man2 天前
从AI公式到可编辑文档:MathType格式转换技术分析教程
人工智能·ai·小程序