>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数据不正确');
}
}
}
```
- 前言
- 开发工具准备
- sublime text
- postman
- navicat
- PHPStudy
- restful api入门
- 豆瓣网api示例
- 豆瓣网api使用方式
- 服务器状态码
- 接口安全
- 拿TP5写一个简单接口
- TP5下Request请求方式
- TP5中数据库使用细节
- 使用markdown编写api文档
- markdown简单语法
- 用markdown写用户登录文档
- 为API项目搭建虚拟主机
- 使用ThinkPHP5路由解析URL地址
- 初始化数据测试
- 开启路由
- 接口域名测试
- 注意事项
- 路由表扩展
- API接口安全设计
- 常见安全问题以及解决方案
- 接口开发前准备
- 如何配置路由?
- 公共类过滤数据
- Common.php
- 文档所有接口示例
- POSTMan中传参区别
- restful api进阶学习