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就是我们需要的真实手机号了,后端可以将手机号返回给客户端,也可以直接作为登录注册使用。

相关推荐
李纲明11 小时前
微信小程序 getSystemInfo 提示已废弃、屏幕高度算错胶囊还对不齐?getWindowInfo 和 getDeviceInfo 怎么接才稳
javascript·微信小程序·小程序·小程序开发·devdiy
dreams_dream14 小时前
微信小程序-使用npm包
微信小程序·小程序·npm
L1mbo15 小时前
Lite模式 缓解微信开发者工具卡顿,附 uni-app 实践方案
前端·微信小程序
码间留白17 小时前
六轮真机实验后,我把鸿蒙直播推流的 UI 全逼成了原生——uni-app 适配 HarmonyOS NEXT 完整复盘
uni-app·鸿蒙·harmonyos next·直播推流·arkts/arkui
caoliaoerweima17 小时前
草料二维码小程序上线活码编辑器:手机上也能编辑活码了
智能手机·小程序·编辑器·草料二维码
大数据技术派1 天前
等了一周,我的摸鱼小程序终于微信认证通过了
微信小程序
wuxianda10302 天前
2026 苹果审核 4.3 (a) 被拒全解析|Guideline 4.3a spam 马甲包拒审原因 + 避坑方案
flutter·uni-app·苹果上架
CSharp精选营2 天前
记一次家庭物品管理的折腾:从“收纳”到“可检索”
微信小程序·aicoding·屋册有序·物品收纳管理·家庭收纳管理工具
dreams_dream3 天前
微信小程序:页面事件-上拉触底
微信小程序·小程序
鹏多多4 天前
AI 到底能不能独立做个产品?我拿一个小程序验证了
前端·微信小程序·ai编程