187 lines
4.9 KiB
PHP
Raw Permalink Normal View History

<?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');
}
}