187 lines
4.9 KiB
PHP
187 lines
4.9 KiB
PHP
<?php
|
||
|
||
namespace app\common\model\cardocr;
|
||
|
||
use app\common\model\BaseModel;
|
||
use think\Config;
|
||
use think\Model;
|
||
|
||
class Card extends BaseModel
|
||
{
|
||
|
||
|
||
// 表名
|
||
protected $name = 'cardocr';
|
||
|
||
// 自动写入时间戳字段
|
||
protected $autoWriteTimestamp = 'int';
|
||
|
||
// 定义时间戳字段名
|
||
protected $createTime = 'createtime';
|
||
protected $updateTime = 'updatetime';
|
||
protected $deleteTime = false;
|
||
|
||
// 追加属性
|
||
protected $append = [
|
||
'sex_text',
|
||
'publishtime_text'
|
||
];
|
||
|
||
|
||
public function getSexList()
|
||
{
|
||
return ['男' => __('男'), '女' => __('女'), '未知' => __('未知')];
|
||
}
|
||
|
||
public function getStatusList()
|
||
{
|
||
return ['0' => __('Down'), '1' => __('Pass'), '2' => __('Unaudited')];
|
||
}
|
||
|
||
|
||
public function getSexTextAttr($value, $data)
|
||
{
|
||
$value = $value ? $value : (isset($data['sex']) ? $data['sex'] : '');
|
||
$list = $this->getSexList();
|
||
return isset($list[$value]) ? $list[$value] : '';
|
||
}
|
||
|
||
|
||
public function getPublishtimeTextAttr($value, $data)
|
||
{
|
||
$value = $value ? $value : (isset($data['publishtime']) ? $data['publishtime'] : '');
|
||
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
|
||
}
|
||
|
||
protected function setPublishtimeAttr($value)
|
||
{
|
||
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
|
||
}
|
||
|
||
|
||
public function user()
|
||
{
|
||
return $this->belongsTo('app\common\model\User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||
}
|
||
|
||
|
||
|
||
/** 新增实名认证
|
||
* @param $params
|
||
* @param $trans
|
||
* @return $this
|
||
* @throws \Exception
|
||
*/
|
||
public function add($params,$trans=false){
|
||
|
||
if (empty($params)) {
|
||
throw new \Exception(__('Parameter %s can not be empty', ''));
|
||
}
|
||
|
||
$rule = [
|
||
'user_id'=>'require',
|
||
'name'=>'require',
|
||
'idnum'=>'require',
|
||
'positive_img' => 'require',
|
||
'back_img'=>'require',
|
||
];
|
||
|
||
$rule_msg = [
|
||
"user_id.require"=>'认证用户必填',
|
||
"name.require"=>'姓名必填',
|
||
"idnum.require"=>'身份证号必填',
|
||
'positive_img.require' => '身份证正面必填',
|
||
'back_img.require' => '身份证反面必填',
|
||
];
|
||
|
||
self::check($params,$rule,$rule_msg);
|
||
|
||
|
||
$user_id = $params["user_id"];
|
||
|
||
|
||
|
||
//开启api验证
|
||
if (config("site.realname_isthroughapi")) {
|
||
$url = Config::get('upload.cdnurl');
|
||
$ImageUrl = cdnurl($params['positive_img'],true);
|
||
$ImagebackUrl = cdnurl($params['back_img'],true);
|
||
|
||
//orc获取正面信息
|
||
$front_data = $this->checkfront($ImageUrl);
|
||
$front_data = array_change_key_case($front_data, CASE_LOWER);
|
||
$params = $front_data + $params;
|
||
|
||
//orc获取反面信息
|
||
$back_data = $this->checkback($ImagebackUrl);
|
||
$back_data = array_change_key_case($back_data['backdata'], CASE_LOWER);
|
||
|
||
//修改审核通过
|
||
$params['status'] = 1;
|
||
$params["publishtime"] = time();
|
||
$params = array_filter($back_data) + $params;
|
||
|
||
//调用api身份证实名验证
|
||
$params_data = \addons\cardocr\library\Card::checkidcard($params['idnum'], $params['name']);
|
||
|
||
|
||
if ($params_data['Result'] != 0) {
|
||
throw new \Exception(__('姓名与身份号码不一致', ''));
|
||
}
|
||
}
|
||
if(config("site.real_name_automatic_approval")){
|
||
$params['status'] = 1;
|
||
$params["publishtime"] = time();
|
||
}
|
||
|
||
|
||
|
||
//判断逻辑
|
||
if($trans){
|
||
self::beginTrans();
|
||
}
|
||
$res = true;
|
||
try{
|
||
//查询是否有认证信息,如果有则修改,如果没有则添加
|
||
$card = self::where('user_id',$user_id)->find();
|
||
if($card){
|
||
$result = $card->allowField(true)->save($params);
|
||
$self = $card;
|
||
}else{
|
||
$result = $this->allowField(true)->save($params);
|
||
$self = $this;
|
||
}
|
||
|
||
|
||
if($trans){
|
||
self::commitTrans();
|
||
}
|
||
}catch (\Exception $e){
|
||
if($trans){
|
||
self::rollbackTrans();
|
||
}
|
||
throw new \Exception($e->getMessage().$e->getFile().$e->getLine());
|
||
}
|
||
return $self;
|
||
}
|
||
|
||
|
||
/** 检测实名认证状态
|
||
* @param $user_id
|
||
*/
|
||
public function checkRealname($user_id=0){
|
||
//默认状态为-1未认证,0认证被拒绝,1认证通过,2=等待审核
|
||
$status = -1;
|
||
$card_info = self::where('user_id',$user_id)->find(); //认证信息
|
||
if($card_info){
|
||
$status = $card_info['status'];
|
||
}
|
||
return compact('status' , 'card_info');
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
}
|