溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何實現(xiàn)掃一掃功能

發(fā)布時間:2021-12-10 11:31:58 來源:億速云 閱讀:375 作者:小新 欄目:編程語言

這篇文章主要介紹php如何實現(xiàn)掃一掃功能,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

php實現(xiàn)掃一掃功能的方法:1、生成二維碼,生成一個唯一標識uuid,并使用redis保存臨時信息;2、通過一個長連接維持用戶請求和服務器之間的通信;3、使用手機掃描二維碼獲取唯一標識uuid,并判斷該標識是否有效。

本文操作環(huán)境:Windows7系統(tǒng),PHP7.4版,Dell G3電腦。

PHP掃碼登錄

掃碼登錄具體實現(xiàn)方式

php如何實現(xiàn)掃一掃功能

掃碼登錄具體實現(xiàn)流程:

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、登錄頁面通過一個長連接維持用戶請求和服務器之間的通信,每隔一段時間監(jiān)測redis中 uuid對應的值是否發(fā)生改變

(-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:此處應該使用自己開發(fā)的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的時候,就會返回登錄人信息并且保存登錄態(tài)。

以上是“php如何實現(xiàn)掃一掃功能”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

php
AI