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