cxgj/controllers/Controller.php
2023-11-27 09:45:13 +08:00

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;
}
}