重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍php如何实现扫一扫功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联从2013年成立,先为凯里等服务建站,凯里等地企业,进行企业商务咨询服务。为凯里企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
php实现扫一扫功能的方法:1、生成二维码,生成一个唯一标识uuid,并使用redis保存临时信息;2、通过一个长连接维持用户请求和服务器之间的通信;3、使用手机扫描二维码获取唯一标识uuid,并判断该标识是否有效。
本文操作环境:Windows7系统,PHP7.4版,Dell G3电脑。
PHP扫码登录
扫码登录具体实现方式
扫码登录具体实现流程:
(uuid作为key,对应值设置为-1,-1表示未扫描,该标识的有效期这里设置为三分钟,过期会重新生成一个二维码)。
public function index(){ $uuid = self::createRandomStr('6'); $url = $this->code($uuid); //二维码链接地址 Redis::sAdd($uuid,'-1'); Redis::command('Expire',[$uuid,180]);//设置过期时间 return view('home.send.index',['url'=>$url,'uuid'=>$uuid]); } /** * 生成二维码url * @param $text */ public function code($uuid){ $host='http://'.$_SERVER["HTTP_HOST"].'/api/send'; $url='http://qr.liantu.com/api.php?text='.$host.'?uuid='.$uuid; return $url; }
(-1未扫描 , 0表示用户已扫描该二维码 ps:再次扫描该二维码时提示已失效, 其余的值表示用户的主键id)
/** * 验证uuid是否过期 * @param Request $req * @return string|void */ public function confirm(Request $req){ $uuid = $req->uuid; $result = implode('',Redis::sort($uuid)); if($result == ''){//当uuid不存在时表示该标识已失效,重新生成二维码 return '该链接地址已过期'; } if($result == '-1'){ return ''; }elseif($result == '0'){ return '用户已扫描'; }else{ return '用户已确认登录';//获取用户的user_id 直接登录。 } }
public function index(Request $req){ $uuid = $req->uuid; $info = Code::getOne(['uuid'=>$uuid]); $result = implode('',Redis::sort($uuid)); if(!$result){ return $this->ajaxMsgError('该二维码已失效'); } Redis::sRem($code,'-1'); Redis::sadd($code ,0); return $this->ajaxMsgOk('扫描成功,请确认登录'); }
public function dologin(Request $req){ $user_id = $req->user_id; $uuid= $req->uuid; $user = User::getOne(['id'=>$user_id]); if($user){ if($user->status != 1){ return $this->ajaxMsgError('该用户已被禁用'); } Redis::sadd($uuid,$user_id); return $this->ajaxSuccess('登录成功'); }else{ //用户不存在 return $this->ajaxError('该用户不存在'); } }
以上是“php如何实现扫一扫功能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!