博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【TP3.2.3】微信网页授权--基类
阅读量:7126 次
发布时间:2019-06-28

本文共 2921 字,大约阅读时间需要 9 分钟。

非常好用的微信授权 基类:其他的微信权限类都可以继承至该类:

 

code = $this->getCode(); $this->access_token_array = $this->getOpenId(); $userInfo = $this->getUserInfo(); if ($userInfo) { $ins = M('Wechat_user_info'); //其他框架请自行调整方法。 $map['openid'] = $userInfo['openid']; $result = $ins->where($map)->find(); //根据OPENID查找数据库中是否有这个用户,如果没有就写数据库。继承该类的其他类,用户都写入了数据库中。 if (!$result) { $ins->add($userInfo); } session('openid', $userInfo['openid']); //写到$_SESSION中。微信缓存很坑爹,调试时请及时清除缓存再试。 } } } /** * @explain * 获取code,用于获取openid和access_token * @remark * code只能使用一次,当获取到之后code失效,再次获取需要重新进入 * 不会弹出授权页面,适用于关注公众号后自定义菜单跳转等,如果不关注,那么只能获取openid **/ public function getCode() { if (isset($_GET["code"])) { return $_GET["code"]; } else { $str = "location: https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->appid . "&redirect_uri=" . $this->index_url . "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect"; header($str); exit; } } /** * @explain * 用于获取用户openid **/ public function getOpenId() { $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->appsecret . "&code=" . $this->code . "&grant_type=authorization_code"; $access_token_json = $this->https_request($access_token_url); $access_token_array = json_decode($access_token_json, TRUE); return $access_token_array; } /** * @explain * 通过code获取用户openid以及用户的微信号信息 * @return * @remark * 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token * access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效 **/ public function getUserInfo() { $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$this->access_token_array['access_token'] ."&openid=" . $this->access_token_array['openid']."&lang=zh_CN"; $userinfo_json = $this->https_request($userinfo_url); $userinfo_array = json_decode($userinfo_json, TRUE); return $userinfo_array; } /** * @explain * 发送http请求,并返回数据 **/ public function https_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; }}

 

转载地址:http://vhhel.baihongyu.com/

你可能感兴趣的文章
python 将子目录文件上移到指定根目录
查看>>
mysql启动之:报错解决办法
查看>>
CentOS 7系统上部署Apache+PHP+MariaDB+xcache使用rpm,php module
查看>>
随机数的生成
查看>>
记录一次勒索病毒漏洞扫描发现过程
查看>>
C语言之有符号数和无符号数
查看>>
windows server 2008 R2 远程报错
查看>>
inode 索引节点和软硬链接
查看>>
文本处理工具基础(grep系、sed、awk等)
查看>>
Android常用URI收藏
查看>>
团队用过最好的bug管理软件-delbug管理
查看>>
Swift和OC的区别
查看>>
Java下一个简单的数据库分库帮助类
查看>>
Thread初探
查看>>
磁盘的读写原理
查看>>
配置防盗链、访问控制Directory针对目录、访问控制FilesMatch针对链接
查看>>
Tomcat 仅用ip和端口 不用项目名就能访问项目
查看>>
LNMP平台部署及应用
查看>>
appium python 实例链接
查看>>
redis 关于string数据类型的学习
查看>>