ホームページ >バックエンド開発 >PHPの問題 >PHPでスキャン機能を実装する方法

PHPでスキャン機能を実装する方法

藏色散人
藏色散人オリジナル
2021-12-10 11:00:373520ブラウズ

php でスキャン関数を実装する方法: 1. QR コードを生成し、一意の識別子 uuid を生成し、redis を使用して一時情報を保存します; 2. 長い接続を通じてユーザーリクエストとサーバー間の通信を維持します;3. 携帯電話を使用して QR コードをスキャンして一意の識別子 uuid を取得し、その識別子が有効かどうかを確認します。

PHPでスキャン機能を実装する方法

#この記事の動作環境: Windows 7 システム、PHP バージョン 7.4、Dell G3 コンピューター。

php でスキャン機能を実装する方法

#PHP スキャン コード ログイン

スキャン コード ログイン固有の実装方法

PHPでスキャン機能を実装する方法

スキャン コード ログイン固有の実装プロセス:

1. QR コードを生成し、一意の識別子 uuid を生成します。プロセス全体、redis を使用して一時情報を保存します
(uuid がキーとして使用され、対応する値が -1 に設定され、-1 はスキャンされないことを意味し、この ID の有効期間は 3 分に設定されます) QR コードは有効期限が切れると再生成されます)。

    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 はユーザーが QR コードをスキャンしたことを意味します ps: QR コードを再度スキャンすると、プロンプトの有効期限が切れ、残りの値はユーザーの主キー 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。携帯電話を使用して QR コードをスキャンし (追記: ここでは独自に開発したアプリを使用する必要があります。アプリはログイン済みです)、一意の識別子 uuid を取得し、識別子が有効かどうかを判断します (識別子が無効でない場合)。 、QR コードがスキャンされたことを示すために、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. 2 番目の手順を繰り返します。このインターフェースはredisをチェックします。キー値がログイン者のUIDの場合、ログイン者の情報が返され、ログイン状態が保存されます。
推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPでスキャン機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。