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();
|
|
}
|
|
}
|