功能描述
网站第三方登录 - 微信扫码登录组件,整合为一个类文件,通过简单的配置即可完成复杂的登录功能。
申请开通微信开放平台
网址 : https://open.weixin.qq.com/
注册并登录微信开放平台(需要认证),认证后按照要求添加应用【网站应用】-> 通过审核。
部署说明
下载 webWxLogin.php 并部署到 phpGrace/tools 文件夹下。
数据结构
创建 pg_members.sql 数据表。
DROP TABLE IF EXISTS `pg_members`; CREATE TABLE `pg_members` ( `u_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `u_username` varchar(50) DEFAULT NULL COMMENT '用户名', `u_openid_qq` varchar(100) DEFAULT NULL COMMENT 'openid-qq', `u_unionid_qq` varchar(100) DEFAULT NULL COMMENT 'unionid-qq', `u_openid_wx` varchar(100) DEFAULT NULL COMMENT 'openid-wx', `u_unionid_wx` varchar(100) DEFAULT NULL COMMENT 'unionid-wx', `u_phone` varchar(20) DEFAULT NULL COMMENT '手机号', `u_pwd` varchar(50) DEFAULT NULL COMMENT '密码', `u_name` varchar(20) DEFAULT NULL COMMENT '称呼', `u_face` varchar(200) DEFAULT NULL COMMENT '头像地址', `u_gender` varchar(20) DEFAULT NULL COMMENT '性别', `u_status` tinyint(4) DEFAULT NULL COMMENT '状态', `u_regtime` bigint(13) DEFAULT NULL COMMENT '注册时间', `u_logintime` bigint(13) DEFAULT NULL COMMENT '登陆时间', `u_randnum` varchar(50) DEFAULT NULL COMMENT '随机码', `u_ip` varchar(20) DEFAULT NULL COMMENT '登陆IP', `u_msgcode` varchar(10) DEFAULT NULL COMMENT '短信验证码', PRIMARY KEY (`u_id`), UNIQUE KEY `u_unionid_qq` (`u_unionid_qq`), UNIQUE KEY `u_username` (`u_username`), UNIQUE KEY `u_phone` (`u_phone`) USING BTREE, UNIQUE KEY `u_openid_qq` (`u_openid_qq`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
类文件配置
打开 webWxLogin.php 1、正确填写 appId 和 secret(微信开发平台应用中心点开应用获取) 2、填写回调地址 redirectUri,如: http://www.phpGrace.com/qqLogin/bac
登录接口使用【 注意在入口页开启 session 】
在视图中添加一个链接,链接到控制器 wxLogin,代码如下:
<?php //核心登录 session 名称 graceUid,请根据项目需求自行修改。 class wxLoginController extends grace{ private $loginer; public function __init(){ parent::__init(); //检查是否已经登录 if(!empty($_SESSION['graceUid'])){header('/'); exit;} $this->loginer = new phpGrace\tools\webWxLogin(); } public function index(){ $this->loginer->login(); } //扫描登录后返回处理 public function back(){ //检查参数 if(empty($_GET['code']) || empty($_GET['state'])){exit('数据错误请返回重试');} if($_GET['state'] != $_SESSION['wxLoginState']){exit('数据错误请返回重试');} //获取用户信息 $user = $this->loginer->getUserInfo(); //连接数据比对用户 $dbMember = db('members'); $member = $dbMember->where('u_openid_wx = ?', array($this->loginer->openId))->fetch(); //用户数据不存在 [ 第一次登录 ] if(empty($member)){ $preAddData = array(); $preAddData['u_openid_wx'] = $this->loginer->openId; $preAddData['u_nickname'] = $user['nickname']; $preAddData['u_face'] = $user['headimgurl']; $preAddData['u_gender'] = $user['sex']; $preAddData['u_status'] = 1; $preAddData['u_regtime'] = time(); $preAddData['u_logintime'] = time(); $preAddData['u_ip'] = phpGrace\tools\ip::getIp(); $uid = $dbMember->add($preAddData); if($uid){ //记录 session setSession('graceUid', $uid); setSession('graceNickName', $user['nickname']); }else{ exit('服务器忙,请返回重试'); } } //用户已经存在 else{ $preUpdateData = array(); $preUpdateData['u_logintime'] = time(); $preUpdateData['u_ip'] = phpGrace\tools\ip::getIp(); $dbMember->where('u_id = ?', array($member['u_id']))->update($preUpdateData); //记录 session setSession('graceUid', $member['u_id']); setSession('graceNickName', $user['nickname']); } //登录后跳转回首页,可以根据项目需求改写跳转 header('location:/'); } }