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视频教程》
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.west.cn