>백엔드 개발 >PHP 문제 >PHP에서 스캔 기능을 구현하는 방법

PHP에서 스캔 기능을 구현하는 방법

藏色散人
藏色散人원래의
2021-12-10 11:00:373540검색

PHP에서 스캔 기능을 구현하는 방법: 1. QR 코드를 생성하고, 고유 식별자 uuid를 생성하고, redis를 사용하여 임시 정보를 저장합니다. 2. 긴 연결을 통해 사용자 요청과 서버 간의 통신을 유지합니다. 휴대폰의 QR 코드를 사용하여 고유 식별자 uuid를 얻고 해당 식별자가 유효한지 확인합니다.

PHP에서 스캔 기능을 구현하는 방법

이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.4, Dell G3 컴퓨터.

PHP에서 스캔 기능을 구현하는 방법은 무엇입니까?

PHP 스캔 코드 로그인

스캔 코드 로그인 특정 구현 방법

PHP에서 스캔 기능을 구현하는 방법

스캔 코드 로그인 특정 구현 프로세스:

1. , 전체 프로세스를 실행하는 고유 식별자 uuid를 생성하고 redis를 사용하여 임시 정보를 저장합니다

(uuid가 키로 사용되며 해당 값은 -1로 설정됩니다. -1은 스캔되지 않음을 의미하며 유효 기간은 여기에서는 식별자가 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를 획득하고 식별자가 유효한지 확인합니다(식별자가 유효하지 않은 경우 uuid에 해당하는 값을 0으로 수정하여 표시함). QR 코드가 스캔되었음을 나타냅니다.)
        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. 앱은 로그인을 확인하고 현재 uuid에 해당하는 val 값을 현재 로그인된 user
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의 기본 키 ID로 변경합니다. 이 인터페이스에서 키 값이 확인되면 반복합니다. redis는 로그인 사용자의 UID이며, 로그인 정보가 반환되고 로그인 상태가 저장됩니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 스캔 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.