147 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			147 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace addons\cardocr\controller;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use addons\cardocr\model\CardocrLog;
							 | 
						||
| 
								 | 
							
								use app\common\model\User;
							 | 
						||
| 
								 | 
							
								use think\Config;
							 | 
						||
| 
								 | 
							
								use think\addons\Controller;
							 | 
						||
| 
								 | 
							
								use addons\cardocr\library\Card;
							 | 
						||
| 
								 | 
							
								use addons\cardocr\model\Cardocr;
							 | 
						||
| 
								 | 
							
								use think\Exception;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Index extends Controller
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    protected $noNeedRight = ['index'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\exception\DbException
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function index()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (!$this->auth->isLogin()) {
							 | 
						||
| 
								 | 
							
								            $this->error(__('Please login first'));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (!$this->request->isPost()) {
							 | 
						||
| 
								 | 
							
								            $this->error("无效请求");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $card_config = get_addon_config('cardocr');
							 | 
						||
| 
								 | 
							
								        $row = $this->request->post();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //人工审核,不请求api
							 | 
						||
| 
								 | 
							
								        if (!$card_config['isapi']) {
							 | 
						||
| 
								 | 
							
								            try {
							 | 
						||
| 
								 | 
							
								                $inster_data = array();
							 | 
						||
| 
								 | 
							
								                $inster_data["user_id"] = (int)$this->auth->id;
							 | 
						||
| 
								 | 
							
								                $inster_data["name"] = $row['username'];
							 | 
						||
| 
								 | 
							
								                $inster_data["idnum"] = $row['idnum'];
							 | 
						||
| 
								 | 
							
								                $inster_data["sex"] = !empty($row['sex']) ? $row['sex'] : "未知";
							 | 
						||
| 
								 | 
							
								                $inster_data['nation'] = "";
							 | 
						||
| 
								 | 
							
								                $inster_data['birth'] = date("Ymd");
							 | 
						||
| 
								 | 
							
								                $inster_data['address'] = "";
							 | 
						||
| 
								 | 
							
								                $inster_data['authority'] = "";
							 | 
						||
| 
								 | 
							
								                $inster_data['validdatestart'] = date("Ymd");
							 | 
						||
| 
								 | 
							
								                $inster_data['validdateend'] = date("Ymd");
							 | 
						||
| 
								 | 
							
								                $inster_data['positive_img'] = $row['positive_img'];
							 | 
						||
| 
								 | 
							
								                $inster_data['back_img'] = $row['back_img'];
							 | 
						||
| 
								 | 
							
								                $inster_data['status'] = "2";
							 | 
						||
| 
								 | 
							
								                Cardocr::create($inster_data);
							 | 
						||
| 
								 | 
							
								                $arr["code"] = 1;
							 | 
						||
| 
								 | 
							
								                $arr["result"] = 0;
							 | 
						||
| 
								 | 
							
								                $arr["time"] = time();
							 | 
						||
| 
								 | 
							
								                $arr["msg"] = "提交成功";
							 | 
						||
| 
								 | 
							
								                $arr["data"] = "";
							 | 
						||
| 
								 | 
							
								                echo json_encode($arr);
							 | 
						||
| 
								 | 
							
								                die();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            } catch (Exception $e) {
							 | 
						||
| 
								 | 
							
								                $this->error($e->getMessage());
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //限制api访问次数
							 | 
						||
| 
								 | 
							
								        $userid = $this->auth->id;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $replay = CardocrLog::where(array("user_id" => $userid))->whereTime('createtime', 'today')->count();
							 | 
						||
| 
								 | 
							
								        if (intval($card_config['replay']) <= $replay) {
							 | 
						||
| 
								 | 
							
								            $this->error("单日审核次数已满");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $url = Config::get('upload.cdnurl');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $name = $row['username'];
							 | 
						||
| 
								 | 
							
								        $idnum = $row['idnum'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $positive_img = cdnurl($row['positive_img'], true);
							 | 
						||
| 
								 | 
							
								        $back_img = cdnurl($row['back_img'], true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $data = \addons\cardocr\model\Cardocr::whereOr('user_id', '=', $this->auth->id)->whereOr(
							 | 
						||
| 
								 | 
							
								            'idnum',
							 | 
						||
| 
								 | 
							
								            '=',
							 | 
						||
| 
								 | 
							
								            $idnum
							 | 
						||
| 
								 | 
							
								        )->find();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!isset($data) || $data->status != 1) {
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $this->error("身份证已经验证通过");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //记录api记录
							 | 
						||
| 
								 | 
							
								        CardocrLog::record("身份证核验");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $cardocr = new \app\index\controller\Cardocr();
							 | 
						||
| 
								 | 
							
								        //ocr识别身份证正面
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $orc_frontdata = $cardocr->checkfront($positive_img);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($orc_frontdata['Name'] != $name && $orc_frontdata['IdNum'] != $idnum) {
							 | 
						||
| 
								 | 
							
								            $this->error("身份证图片与你输入的姓名与身份证号码不一致");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //ocr识别身份证反面
							 | 
						||
| 
								 | 
							
								        $orc_backdata = $cardocr->checkback($back_img);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //获取腾讯云身份验证api
							 | 
						||
| 
								 | 
							
								        $params_data = Card::checkidcard($idnum, $name);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            if ($params_data['Result'] == 0) {
							 | 
						||
| 
								 | 
							
								                $inster_data = array();
							 | 
						||
| 
								 | 
							
								                $inster_data["user_id"] = (int)$this->auth->id;
							 | 
						||
| 
								 | 
							
								                $inster_data["name"] = $name;
							 | 
						||
| 
								 | 
							
								                $inster_data["idnum"] = $idnum;
							 | 
						||
| 
								 | 
							
								                $inster_data["sex"] = !empty($orc_frontdata['Sex']) ? $orc_frontdata['Sex'] : "未知";
							 | 
						||
| 
								 | 
							
								                $inster_data['nation'] = !empty($orc_frontdata['Nation']) ? $orc_frontdata['Nation'] : "";
							 | 
						||
| 
								 | 
							
								                $inster_data['birth'] = !empty($orc_frontdata['Birth']) ? $orc_frontdata['Birth'] : null;
							 | 
						||
| 
								 | 
							
								                $inster_data['address'] = !empty($orc_frontdata['Address']) ? $orc_frontdata['Address'] : "";
							 | 
						||
| 
								 | 
							
								                $inster_data['authority'] = !empty($orc_backdata['backdata']['Authority']) ? $orc_backdata['backdata']['Authority'] : "";
							 | 
						||
| 
								 | 
							
								                $inster_data['validdatestart'] = $orc_backdata['validdatestart'];
							 | 
						||
| 
								 | 
							
								                $inster_data['validdateend'] = $orc_backdata['validdateend'];
							 | 
						||
| 
								 | 
							
								                $inster_data['positive_img'] = $row['positive_img'];
							 | 
						||
| 
								 | 
							
								                $inster_data['back_img'] = $row['back_img'];
							 | 
						||
| 
								 | 
							
								                $inster_data['status'] = "1";
							 | 
						||
| 
								 | 
							
								                Cardocr::create($inster_data);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } catch (Exception $e) {
							 | 
						||
| 
								 | 
							
								            $this->error($e->getMessage());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $arr["code"] = 1;
							 | 
						||
| 
								 | 
							
								        $arr["result"] = $params_data['Result'];
							 | 
						||
| 
								 | 
							
								        $arr["time"] = time();
							 | 
						||
| 
								 | 
							
								        $arr["msg"] = $params_data['Description'];
							 | 
						||
| 
								 | 
							
								        $arr["data"] = $params_data;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        echo json_encode($arr);
							 | 
						||
| 
								 | 
							
								        die();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |