温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php如何实现扫一扫功能

发布时间:2021-12-10 11:31:58 来源:亿速云 阅读:386 作者:小新 栏目:编程语言

这篇文章主要介绍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值修改为当前登录用户的主键id
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('该用户不存在');
        }
    }
5、重复第二步,此接口如果检查到redis中的key值为登录人UID的时候,就会返回登录人信息并且保存登录态。

以上是“php如何实现扫一扫功能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI