php实现扫一扫功能的方法:1、生成二维码,生成一个唯一标识uuid,并使用redis保存临时信息;2、通过一个长连接维持用户请求和服务器之间的通信;3、使用手机扫描二维码获取唯一标识uuid,并判断该标识是否有效。

本文操作环境:Windows7系统,PHP7.4版,Dell G3电脑。
php怎么实现扫一扫功能?
PHP扫码登录
扫码登录具体实现方式
立即学习“PHP免费学习笔记(深入)”;

扫码登录具体实现流程:
(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;
}(-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 直接登录。
}
} 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('扫描成功,请确认登录');
}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('该用户不存在');
}
}推荐学习:《PHP视频教程》
以上就是php怎么实现扫一扫功能的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号