💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
>common.php基础 Common.php基础源码如下,根据自己的业务逻辑更改,后期还有更多修改的地方,比如return_msg() 方法可以封装到TP5自带的common.php应用文件里。还有如果遇到自身的异常该怎么办?异常他会以tpl形式返回,无json数据。这也是后面需要考虑的问题,在这里我们可以简单的说明一下做简单尝试,如果在使用数据库的时候可以使用try..catch...捕获异常,如果不是数据库异常呢?这时候就要使用Handle类,具体的后面详细介绍 ```php <?php namespace app\api\controller; use think\Request; use think\Controller; class Common extends Controller{ protected $request; //用来处理请求参数 protected $params; //过滤后符合要求的所有参数(过滤time、token等数据) /** * 通过构造函数获取信息 * check_time() 并不是系统自带的,而是我们自己编写的函数 * echeck_time() 用于对应时间戳,避免接口恶意大规模调用 */ protected function _initialize(){ parent::_initialize(); $this->request=Request::instance(); /** * check_time() 检测时间戳过滤数据 * only(['time']) 只要time字段过滤数据 */ $this->check_time($this->request->only(['time'])); /** * check_token() 验证加密token值 * 将除token以外的数据值进行加密再生成新token,与api传来toekn进行对比 * 此处先按照接收所有参数数据处理,因为还要和api传来token对比 */ $this->check_token($this->request->param()); /** * 验证请求是否超时 * @param array $arr 包括时间戳的所有参数数组 * return json 所有数据以json数据格式传输 */ public function check_time($arr){ /** * intval() 强制转换使用规则 * intval('hello') => 0 纯字符串 转换 成0 * intval('123hello') => 123 数字+字符串 转换 成数字部分 * intval($arr[]) => 0 空数组 转换 成0 * intval($arr['hello']) => 1非空数组 转换 成1 */ if(!isset($arr['time'])||intval($arr['time'])<=1){ /*我们只想要一串数字,而非数组*/ $this->return_msg(400,'时间戳不存在'); } /** * 当前时间戳time() 与 api获取时间戳$arr['time'] * 差值不能大于60,否则按超时处理 */ if(time()-intval($arr['time'])>60){ $this->return_msg(400,'请求超时'); } } /** * @param $code 错误状态码 * @param string $msg 错误信息 默认为空 * @param array $data 错误数据 默认为空数组 */ public function return_msg($code,$msg='',$data=[]){ /*开始执行脚本文件*/ $return_data['code']=$code; $return_data['msg']=$msg; $return_data['data']=$data; /*此处不能用return,否则会继续调用,程序继续执行,所以此处是输出数据并终止脚本*/ echo json_encode($return_data); die; } /** * 验证token 防止篡改数据 * @param array $srr 全部请求参数 * @return json token返回验证结果 */ public function check_token($arr){ /*开始接收客户端api传过来的token*/ if(!isset($arr['token']) || empty($arr['token'])){ $this->return_msg(400,'token数据不能为空'); } $api_token = $arr['token']; /** * 开始执行加密形成token * 第一步 将所有接收数据md5加密 * 第二步 将之前的md5加密后数据组合在一起再进行md5加密 * 第二步 为数据加前缀和后缀后在进行md5加密获得最终token * 开始处理服务器端生成token * 第一步 从接收参数$arr除去自带token数据 * 第二步 初始化服务端token数据 */ unset($arr['token']); //unset() 销毁变量,而非去除数组数据 $service_token = ""; foreach ($arr as $key => $value){ $service_token .= md5($value); } $service_token = md5('api_'.$service_token.'_api'); //halt($service_token); /*将客户端api与服务端api进行验证对比*/ if($api_token !== $service_token){ $this->return_msg(400,'token数据不正确'); } } } ```