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] =?UTF-8?q?=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81=E4=BA=8C?= =?UTF-8?q?=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