>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進階學習