实名认证二要素
This commit is contained in:
@@ -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];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user