温馨提示  2024年 6月我们已经停止内容更新,当前提供存档数据流量服务,谢谢来访。
知识 2023-08-25 26 次阅读

php怎么实现扫一扫功能

   

php实现扫一扫功能的方法 1. 生成二维码,生成一个唯一标识uuid,并使用redis保存临时信息; 2. 通过一个长连接维持用户请求和服务器之间的通信; 3. 使用手机扫描二维码获取唯一标识uuid,并判断该标识有没有效。

本文操作环境windows7系统,php7.4版,dell g3电脑。

php怎么实现扫一扫功能?

php扫码登入

扫码登入具体实现方法

扫码登入具体实现流程

1. 生成二维码,生成一个唯一标识uuid,该标识贯穿整个流程,使用redis保存临时信息

(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; } 2. 登入页面通过一个长连接维持用户请求和服务器之间的通信,每隔一段时间监测redis中 uuid对应的值是否发生改变

(-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 直接登入。 } } 3. 使用手机扫描二维码(ps:此处应该使用自己开发的app,并且app已经登入)获取唯一标识uuid,判断该标识有没有效 (该标识未失效的情况下修改uuid对应的值为0,用来表示该二维码已经被扫描)。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('扫描成功,请确认登入'); } 4. app确认登入,把当前uuid对应的val值修改为当前登入用户的主键idpublic 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('该用户不存在'); } } 5. 重复第二步,此接口如果检查到redis中的key值为登入人uid的时候,就会返回登入人信息并且保存登入态。

推荐学习《php视频教程》