123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- namespace Setting\Lib;
- use Dever;
- class Idcard
- {
- static $AccessKeyId = 'LTAI5t5k4M2gK6kctX6iq8CT';
- static $AccessKeySecret = 'hfFy8smTc9CKEThpqFTG32zJuHd3dS';
- static $AliHost = 'http://ocr-api.cn-hangzhou.aliyuncs.com/?';
- //查询域名
- public function getIdcard_api(){
- $param = self::getCommonParams();
- $param['Action'] = 'RecognizeIdcard';
- $param['OutputFigure'] = 'false';
- $param['Url'] = Dever::input('url');
- $name = Dever::input('name');
- $idcard = Dever::input('idcard');
- $type = Dever::input('type');#1=正面,2=反面
- $param['Signature'] = self::getSignature($param);
- $url = 'https://ocr-api.cn-hangzhou.aliyuncs.com/?';
- foreach ($param as $k => $v) {
- $url .= '&' . $k . '=' . $v;
- }
- $data = Dever::load('setting/lib/idcard')->callInterface($url,$name,$idcard,$type);
- return $data;
- }
- // http://guanli.uat.churenyiliao.com/data/upload/8/2022/06/09/71698f0e0b574317363c8a61409585cd_w1.jpg
- // http%3A%2F%2Fguanli.uat.churenyiliao.com%2Fdata%2Fupload%2F9%2F2022%2F06%2F08%2Ffe5f8b472eb2fd76d144f926c0e2b725.jpg
- public function callInterface($url,$name,$idcard,$type){
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $res = curl_exec($ch);
- curl_close($ch);
- $res =(array)(json_decode($res));
- if($res && isset($res['Data']) && $res['Data']){
- $data = (array)(json_decode($res['Data'],true));
- $rest = (array)($data['data']);
- if($type == 1){
- if(isset($rest['face']) && $rest['face']){
- foreach($rest as $k => $v){
- return $v['data'];
- }
- }else{
- Dever::alert('请上传正确的身份证正面图片');
- }
- }elseif($type == 2){
- if(isset($rest['back']) && $rest['back']){
- foreach($rest as $k =>$v){
- if (isset($v['data']['validPeriod'])) {
- $date = explode('-',$v['data']['validPeriod']);
- if($date[1] && $date[1] != '长期'){
- $cdate = strtotime(str_replace('.','-',$date[1]));
- if(time()>=$cdate){
- Dever::alert('身份证背面已过期');
- }
- }
-
- } else {
- Dever::alert('请上传正确的身份证背面图片');
- }
- return $v['data'];
- }
- }else{
- Dever::alert('请上传正确的身份证背面图片');
- }
- }
- // if(isset($rest['face']) && $rest['face']){
- // foreach($rest as $k=>$v){
- // if($name != $v['data']['name'] || $idcard != $v['data']['idNumber']){
- // Dever::alert('姓名或身份证号不匹配');
- // }
- // }
- // }elseif(isset($rest['back']) && $rest['back']){
- // foreach($rest as $k => $v){
- // $date = explode('-',$v['data']['validPeriod']);
- // $cdate = strtotime(str_replace('.','-',$date[1]));
- // if(time()>=$cdate){
- // Dever::alert('身份证背面已过期');
- // }
- // }
- // }
- // return $rest;
- }else{
- Dever::alert('身份证图片有误');
- }
- }
- private static function getCommonParams(){
- date_default_timezone_set("GMT");
- $data = [
- 'Format' => 'JSON',
- 'Version' => '2021-07-07',
- 'AccessKeyId' => self::$AccessKeyId,
- 'SignatureMethod' => 'HMAC-SHA1',
- 'Timestamp' => date('Y-m-d') . 'T' . date('H:i:s') . 'Z',//'2021-08-09T08:27:00Z',//,
- 'SignatureVersion' => '1.0',
- 'SignatureNonce' => uniqid(),//microtime(),//
- 'Action' => 'DescribeRegions',
- ];
-
- return $data;
- }
- private static function percentEncode($str)
- {
- // 使用urlencode编码后,将"+","*","%7E"做替换即满足ECS API规定的编码规范
- $res = urlencode($str);
- $res = preg_replace('/\+/', '%20', $res);
- $res = preg_replace('/\*/', '%2A', $res);
- $res = preg_replace('/%7E/', '~', $res);
- return $res;
- }
- //生成签名
- private function getSignature($parameters)
- {
- // 将参数Key按字典顺序排序
- ksort($parameters);
- // 生成规范化请求字符串
- $canonicalizedQueryString = '';
- foreach($parameters as $key => $value)
- {
- $canonicalizedQueryString .= '&' .self::percentEncode($key)
- . '=' . self::percentEncode($value);
- }
- // 生成用于计算签名的字符串 stringToSign
- $stringToSign = 'GET&%2F&' . self::percentEncode(substr($canonicalizedQueryString, 1));
- // 计算签名,注意accessKeySecret后面要加上字符'&'
- $signature = self::percentEncode(base64_encode(hash_hmac('sha1', $stringToSign, self::$AccessKeySecret . '&', true)));
- return $signature;
- }
- }
|