在开发小程序中,经常遇到获取用户手机号,所以在此记录一个获取用户手机号的例子,方便日后使用
获取手机号,需要提前获取用户的sessionKey。因为获取到手机是加密的需要后端解密手机号,就需要微信官方提供类来解密,这里后端使用的PHP。
下载地址及下载位置
地址:微信手机号码解密后端文件地址
下载后选择对应的后端
前端
页面中的按钮需要特殊的加上open-type='getPhoneNumber'
,完整按钮如下
<button wx:else class="tel_btn" size="mini" open-type='getPhoneNumber' bindgetphonenumber="getPhoneNumber">获取手机号</button>
从上代码中的bindgetphonenumber="getPhoneNumber"
可以看到,是需要一个getPhoneNumber函数,代码如下
var requesurl = "/wxapp/kq.php";getPhoneNumber (e) {var that =this;wx.showLoading({title: '加载中',});if(e.detail.errMsg == "getPhoneNumber:ok"){// console.log(that.data.sessionKey); //手机号需要sessionKeywx.request({url: requesurl+'?action=wxtel',method: "post",header: {'content-type':'application/x-www-form-urlencoded'},dataType: 'json',responseType: 'text',data: {encryptedData: e.detail.encryptedData,iv: e.detail.iv,sessionKey: that.data.sessionKey,uid: "",},success: function (res) {console.log(res.data.data.wxteldata.phoneNumber);that.setData({wxtel:res.data.data.wxteldata.phoneNumber,usertel:res.data.data.wxteldata.phoneNumber});// console.log(that.data.wxtel);wx.hideLoading();}})}else{wx.showToast({title: '获取失败',icon: 'none',duration: 2000})}},
后端
include_once "wxphp/wxBizDataCrypt.php"; //首先引入从微信官网下载好的文件if($action === 'wxtel'){$encryptedData = $_POST['encryptedData'];$iv = $_POST['iv'];$sessionKey = $_POST['sessionKey'];$wxteldata = "";$pc = new WXBizDataCrypt($AppId, $sessionKey); //调用微信官方类$errCode = $pc->decryptData($encryptedData, $iv, $wxteldata); //调用微信官方函数if ($errCode == 0) {echoResult(1, '获取成功', array("wxteldata"=>json_decode($wxteldata,true)), 1);// print($wxteldata . "\n");} else {echoResult(0, '获取失败', array(), 1);// print($errCode . "\n");}}