扫码关注公众号,获取验证码,填入验证码登录
现在有很多不愿意花钱验证实现扫码登录 有多种原因
实现的门槛高以及不想花钱,想白嫖 其实或一个逻辑去思考
如果要求不是太高,可以实现扫码关注获取验证码
一,官方自带公众号模块,但是大部分功能需要认证,可以不管 主要实现获取验证码
二,关注自动回复验证码,可以用自带的验证码功能来做 找到微信模块index.class文件
在文本回复哪里,写入一句判断列如:
if($arr['content'] == '登录'){
return $this->_replytext($this->check_code());
}如果用户回复登录关键词则执行 回复验证码PHP代码
执行的PHP代码可以这样写 加载系统类 调用系统类代码 并输出
$code = yzm_ ::load_sys_class('code');
$code->get_code()
return $wxConfig;所以打开公众号就有现在的效果 列如:

三,因为验证的输出与验证是需要开启$_SESSION而且要在页面上才能实现
会出现发出的验证码一直提示为错误 那么我们就需要一个临时存储的数据表
字段就需要id code token inputime status
四,微信模块index.class文件写 回复验证码并插入
$data['code'] = $code->get_code();
$data['status'] = 1;
$data['inputtime'] = SYS_TIME;
$data['token'] = $this->msgobj->FromUserName;
D('code')->insert($data);五,现在验证时间都存在临时表里面了 那怎么用呢 我们需要绑定公众号 分析逻辑

需要获取用户ID 以及微信模块插入储存的token
PHP语句可以这样写 查找刚刚插入的验证码 并重新插入member_authorization
$arr['token'] = $data['token'];
$arr['userid'] = intval(get_cookie('_userid'));
$arr['inputtime'] = SYS_TIME;
$arr['authname'] = 'wx';
D('member_authorization')->insert($arr, true, false);现在数据都有了 用户ID 用户的token 都有了
六,判断是否绑定公众号,查询 member_authorization 表 条件是查询userid
如果有数据则绑定了,如果没有那就是没有绑定 写一个函数判断一下
function get_authorization($userid,$authname) {
$data = D('member_authorization')->where(array('userid' => $userid,'authname'=>$authname))->find();
if($data){
return $data['userid'];
}
else{
return'';
}
}七,现在验证码 绑定我们都有了 接下来判断验证那码
通过前端传来的验证码 我们查询是否有此验证码 如果没有验证码就是错的 如果查询不到那也是错的
就不能执行 注意格式化大小写
if(empty($data['code']) || strtolower($code)!=$data['code'])
八,判断时间是否过期 官方自带的验证码没有过期一说,只有正确或者错误 所以我们在上一步中插入了
验证码时间 如果验证码大于现在的时间 那就是没有过期 如果小于 就是过期了
if($starttimedelete(array('inputtime'=>$data['inputtime']));
return_json(array('status'=>1,'message'=>'验证码已过期!'));
}验证码过期或者不正确都不能留着表里 所以在PHP执行完以后删除该验证码
九,都验证完成后 通过提交的token 查询当前的用户ID 没错 现在又可以往后查询
$member_authorization = D('member_authorization')->where(array('token'=>$data['token']))->find();查询不到 那就是没有绑定公众号或者没有该用户
$member = D('member')->where(array('userid'=>$member_authorization['userid']))->find();如果查询到了 那么就设置 缓存在本地
$_SESSION['_userid'] = $member['userid'];
$_SESSION['_username'] = $member['username'];
set_cookie('_userid', $member['userid'], 0, true);
set_cookie('_username', $member['username'], 0, true);
set_cookie('_groupid', $member['groupid'], 0, true);
set_cookie('_nickname', $member['username']);缓存设置完成后 就直接提示成功,并删除该验证码 提示如果缓存没有设置成功 那么你需要设置
new_session_start();
最后通过书写html代码以及js的交互把功能设置到前台即可


十,解绑 通过删除绑定的数据则解绑成功
if(!$_GET['authname']) return_json(array('status'=>1,'message'=>'解除绑定的类型不能为空!'));
D('member_authorization')->delete(array('userid'=>$userid,'authname'=>$_GET['authname']));
return_json(array('status'=>0,'message'=>'解除绑定成功!'));跳过了公众号的验证码独立的思路来实现登录
如果你有好的思路可以和我一起探讨交流
2年前