From 27a50e285384bdc94e382f8f27b5c5dd3db2840f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Tue, 23 Sep 2025 19:26:18 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E4=BA=8C=E8=A6=81=E7=B4=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/UserData.php | 152 +++++++++++++++++++++-------- 1 file changed, 113 insertions(+), 39 deletions(-) diff --git a/application/api/model/UserData.php b/application/api/model/UserData.php index 55c2936..1befa8a 100644 --- a/application/api/model/UserData.php +++ b/application/api/model/UserData.php @@ -313,47 +313,54 @@ class UserData extends Model ]; db::name('user_auth')->insert($auth); - $config = get_system_config(); - //获取Access Token - $access_token = $this->redis->get('access_token_'.$config['tencent_app_id']); - //判断是否过期 - if(empty($access_token)){ - $access_token = model('Tencent')->getAccessToken($config['tencent_app_id'],$config['tencent_app_secret']); - $this->redis->set('access_token_'.$config['tencent_app_id'],$access_token,1000); - sleep(1); - //获取SignTicket - $sign_ticket = model('Tencent')->getSignTicket($access_token,$config['tencent_app_id']); - $this->redis->set('sign_ticket_'.$config['tencent_app_id'],$sign_ticket,1100); - } - $sign_ticket = $this->redis->get('sign_ticket_'.$config['tencent_app_id']); - - //获取NONCE Ticket - $nonce_ticket = model('Tencent')->getNonceTicket($access_token,$user_id,$config['tencent_app_id']); - //获取随机字符串 - $nonceStr = generateRandom(32); - //生成一个订单号 并保存在redis - $orderNo = generateRandom(12); - //保存在redis - $this->redis->set('order_no_tencent_'.$user_id,$orderNo,3600); - //生成签名 - $sign = model('Tencent')->getSign($user_id,$nonceStr,$sign_ticket,$config['tencent_app_id']); - //生成faceId - $faceId = model('Tencent')->getFaceId($orderNo,$real_name,$id_card,$sign,$user_id,$config['tencent_app_id'],$nonceStr); - if(isset($faceId['code'])){ - return ['code' => 0, 'msg' => $faceId['msg'],'data' =>null]; + $res = $this->real_name_verify($real_name,$id_card); + if($res['code'] == 200){ + return ['code' => 1, 'msg' => '验证通过!','data' =>null]; + }else{ + return ['code' => 0, 'msg' => $res['msg'],'data' =>null]; } - $data = [ - 'userid' => 'u'.$user_id, - 'nonce' => $nonceStr, - 'sign' => $sign, - 'appid' => $config['tencent_app_id'], - 'orderNo' => $orderNo, - 'apiVersion'=>'1.0.0', - 'licence'=>$config['tencent_licence'], - 'faceId' => $faceId - ]; - return ['code' => 1, 'msg' => '获取成功','data' =>$data]; +// $config = get_system_config(); +// //获取Access Token +// $access_token = $this->redis->get('access_token_'.$config['tencent_app_id']); +// //判断是否过期 +// if(empty($access_token)){ +// $access_token = model('Tencent')->getAccessToken($config['tencent_app_id'],$config['tencent_app_secret']); +// $this->redis->set('access_token_'.$config['tencent_app_id'],$access_token,1000); +// sleep(1); +// //获取SignTicket +// $sign_ticket = model('Tencent')->getSignTicket($access_token,$config['tencent_app_id']); +// $this->redis->set('sign_ticket_'.$config['tencent_app_id'],$sign_ticket,1100); +// } +// $sign_ticket = $this->redis->get('sign_ticket_'.$config['tencent_app_id']); +// +// //获取NONCE Ticket +// $nonce_ticket = model('Tencent')->getNonceTicket($access_token,$user_id,$config['tencent_app_id']); +// //获取随机字符串 +// $nonceStr = generateRandom(32); +// //生成一个订单号 并保存在redis +// $orderNo = generateRandom(12); +// //保存在redis +// $this->redis->set('order_no_tencent_'.$user_id,$orderNo,3600); +// //生成签名 +// $sign = model('Tencent')->getSign($user_id,$nonceStr,$sign_ticket,$config['tencent_app_id']); +// //生成faceId +// $faceId = model('Tencent')->getFaceId($orderNo,$real_name,$id_card,$sign,$user_id,$config['tencent_app_id'],$nonceStr); +// if(isset($faceId['code'])){ +// return ['code' => 0, 'msg' => $faceId['msg'],'data' =>null]; +// } +// +// $data = [ +// 'userid' => 'u'.$user_id, +// 'nonce' => $nonceStr, +// 'sign' => $sign, +// 'appid' => $config['tencent_app_id'], +// 'orderNo' => $orderNo, +// 'apiVersion'=>'1.0.0', +// 'licence'=>$config['tencent_licence'], +// 'faceId' => $faceId +// ]; +// return ['code' => 1, 'msg' => '获取成功','data' =>$data]; } //实名认证结果 @@ -597,4 +604,71 @@ class UserData extends Model } return ['code' => 1, 'msg' => '获取成功','data' =>$data]; } + + //身份证二要素认证 + public function real_name_verify($real_name, $card_id) + { + // 云市场分配的密钥Id + $secretId = '1QMATmzeRHC7Auz8'; + // 云市场分配的密钥Key + $secretKey = 'FKeTuxiKC76DrdPMAu4nhsppLZ1mI93l'; + + // 签名 + $datetime = gmdate('D, d M Y H:i:s T'); + $signStr = sprintf("x-date: %s", $datetime); + $sign = base64_encode(hash_hmac('sha1', $signStr, $secretKey, true)); + $auth = sprintf('{"id": "%s", "x-date": "%s" , "signature": "%s"}', $secretId, $datetime, $sign); + + // 请求方法 + $method = 'GET'; + // 请求头 + $headers = array( + 'Authorization' => $auth, + ); + // 查询参数 + $queryParams = array ( + 'cardNo' => $card_id, + 'realName' => $real_name, + ); + // body参数(POST方法下) + $bodyParams = array ( + + ); + $sendData = http_build_query($bodyParams); + // url参数拼接 + $url = 'https://ap-beijing.cloudmarket-apigw.com/service-hcgajsa5/idcard/VerifyIdcardv2'; + if (count($queryParams) > 0) { + $url .= '?' . http_build_query($queryParams); + } + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_TIMEOUT, 60); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); + if (in_array($method, array('POST', 'PUT', 'PATCH'), true)) { + $headers['Content-Type'] = 'application/x-www-form-urlencoded'; + curl_setopt($ch, CURLOPT_POSTFIELDS, $sendData); + } + curl_setopt($ch, CURLOPT_HTTPHEADER, array_map(function ($v, $k) { + return $k . ': ' . $v; + }, array_values($headers), array_keys($headers))); + +// $data = json_decode(curl_exec($ch), true); + $result = curl_exec($ch); + if($result) { + $data = json_decode($result, true); +// var_dump($data);exit; + if ($data['error_code'] == 0) { + if ($data['result']['isok']) { + return ['code' => 200, 'msg' => '验证成功', 'data' => null]; + } else { + return ['code' => 201, 'msg' => '信息有误' . json_encode($data), 'data' => null]; + } + } else { + return ['code' => 201, 'msg' => '信息有误' . json_encode($data), 'data' => null]; + } + } + return ['code' => 201, 'msg' => '信息有误', 'data' => null]; + } } \ No newline at end of file From 3f7d0cb826bcba636f54a0c39efb5e37ebdf79f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Wed, 24 Sep 2025 15:01:54 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E5=AE=9E=E5=90=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/UserData.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/application/api/model/UserData.php b/application/api/model/UserData.php index 1befa8a..86681c1 100644 --- a/application/api/model/UserData.php +++ b/application/api/model/UserData.php @@ -315,6 +315,8 @@ class UserData extends Model $res = $this->real_name_verify($real_name,$id_card); if($res['code'] == 200){ + //修改状态 + db::name('user_auth')->where(['real_name' => $real_name,'card_id' => $id_card])->update(['is_real' => 1]); return ['code' => 1, 'msg' => '验证通过!','data' =>null]; }else{ return ['code' => 0, 'msg' => $res['msg'],'data' =>null]; From eed29ecb0fc5f3583d21fa836da552b7ee378fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Wed, 24 Sep 2025 15:13:22 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E8=BF=9B=E5=85=A5=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 5dc301c..76e996f 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -530,10 +530,14 @@ class Room extends Model //进入房间 public function join_room($user_id, $room_id, $password) { - $room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => 2])->find(); +// $room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => 2])->find(); + $room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => ['in',[1,2]]])->find(); if (!isset($room)) { return ['code' => 0, 'msg' => '房间不存在', 'data' => '']; } + if($room['apply_status'] == 1){ + return ['code' => 0, 'msg' => '房间正在审核中……', 'data' => '']; + } if(isset($room['password']) && $user_id != $room['user_id']){ if (empty($password) || $room['password'] != md5($password)) { return ['code' => 0, 'msg' => '密码错误', 'data' => '']; From 38b8af4e25dd0437f007cd71d052ed991d8af78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Wed, 24 Sep 2025 15:14:58 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E8=BF=9B=E5=85=A5=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 1 - 1 file changed, 1 deletion(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 76e996f..48310de 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -530,7 +530,6 @@ class Room extends Model //进入房间 public function join_room($user_id, $room_id, $password) { -// $room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => 2])->find(); $room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => ['in',[1,2]]])->find(); if (!isset($room)) { return ['code' => 0, 'msg' => '房间不存在', 'data' => '']; From 1740dd76d30004230a92f961bb35cce90bece22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Wed, 24 Sep 2025 16:39:44 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E5=90=8E=E7=AB=AF=20=20=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E6=A0=87=E7=AD=BE=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/adminapi/controller/Room.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/adminapi/controller/Room.php b/application/adminapi/controller/Room.php index 37c5830..1088132 100644 --- a/application/adminapi/controller/Room.php +++ b/application/adminapi/controller/Room.php @@ -186,7 +186,7 @@ class Room extends adminApi $page = input('page', 1); $page_limit = input('page_limit', 30); $search_name = input('search_name', ''); - $where=[]; + $where['deletetime'] = 0; //标签名称 if($search_name!==''){ $where['label_name'] = ['like', '%'.$search_name.'%']; @@ -237,7 +237,7 @@ class Room extends adminApi if(!$type_data){ return V(0,"房间类型不存在"); } - $result = db::name($this->table_room_type)->where(['id'=>$type_id])->delete(); + $result = db::name($this->table_room_type)->where(['id'=>$type_id])->update(['deletetime'=>time()]); if(!$result){ return V(0,"删除失败"); } From 4e5e97dfe9b59a912e82ffd6166c26e4fd5c0e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Wed, 24 Sep 2025 17:06:30 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=B2=A1=E6=9C=89=E5=9C=A8=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E6=98=AF=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 48310de..eff8500 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -2524,7 +2524,10 @@ class Room extends Model if(!$room_id){ $room_id = Db::name('vs_room_visitor')->where('user_id', $user_id)->order('id desc')->value('room_id'); } - + $room = db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->find(); + if($room){ + return ['code' => 1, 'msg' => '操作成功', 'data' => null]; + } $room_info = db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time()]); if(!$room_info){ return ['code' => 0, 'msg' => '加入房间失败', 'data' => null]; From 2a1ca7299a9433c655e1b798b3cf52d85152b4f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Wed, 24 Sep 2025 17:16:37 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E6=B3=A8=E9=94=80=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E6=94=B9=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Login.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/application/api/model/Login.php b/application/api/model/Login.php index 019b0b2..61abe5a 100644 --- a/application/api/model/Login.php +++ b/application/api/model/Login.php @@ -428,6 +428,13 @@ class Login extends Model model('UserToken')->where('id', $user_info['id'])->update(['token' => 1]); $isstatus = model('User')->where('id', $user_info['user_id'])->update(['status' => 0]); if($isstatus){ + //查询用户所在房间 + $room_list = db::name('vs_room_visitor')->where('user_id', $user_info['user_id'])->select(); + if($room_list){ + foreach ($room_list as &$value) { + model('Room')->quit_room($user_info['user_id'], $value['room_id'],$user_info['user_id']); + } + } //删除用户 // model('Tencent')->account_delete($user_info['user_id']); model('User')->where('id', $user_info['user_id'])->update(['delete_time' => time()]); @@ -440,13 +447,7 @@ class Login extends Model db::name('vs_room')->where('id', $value['id'])->update(['room_status' => 3]); } } - //查询用户所在房间 - $room_list = db::name('vs_room_visitor')->where('user_id', $user_info['user_id'])->select(); - if($room_list){ - foreach ($room_list as &$value) { - model('Room')->quit_room($user_info['user_id'], $value['room_id'],$user_info['user_id']); - } - } + }else{ return ['code' => 0, 'msg' => '注销失败', 'data' => null]; } From 8ea06cd81d33255d8efe6804d57f70523e42479f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Thu, 25 Sep 2025 00:05:02 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E6=B3=A8=E9=94=80=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E6=94=B9=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index eff8500..c5080dc 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -1068,9 +1068,14 @@ class Room extends Model db::name('vs_room_visitor')->where(['room_id' => $room_id, 'user_id' => $user_id])->delete(); //房间的模式 $res = model('api/Room')->get_room_label($room_id); + if($res['code'] != 1){ + $room_label = 1; + $room_type = 1; + }else{ + $room_label = $res['data']['label_id']; + $room_type = $res['data']['type_id']; + } - $room_label = $res['data']['label_id']; - $room_type = $res['data']['type_id']; $apply_type = 0; if($room_label == 1 && ($room_type == 1 || $room_type == 3 || $room_type == 4 || $room_type == 8)){ $apply_type = 1; From 2e97678b9f9a46d20ca7b33c193c7bd6591683d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Thu, 25 Sep 2025 00:11:41 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index c5080dc..03e90f2 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -2532,11 +2532,12 @@ class Room extends Model $room = db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->find(); if($room){ return ['code' => 1, 'msg' => '操作成功', 'data' => null]; + }else{ + $room_info = db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time()]); + if(!$room_info){ + return ['code' => 0, 'msg' => '加入房间失败', 'data' => null]; + } + return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } - $room_info = db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time()]); - if(!$room_info){ - return ['code' => 0, 'msg' => '加入房间失败', 'data' => null]; - } - return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } } \ No newline at end of file From 4fd83d42755f5a02fbde396883fa0d8ed3c19967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Thu, 25 Sep 2025 01:28:45 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 03e90f2..c805f00 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -1307,6 +1307,7 @@ class Room extends Model ->join('user b', 'a.user_id = b.id') ->field('a.user_id,b.nickname,b.avatar') ->where(['a.room_id' => $room_id,'b.is_online' => 1]) + ->group('a.user_id') ->order('a.id asc') ->page($page, $limit) ->select(); @@ -2530,14 +2531,12 @@ class Room extends Model $room_id = Db::name('vs_room_visitor')->where('user_id', $user_id)->order('id desc')->value('room_id'); } $room = db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->find(); - if($room){ - return ['code' => 1, 'msg' => '操作成功', 'data' => null]; - }else{ + if(!$room){ $room_info = db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time()]); if(!$room_info){ return ['code' => 0, 'msg' => '加入房间失败', 'data' => null]; } - return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } + return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } } \ No newline at end of file