2025-08-01 11:39:06 +08:00

165 lines
4.4 KiB
PHP

<?php
namespace addons\cardocr;
use addons\cardocr\library\Card;
use app\common\library\Menu;
use think\Addons;
use think\Exception;
use think\Loader;
use think\Request;
use think\response\Json;
/**
* 身份证联网认证插件
*/
class Cardocr extends Addons
{
private $menu;
private $name = "cardocr";
public function __construct()
{
parent::__construct();
$menu = [
[
'name' => 'cardocr',
'title' => '身份证验证管理',
'icon' => 'fa fa-address-book',
'sublist' => [
[
'name' => 'cardocr/card',
'title' => '身份证验证',
'icon' => 'fa fa-id-card',
'sublist' => [
['name' => 'cardocr/card/index', 'title' => '查看'],
['name' => 'cardocr/card/add', 'title' => '添加'],
['name' => 'cardocr/card/edit', 'title' => '修改'],
['name' => 'cardocr/card/del', 'title' => '删除'],
['name' => 'cardocr/card/multi', 'title' => '批量更新'],
]
],
]
]
];
$this->menu = $menu;
}
/**
* 插件安装方法
* @return bool
*/
public function install()
{
Menu::create($this->menu);
return true;
}
/**
* 插件卸载方法
* @return bool
*/
public function uninstall()
{
Menu::delete($this->name);
return true;
}
/**
* 插件启用方法
* @return bool
*/
public function enable()
{
Menu::enable($this->name);
return true;
}
/**
* 插件禁用方法
* @return bool
*/
public function disable()
{
Menu::disable($this->name);
return true;
}
/** 检查身份证号码与姓名是一致钩子
* @param array $checkdata ['name'];$checkdata["idnum"]
* @return json
*/
public function checkIdname($checkdata)
{
$arr['time'] = time();
if(!isset($checkdata["name"])) {
return json(['code'=>400,'msg'=>'姓名不能缺少'],400);
}
if(!isset($checkdata["idnum"])) {
return json(['code'=>400,'msg'=>'身份证号码不能缺少'],400);
}
$data = Card::checkidcard($checkdata["idnum"],$checkdata["name"]);
return json(array_filter($data));
}
/** 身份证识别钩子
* @param array $array $data['ImageBase64'] = $ImageBase64;$data['CardSide'] = 'FRONT';
* 传入例子 checkOcr($data, $data['CardSide'])
* @param array $array ['CardSide'] |'FRONT','BACK' 识别身份证正反
* @return json
*/
public function checkOcr($arrjson)
{
$arr['time'] = time();
if(!isset($arrjson["ImageBase64"])) {
return json(['code'=>400,'msg'=>'身份证缺少ImageBase64'],400);
}
if(!preg_match('/^data:image\/(png|jpeg|gif);base64,/', $arrjson['ImageBase64'])){
return json(['code'=>400,'msg'=>'ImageBase64参数不是ImageBase64 格式'],400);
}
if(!isset($arrjson["CardSide"]) ){
return json(['code'=>400,'msg'=>'身份证缺少正反面参数'],400);
}
if($arrjson["CardSide"]!='FRONT' && $arrjson["CardSide"]!='BACK' ){
return json(['code'=>400,'msg'=>'身份证正反面参数不符合'],400);
}
$data = Card::checkcardocr(json_encode($arrjson), $arrjson['CardSide']);
return json(array_filter($data));
}
/**
* 添加命名空间
*/
public function appInit()
{
//添加支付包的命名空间
Loader::addNamespace('TencentCloud', ADDON_PATH . 'cardocr' . DS . 'library' . DS . 'TencentCloud' . DS);
}
/**
* 会员中心边栏后
* @return mixed
* @throws \Exception
*/
public function userSidenavAfter()
{
$request = Request::instance();
$controllername = strtolower($request->controller());
$actionname = strtolower($request->action());
$data = [
'actionname' => $actionname,
'controllername' => $controllername
];
return $this->fetch('view/hook/user_sidenav_after', $data);
}
}