log = new LogOpe(get_class($this)); $this->orderlog = new LogOpe("order/".date("YmdH") . "Order"); $this->goodslog = new LogOpe("goods/".date("YmdH") . "Goods"); // 获取token if(isset($_SERVER['HTTP_TOKEN'])){ $this->token = $_SERVER['HTTP_TOKEN']; $this->checkToken(); } } /** * 请求校验(抛异常) * @param $class * @param string $scene * @param string|array|null $method 指定参数类型 * @param bool $limit 限制请求类型 * @throws \Exception */ public function checkVaild($class, string $scene = '', string $method = null) { $method = strtolower($method); switch ($method){ case "get": if (!Request::isGet()){ throw new \think\Exception('请求类型错误'); } $data = Request::get(); break; case "post": if (!Request::isPost()){ throw new \think\Exception('请求类型错误'); } $data = Request::post(); break; case 'put': if (!Request::isPut()){ throw new \think\Exception('请求类型错误'); } $data = Request::put(); break; case 'patch': if (!Request::isPatch()){ throw new \think\Exception('请求类型错误'); } $data = Request::patch(); break; case 'delete': if (!Request::isDelete()){ throw new \think\Exception('请求类型错误'); } $data = Request::delete(); break; default: if (is_array($method)){ $data = $method; }else{ $data = Request::param(); } } if ($scene) { $result = validate($class)->scene($scene)->check($data); } else { $result = validate($class)->check($data); } return $result; } /** * 构造列表搜索 withSearch 转换函数 * @param $param array 需要搜索的字段 * @param $where array where条件,匹配中存在search中字段则排除原数组字段,使用whthSearch搜索 * @param string $wherePrefix * @return array[] withSearch条件参数[0] [1] */ public function buildSearch(array $param,array &$where, string $wherePrefix = '') { $search = [0 => [], 1 => []]; foreach ($param as $v){ if ($v == ''){ continue; } $search[0][] = $v; if (isset($where[$v])){ if ($where[$v] != ''){ $search[1][$v] = $where[$v]; } unset($where[$v]); } } $where = $this->buildWhere($where, true, $wherePrefix); return $search; } /** * 重组where数据,同时兼容2种查询方法插入 * * @param $where * @param bool $filter * @param string $prefix * @return array */ public function buildWhere($where, $filter = true, $prefix = ''){ //为 where 拼接前缀 if ($prefix != ''){ foreach ($where as $k => $v){ if (is_numeric($k)){ if (strpos($where[$k][0],'.') === false) { $where[$k][0] = $prefix . $where[$k][0]; } } elseif (strpos($k,'.') === false) { $where[$prefix . $k] = $v; unset($where[$k]); } } } // 删除where内容为空的数据 if ($filter == true){ $where = array_filter($where, function($val) {//等于0不能过滤 if ($val === 0 || $val === '0' || $val != false) { return true; } else { return false; } }); } // 拼接重置where为多维数组,支持2种方式组合where foreach ($where as $k => $v) { if (is_numeric($k)) { continue; } else if (is_array($v)) { array_unshift($where[$k], $k); } else { $where[$k] = [$k, '=', $v]; } } return $where = array_values($where); } /** * TOKEN校验 */ protected function checkToken() { $cert = Cert::where('status', 0)->where('type', "entrust")->find(); if(!$cert){ throw new \think\Exception('缺少证书', 400); } $key = $cert->token; $jwt = new JWT(); $data = $jwt::decode($this->token, new Key($key, 'HS512')); if(!empty($data)){ $data = json_decode( json_encode($data), true); $this->admin_id = Admin::where('account_id', $data['accountId'])->value('id'); $this->account_id = $data['accountId']; $this->account_name = $data['accountName']; } } public function createSign($type){ $cert = Cert::where('status', 0)->where('type', $type)->find(); if(!$cert){ throw new \think\Exception('缺少证书', 400); } $priv_key = file_get_contents($cert->private_key); $exp = 5 * 60 * 1000; $payload = [ 'iss' => $cert->token, 'exp' => time() + $exp, 'iat' => time(), ]; if($type == "user_real"){ $payload['aud'] = "BD84DD42A7234B05B0C5D11616132AC4"; } $sign = JWT::encode($payload, $priv_key, 'RS256'); return $sign; } }