新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
php怎么實現(xiàn)掃一掃功能
本文操作環(huán)境:Windows7系統(tǒng),php7.4版,Dell G3電腦。

創(chuàng)新互聯(lián)建站云計算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、成都西云數(shù)據(jù)中心、云服務(wù)器、網(wǎng)頁空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗,已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機、網(wǎng)頁空間、國際域名空間、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
php怎么實現(xiàn)掃一掃功能?
PHP掃碼登錄
掃碼登錄具體實現(xiàn)方式
掃碼登錄具體實現(xiàn)流程:
1、生成二維碼,生成一個唯一標識uuid,該標識貫穿整個流程,使用redis保存臨時信息
(uuid作為key,對應(yīng)值設(shè)置為-1,-1表示未掃描,該標識的有效期這里設(shè)置為三分鐘,過期會重新生成一個二維碼)。
public function index(){
$uuid = self::createRandomStr('6');
$url = $this->code($uuid); //二維碼鏈接地址
Redis::sAdd($uuid,'-1');
Redis::command('Expire',[$uuid,180]);//設(shè)置過期時間
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、登錄頁面通過一個長連接維持用戶請求和服務(wù)器之間的通信,每隔一段時間監(jiān)測redis中 uuid對應(yīng)的值是否發(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:此處應(yīng)該使用自己開發(fā)的App,并且App已經(jīng)登錄)獲取唯一標識uuid,判斷該標識是否有效 (該標識未失效的情況下修改uuid對應(yīng)的值為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對應(yīng)的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、重復(fù)第二步,此接口如果檢查到redis中的key值為登錄人UID的時候,就會返回登錄人信息并且保存登錄態(tài)。
文章題目:php怎么實現(xiàn)掃一掃功能
本文鏈接:http://www.dlmjj.cn/article/djdcedg.html


咨詢
建站咨詢
