小程序获取用户手机号存在各种坑,加上小程序各种文档的不齐,使得开发人员踩下各种坑,本次我将实现成功的方法无私的奉献给大家,先来上一张成功之后的图片
这是微信小程序getPhoneNumber发起的一次请求
调用之后后端返回的数据如下
##以下是具体步骤
1.首先我这边是示例代码,具体文件可以根据项目进行选择文件
在index.wxml代码如下
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> 获取手机号码</button>
index.js代码如下:
//index.js
//获取应用实例
const app = getApp()
Page({
getPhoneNumber: function (e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
} ,
getPhoneNumber: function (e) {
console.log(e.detail.iv);
console.log(e.detail.encryptedData);
wx.login({
success: res => {
console.log(res.code);
wx.request({
url: '接口地址',
data: {
'encryptedData': encodeURI(e.detail.encryptedData),
'iv': encodeURI(e.detail.iv),
'code': encodeURI(res.code)
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/json'
}, // 设置请求的 header
success: function (res) {
console.log(res);
},
fail: function (err) {
console.log(err);
}
})
}
})
}
})
【注意】:data里面必须加上endeURL,否则后端会解析错误(-41003: aes 解密失败)
其他两个文件可以为空就行
后端代码如下(本人使用TP5框架,其他框架需自行修改对应的语法问题)
【注意】:需要把先下载信息解密文件,链接
然后提取出PHP文件夹,复制到vendor目录下面
/**
* @Author : kiven
* @Description:小程序getphonenumber获取手机号码接口
* @LastModify : kiven
*/
public function getPhone()
{
//开发者使用登陆凭证 code 获取 session_key 和 openid
$APPID = $this->app_id;//自己配置
$AppSecret = $this->secret;//自己配置
$code = input('code');
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $APPID . "&secret=" . $AppSecret . "&js_code=" . $code . "&grant_type=authorization_code";
$arr = $this->vget($url); // 一个使用curl实现的get方法请求
$arr = json_decode($arr, true);
$session_key = $arr['session_key'];
$openid = $arr['openid'];
Vendor("PHP.wxBizDataCrypt"); //加载解密文件,在官方有下载
$pc = new \WXBizDataCrypt($APPID, $session_key);
$iv = input('iv');
$encryptedData = input('encryptedData');
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
//print($data . "\n");
//dump(json_decode($data));
$phone = json_decode($data,true);
echo $phone['purePhoneNumber'];
die;
} else {
echo $errCode;
die;
}
}
/**
* @Author : kiven
* @Description:curl模拟请求方法
* @LastModify : kiven
* @param $url
* @return bool|string
*/
public function vget($url){
$info=curl_init();
curl_setopt($info,CURLOPT_RETURNTRANSFER,true);
curl_setopt($info,CURLOPT_HEADER,0);
curl_setopt($info,CURLOPT_NOBODY,0);
curl_setopt($info,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($info,CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($info,CURLOPT_URL,$url);
$output= curl_exec($info);
curl_close($info);
return $output;
}
以上就是全部内容,如果遇到问题可以在下面留言