在开发小程序中,经常遇到获取用户手机号,所以在此记录一个获取用户手机号的例子,方便日后使用
获取手机号,需要提前获取用户的sessionKey。因为获取到手机是加密的需要后端解密手机号,就需要微信官方提供类来解密,这里后端使用的PHP。
下载地址及下载位置
地址:微信手机号码解密后端文件地址
下载后选择对应的后端
前端
页面中的按钮需要特殊的加上open-type='getPhoneNumber'
,完整按钮如下
<button wx:else class="tel_btn" size="mini" open-type='getPhoneNumber' bindgetphonenumber="getPhoneNumber">获取手机号</button>
从上代码中的bindgetphonenumber="getPhoneNumber"
可以看到,是需要一个getPhoneNumber函数,代码如下
var requesurl = "http://xxx.xxxxxxxxxx.com/wxapp/kq.php";
getPhoneNumber (e) {
var that =this;
wx.showLoading({
title: '加载中',
});
if(e.detail.errMsg == "getPhoneNumber:ok"){
// console.log(that.data.sessionKey); //手机号需要sessionKey
wx.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");
}
}