134 lines
3.9 KiB
PHP
134 lines
3.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @author Any
|
|
* @description KISS
|
|
* @date 2020-11-4
|
|
* @version 1.0.0
|
|
*
|
|
* _____LOG_____
|
|
*
|
|
*/
|
|
namespace app\controllers;
|
|
|
|
use Yii;
|
|
use yii\web\Response;
|
|
use app\components\DbUtils;
|
|
use app\components\SysErrCode;
|
|
use app\models\log\ApiLog;
|
|
|
|
|
|
class Controller extends \yii\web\Controller
|
|
{
|
|
public $cx_request_time; //用户请求时间
|
|
|
|
public $cx_mch_id = 0; //平台商户ID
|
|
|
|
public function init() {
|
|
parent::init();
|
|
$this->cx_request_time = intval(microtime(true) * 1000); //用户请求时间
|
|
}
|
|
|
|
|
|
/**
|
|
* 返回json数据
|
|
* @param array|string $data 返回的数据
|
|
* return null
|
|
*/
|
|
public function renderJson($data = [])
|
|
{
|
|
if (is_array($data)) {
|
|
if (!isset($data['code']))
|
|
$data['code'] = SysErrCode::$apiReturnSuccess;
|
|
if (!isset($data['msg']))
|
|
$data['msg'] = '';
|
|
if (!isset($data['data']))
|
|
$data['data'] = (object)null;
|
|
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
if (is_object($data)) {
|
|
if (!isset($data->code))
|
|
$data->code = SysErrCode::$apiReturnSuccess;
|
|
if (!isset($data->msg))
|
|
$data->msg = '';
|
|
if (!isset($data->data))
|
|
$data->data = (object)null;
|
|
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
//输出内容检测
|
|
$is_let_out = $this->filter($data);
|
|
if($is_let_out){
|
|
$data = $this->invaildRequest();
|
|
}
|
|
|
|
$response = \Yii::$app->getResponse();
|
|
$response->clearOutputBuffers();
|
|
$response->setStatusCode(200);
|
|
$response->format = Response::FORMAT_JSON;
|
|
$response->content = $data;
|
|
$response->send();
|
|
\Yii::$app->end();
|
|
}
|
|
|
|
public function responseHandler($data = [],$render = false)
|
|
{
|
|
if($render){
|
|
$this->renderJson($data);
|
|
} else {
|
|
if (is_array($data)) {
|
|
if (!isset($data['code']))
|
|
$data['code'] = SysErrCode::$apiReturnSuccess;
|
|
if (!isset($data['msg']))
|
|
$data['msg'] = '';
|
|
if (!isset($data['data']))
|
|
$data['data'] = (object)null;
|
|
}
|
|
if (is_object($data)) {
|
|
if (!isset($data->code))
|
|
$data->code = SysErrCode::$apiReturnSuccess;
|
|
if (!isset($data->msg))
|
|
$data->msg = '';
|
|
if (!isset($data->data))
|
|
$data->data = (object)null;
|
|
}
|
|
//输出内容检测
|
|
$is_let_out = $this->filter($data);
|
|
if($is_let_out){
|
|
$data = $this->invaildRequest();
|
|
}
|
|
|
|
header("Content-type: application/json; charset=" . \Yii::$app->charset);
|
|
\Yii::$app->response->format = Response::FORMAT_JSON;
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
public function invaildRequest()
|
|
{
|
|
return [
|
|
'code' => SysErrCode::$apiReturnFailed,
|
|
'msg' => 'Invaild Request'
|
|
];
|
|
}
|
|
|
|
public function requestNotFound()
|
|
{
|
|
return [
|
|
'code' => SysErrCode::$apiReturnFailed,
|
|
'msg' => 'Not Found'
|
|
];
|
|
}
|
|
|
|
//检测输出的内容是否数据库泄漏
|
|
private function filter($data)
|
|
{
|
|
$is_pass = 1;
|
|
//API日志记录
|
|
$user_id = \Yii::$app->user->isGuest ? 0 : \Yii::$app->user->identity->id;
|
|
$res = ApiLog::logger($user_id, $this->cx_request_time, $is_pass, $this->cx_mch_id);
|
|
if($res['code'] != 0 ){
|
|
\Yii::error("[ApiLog]".$res['msg']);
|
|
}
|
|
return false;
|
|
}
|
|
} |