本篇文章给大家带来的内容是关于小程序如何获取手机号( thinkPHP3.2.3框架),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
namespace Home\Controller; use Think\Controller; class ApiController extends Controller { /** * error code 说明. *
- -41001: encodingAesKey 非法
- -41003: aes 解密失败
- -41004: 解密后得到的buffer非法
- -41005: base64加密失败
- -41016: base64解密失败
public $sessionKey ='';
// <a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>openId session-key 等
public function getopenId($value='')
{
$code = I('post.code');
$appid = self::$appid;
$secret = self::$secret;
$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='. $appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
$result = httpGet($url);
$res = json_decode($result);
// session(['sessionKey'=>$res,'expire'=>7200]);
$this->ajaxReturn($res);
}
// <a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="https://www.jb51.cc/tag/xiaochengxu/" target="_blank" class="keywords">小程序</a>手机号api 接口,对应下面<a href="https://www.jb51.cc/tag/xiaochengxu/" target="_blank" class="keywords">小程序</a> js
public function <a href="https://www.jb51.cc/tag/getPhoneNumber/" target="_blank" class="keywords">getPhoneNumber</a>($value='')
{
$encryptedData = I('get.encryptedData');
$iv = I('get.iv');
$this->sessionKey=I('get.session_key');
$res = $this->decryptData($encryptedData,$iv);
// $res = json_decode($res);
if($res->phoneNumber){
// $res->phoneNumbe 就是手机号可以 写入<a href="https://www.jb51.cc/tag/shujuku/" target="_blank" class="keywords">数据库</a>或者做其他操作
}
$this->ajaxReturn(['msg'=>$res,'status'=>'1']); //把手机号返回
}
// <a href="https://www.jb51.cc/tag/xiaochengxu/" target="_blank" class="keywords">小程序</a>解密
public function decryptData($encryptedData,$iv)
{
if (strlen($this->sessionKey) != 24) {
return self::$IllegalAesKey;
}
$aesKey=base64_decode($this->sessionKey);
if (strlen($iv) != 24) {
return self::$IllegalIv;
}
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result=openssl_decrypt( $aesCipher,"AES-128-CBC",$aesKey,1,$aesIV);
$dataObj=json_decode( $result );
if( $dataObj == NULL )
{
return self::$IllegalBuffer;
}
if( $dataObj->watermark->appid != self::$appid )
{
return self::$IllegalBuffer;
}
return $dataObj;
// return self::$OK;
}
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_TIMEOUT,500);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,CURLOPT_URL,$url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
}
//2、小程序
2.1在app.js 启动页面里先login
// 登录原文链接:https://www.f2er.com/thinkphp/66726.html
// if (!wx.getStorageSync('session_key') || wx.getStorageSync('time') < Date.parse(new Date())){ // 判断session_key是不是存在获者过期
wx.login({
success: res => {
console.log(res)
// 发送 res.code 到后台换取 openId,sessionKey,unionId
wx.request({
url: 'https://www.zhixiaobing.com/index.PHP?m=&c=api&a=getopenId',header: { "Content-Type": "application/x-www-form-urlencoded" },method: 'post',data: { code: res.code },success: function (res) {
console.log(res.data);
wx.setStorageSync('openid',res.data.openid)
wx.setStorageSync('session_key',res.data.session_key)
wx.setStorageSync('time',parseInt(Date.parse(new Date())) + 7200)
}
})} })</pre><p>//2.2 在<a href="https://www.jb51.cc/tag/xiaochengxu/" target="_blank" class="keywords">小程序</a>模板里写组件</p><pre ><button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" >//这是官方的组件点击会弹出授权<a href="https://www.jb51.cc/tag/yemian/" target="_blank" class="keywords">页面</a></pre><p>在js里写下面的<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a></p><pre ><a href="https://www.jb51.cc/tag/getPhoneNumber/" target="_blank" class="keywords">getPhoneNumber</a>: function (e) { var that =this; var session_key = wx.getStorageSync('session_key') if (e.detail.errMsg == '<a href="https://www.jb51.cc/tag/getPhoneNumber/" target="_blank" class="keywords">getPhoneNumber</a>:fail user deny') { wx.showModal({ title: '<a href="https://www.jb51.cc/tag/tishi/" target="_blank" class="keywords">提示</a>',showCancel: false,content: '未授权',success: function (res) { } }) } else {//确认授权 wx.request({ url: 'https://www.showoow.com/index.<a href="https://www.jb51.cc/tag/PHP/" target="_blank" class="keywords">PHP</a>?m=mini&c=api&a=<a href="https://www.jb51.cc/tag/getPhoneNumber/" target="_blank" class="keywords">getPhoneNumber</a>&openid=' + wx.getStorageSync('openid'),//openid是app.js 已经存的 header: {"Content-Type": "application/x-www-form-urlencoded" },method: "get",data: { encryptedData: e.detail.encryptedData,iv: e.detail.iv,session_key:session_key },success:function(res){ if (res.data.msg.phoneNumber){ console.log(res); wx.showModal({ title: '<a href="https://www.jb51.cc/tag/tishi/" target="_blank" class="keywords">提示</a>',content: '授权成功',success: function () { wx.setStorageSync('phoneNumber',res.data.msg.phoneNumber); var time = Date.parse(new Date()) + 60 * 60 * 24 * 2 wx.setStorageSync('exp',time ); } }) setTimeout(function(){ wx.navigateTo({ url: '/pages/form/form',}) },1500); that.setData({ show:'show',hiden:'' }) }else{ wx.showToast({ title: '授权失败',icon:'loading' }) } },fail:function(){ wx.showToast({ title: '授权失败',icon: 'loading' }) } }) }
},