PS:截止到目前为止,小程序通过获取session_key与encryptedData与iv进行解密获取手机号的方法已经不行了,只能通过点击按钮来实现获取微信用户的手机号,本文仅以PHP为例
JS代码:
getPhoneNumber(e){
var another = this
console.log(e.detail.code)
this.setData({
'phoneCode':e.detail.code
})
var openid = this.data.openid
console.log(openid)
wx.request({
url: 'XXXXXXXXXXX',//此处填写你服务器PHP文件的URL地址
method:'POST',
header:{
'content-type':'application/x-www-form-urlencoded'
},
data:{
'openid':this.data.openid,//此处openid为上一篇session_key解密时获取
'phoneCode':this.data.phoneCode
},
success(res){
console.log(res)
another.setData({
'phoneNumber':res.data.phoneNumber
})
console.log(another.data.phoneNumber)
},
})
}
PHP代码:
<?php
$appid = 'wx9c2877c657b56ed9';
$secret = '14999649ca329e1ef9cd43f77c072069';
//appid与secret在微信公众平台即可获取
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $secret;
$getToken = curl_init();
curl_setopt($getToken, CURLOPT_URL, $url);
curl_setopt($getToken, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($getToken, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($getToken, CURLOPT_HEADER, 0);
curl_setopt($getToken, CURLOPT_RETURNTRANSFER, 1);//此处若设置为0则为直接输出,设置为1则为将返回结果赋值给变量
curl_setopt($getToken, CURLOPT_CONNECTTIMEOUT, 10);
$resultData = curl_exec($getToken);
//echo $resultData;
$disposeData = json_decode($resultData);//此处将返回的结果转化为对象,若在后方加上true则将返回的数据转化为数组
$access_token = $disposeData->access_token;//此处选用将结果转化为对象,从对象中取值赋值给相关变量
//echo $access_token;
/**
* 分割线----------------------------------------------
* 上方代码为通过appid与secret获取access_token,即公众号小程序调用接口唯一凭证
*/
$openid = $_POST['openid'];
//echo $openid;
$phoneCode = $_POST['phoneCode'];//从小程序端传送过来的code是获取用户手机号所需要的参数之一
$code = array('code' => $phoneCode);//将从小程序端获取的数据转换为数组格式
$finalCode = json_encode($code);
$numberUrl = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=' . $access_token;
$getNumber = curl_init();
curl_setopt($getNumber, CURLOPT_URL, $numberUrl);
curl_setopt($getNumber, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($getNumber, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($getNumber, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($getNumber, CURLOPT_POST, 1);
curl_setopt($getNumber, CURLOPT_HEADER, 0);
curl_setopt($getNumber, CURLOPT_POSTFIELDS, $finalCode);
curl_setopt($getNumber, CURLOPT_CONNECTTIMEOUT, 10);
$resultData = curl_exec($getNumber);
curl_close($getNumber);
$disposeData = json_decode($resultData,true);
$phoneNumber = $disposeData['phone_info']['phoneNumber'];
$number = array('phoneNumber' => $phoneNumber);
$number = json_encode($number);
echo $number;
$dataHost = '127.0.0.1:3306';
$dataName = 'root';
$dataPass = 'root';
$dataBase = 'testin';
$connect = new mysqli($dataHost, $dataName, $dataPass, $dataBase);
$selectSQL = 'select * from in_database where phoneNumber = "'.$phoneNumber.'"';
$selectOpenid = 'select * from in_database where openid = "'.$openid.'"';
$newSql = 'update in_database set phoneNumber = "'.$phoneNumber.'" where openid = "'.$openid.'";';
/**
* 手机号插入数据库流程:
* 1.数据库是否成功链接,若成功连接进行下一步,若失败则抛出错误
* 2.查询该用户的openid是否存在与数据库中,若存在则进行下一步,若不存在则关闭数据库连接
* 3.查询数据库内是否存在这个手机号,若存在则不再插入,关闭数据库连接,如不存在则进入下一步
* 4.将该手机号配合openid插入数据库中,若成功则关闭连接,若失败则抛出错误
* 注:手机号绑定用户的openid的流程是:必须先授权登录再绑定手机号
*/
if(!($connect -> connect_error)){
$resultOpenid = $connect -> query($selectOpenid);
$openidNum = $resultOpenid -> num_rows;
if($openidNum == 1){
$resultPhone = $connect -> query($selectSQL);
$phoneResult = $resultPhone -> num_rows;
if($phoneResult == 0){
$resultFinal = $connect -> query($newSql);
echo $resultFinal;
if($resultFinal == 1){
echo '手机号绑定成功';
}else{
echo '手机号绑定失败';
}
}else{
echo '该手机号已经绑定过了,不需要再次绑定';
}
}else{
echo '先授权登陆之后再绑定手机号';
}
$connect -> close();
}else{
echo '连接数据库失败';
}
$connect -> close();
以上就是使用PHP配合小程序前端JS获取用户的手机号并存入数据库
该文章由CSDN用户:缱绻淡蓝海原创,因存在部分纰漏,因此文章会不定时进行更新
原文链接: https://blog.csdn.net/DLH_C/article/details/125450238