浅聊公众订阅号如何实现扫码获取验证码登录的思路

856次浏览 更新日期:2023-03-29 14:32:12 分类:谈天说地 评论:4

需求

扫码关注公众号,获取验证码,填入验证码登录


现在有很多不愿意花钱验证实现扫码登录  有多种原因


实现的门槛高以及不想花钱,想白嫖  其实或一个逻辑去思考


如果要求不是太高,可以实现扫码关注获取验证码


逻辑分析(YZMCMS为例)

一,官方自带公众号模块,但是大部分功能需要认证,可以不管 主要实现获取验证码


二,关注自动回复验证码,可以用自带的验证码功能来做 找到微信模块index.class文件


在文本回复哪里,写入一句判断列如:


if($arr['content'] == '登录'){
  return $this->_replytext($this->check_code()); 
}


如果用户回复登录关键词则执行 回复验证码PHP代码


执行的PHP代码可以这样写 加载系统类 调用系统类代码 并输出


$code = yzm_ ::load_sys_class('code');

$code->get_code()

return $wxConfig;


所以打开公众号就有现在的效果 列如:


image.png


三,因为验证的输出与验证是需要开启$_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);


五,现在验证时间都存在临时表里面了 那怎么用呢  我们需要绑定公众号 分析逻辑


image.png


需要获取用户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的交互把功能设置到前台即可


image.png

image.png

十,解绑 通过删除绑定的数据则解绑成功


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'=>'解除绑定成功!'));


总结

跳过了公众号的验证码独立的思路来实现登录 


如果你有好的思路可以和我一起探讨交流 

我来说两句
  • yzmcms
    yzmcms 官网认证 1年前
    深有体会,大部分都是伸手党,不想花钱拿来即用的那种,而开发模板又累又不挣钱,全靠兴趣支撑。
    做CMS更是如此,开发CMS付出的时间占据了我的绝大部分时间和精力,全靠几个插件和授权,除去服务器支出,基本上没有什么收入,也是全靠兴趣坚持了这么多年,尽管如此,还有很多人不保留版权信息,哎,想想都头疼。。。
    4
    回复
  • oolaile
    oolaile 1年前
    惊了我一身!
    1
    回复
  • 大环境如此,知识收费有新解读:你的知识,别人收费!弄得我都差点自闭了。
    0
    回复
  • @yzmcms 总有人觉得我们很赚钱,缺不知道辛酸,唉,加油袁总
    0
    回复
作者信息
发布见解
发内容 回顶部