您好,欢迎访问一九零五行业门户网

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视频教程》
以上就是php怎么实现扫一扫功能的详细内容。
其它类似信息

推荐信息