在微信小程序开发的过程中,有时候我们需要获取用户绑定在微信上的的手机号码,比如,有时候我们需要让用户在转发页面之前将自己的电话号码植入到文章内部某特定位置,这对于刺激用户自主传播小程序有很大帮助。那么下面我们来看看该怎样开发这个功能。下面直接上代码,注释很详细。

js
//获取用户电话号码
getPhoneNumber: function (e) {
var self = this;
if (e.detail.errMsg == "getPhoneNumber:fail user deny") return; //用户允许授权
wx.showLoading();
var self = this;
//1. 调用登录接口获取临时登录code
wx.login({
success: function(res) {
//2. 获取登录code= res.code
if (res.code) {
//3. 发起网络请求,相当于jq的ajax
wx.request({
url: 'https://www.redren.net/functions/getOpenid/wwwatredrendotcom/getOpenid.php', //你服务器php文件地址,默认GET。小程序只支持https(虚拟地址,勿试) ,
data: {
code: res.code,
grant_type: 'authorization_code',
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/json'
},
success: function( res ){
//console.log( res.data.openid ) //为了自身应用安全,获取的openid和session_key不应该在网络上传输,所以不设置成功回调,可以服务器直接加密存数据库
if(res.statusCode==200){
//4. 解密
wx.request({
url: 'https://www.redren.net/functions/getPhoneNumber/wwwatredrendotcom/getPhoneNumber.php', //虚拟地址,勿试
data: {
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
session_key: res.data.session_key,
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/json'
}, //5. 设置请求的 header
success: function (response) {
wx.hideLoading()
//console.log(response.data.phoneNumber)
if (response.statusCode == 200 && response.data.phoneNumber == undefined) {
wx.showModal({
title: '提示',
content: '啊哦,因为某种神秘原因,电话号码没有变更成功,如果成功了,右下角推荐浮标将会自动消失。请再试一次吧。',
showCancel: false,//是否显示取消按钮
cancelText:"算了",//默认是“取消”
cancelColor:'skyblue',//取消文字的颜色
confirmText:"好的",//默认是“确定”
confirmColor: 'skyblue',//确定文字的颜色
success: function (res) {
if (res.cancel) {
//点击取消,默认隐藏弹框
} else {
//点击确定
}
},
fail: function (res) { },//接口调用失败的回调函数
complete: function (res) { },//接口调用结束的回调函数(调用成功、失败都会执行)
});
} else {
//6. 将得到的用户手机号码设置在当前页的data里
self.setData({
phoneNumber: response.data.phoneNumber,
});
}
},
fail: function (err) {
console.log(err);
}
})
}
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
});
},
getOpenid.php
<?php
/**
* 一段简单的代码
* 微信登录:获取调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid)
*/
$code =$_GET['code'];
$appid="wxd2gbd09fbcb81c0s";//小程序appId,这里需要改成你自己的
$secret="90ac70olp7s4p7s7bn901bn70d0998cb";// 小程序秘钥,这里需要改成你自己的
$api="https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code"; //调用官方接口
//封装方法:从接口中获取内容
function httpGet($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT,500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST , true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
$str = httpGet($api); //执行方法:从接口中获取内容(json格式)
echo $str;
?>
getPhoneNumber.php 目录下有四个文件,分别是 getPhoneNumber.php,errorCode.php, pkcs7Encoder.php,wxBizDataCrypt.php,其中只有 getPhoneNumber.php 需要我们自己编辑,其余三个都是腾讯提供的原始代码,不需要做调整,这三个文件我会打包提供下载,而getPhoneNumber.php我就贴在下方代码框中。
getPhoneNumber.php
<?php
include_once "wxBizDataCrypt.php";
/**
* sessionKey/encryptedData/iv参数均从url中获取,并赋给相应变量
*/
$appid = 'wxd2gbd09fbcb81c0s';//小程序appId,这里需要改成你自己的
$sessionKey = $_GET['session_key'];
$encryptedData=$_GET['encryptedData'];
$iv = $_GET['iv'];
$pc = new WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
print($data . "\n");
} else {
print($errCode . "\n");
}
?>
errorCode.php, pkcs7Encoder.php,wxBizDataCrypt.php 三个文件下载在此:
链接: https://pan.baidu.com/s/1l0fL86WIDs3IZ8mjCqBYPQ
提取码: 89ya
复制这段内容后打开百度网盘手机App,操作更方便哦。
微信小程序开发之路充满乐趣,欢迎扫描下方二维码加我微信与我探讨。
