Files
annnj-company 130c1026c4 first commit
2026-04-17 18:29:53 +08:00

132 lines
3.3 KiB
PHP

<?php
namespace app\api\controller;
use app\util\ReturnCode;
use think\Controller;
use think\facade\Response;
/**
* 接口基础控制器
*/
class Base extends Controller {
public function _initialize() {
}
/**
* 返回封装后的API数据到客户端
* @access protected
* @param mixed $data 要返回的数据
* @param mixed $msg 提示信息
* @param integer $code 返回的code
* @return \think\Response
*/
protected function buildSuccess($data = [], $msg = '操作成功', $code = 1) {
$result = [
'code' => $code,
'msg' => $msg,
'data' => $data,
];
$response = Response::create($result, 'json');
return $response;
}
/**
* 返回封装后的API数据到客户端
* @access protected
* @param mixed $msg 提示信息
* @param mixed $data 要返回的数据
* @param integer $code 返回的code
* @return \think\Response
*/
protected function buildFailed($msg = '', $data = [], $code = -1) {
$result = [
'code' => $code,
'msg' => $msg,
'data' => $data,
];
$response = Response::create($result, 'json');
return $response;
}
/**
* 接口调用时参数检查appkey、sign、timestamp
*/
public function checkParam() {
$param = $this->request->post();
$appkey = $param['appkey'];
$sign = $param['sign'];
$timestamp = $param['timestamp'];
//加一个验证ip
if (empty($appkey) || empty($sign) || empty($timestamp)) {
return $this->output(-1, '参数错误');
}
if (strlen($timestamp) == 10) {
$nowtime = date('Ymdhis', time());
$oldtime = date('Ymdhis', $timestamp);
if ($nowtime - $oldtime > 300) {
return $this->output(-1, 'timestamp超时');
}
} else {
return $this->output(-1, 'timestamp参数错误');
}
$appsecret = $this->account($appkey);
if (empty($appsecret)) {
return $this->output(-1, '参数错误key');
}
$newsign = md5($appkey . $appsecret . $timestamp);
if ($sign !== $newsign) {
return $this->output(-1, '签名错误');
}
return true;
//查询sign是否已使用
//$signCount = M("ApiLog")->where(array('sign' => $sign, 'appkey' => $appkey))->count();
// if ($signCount > 1) {
// $this->error('', 20022);
// }
}
/**
* 根据appkey查询信息
*/
public function account($appkey) {
$infos = config('API_USERS');
$appsecret = FALSE;
foreach ($infos as $k => $v) {
if ($v['appkey'] == $appkey) {
$appsecret = $v['appsecret'];
}
}
return $appsecret;
}
/**
* 统一输出方法
* @param int $code
* @param string $msg
* @param array $data
* @return json
*/
public function output($code = '-1', $msg = '', $data = []) {
$result = json([
'code' => intval($code),
'msg' => strval($msg),
'data' => $data ?: (object) $data
]);
return $result;
}
}