first commit

This commit is contained in:
编码猿
2024-09-27 01:32:49 +08:00
commit 28ebe05a64
7399 changed files with 1174529 additions and 0 deletions

View File

@@ -0,0 +1,155 @@
<?php
namespace app\api\controller;
use think\Controller;
use think\Db;
use think\facade\Cache;
use think\Request;
/**
* api 入口文件基类,需要控制权限的控制器都应该继承该类
*/
class ApiController extends Controller
{
protected $middleware = [
'CrossDomain'
];
use SendController;
/** 成功码 */
const SUCCESS = 200;
/** 错误码传递参数提示1xxxxxx; 数据验证提示2xxxxx; 业务提示3xxxxx; */
const ERR_EMPTY_PARAM = 10000;
const ERR_PASSWORD_EMPTY_PARAM = 10001;
const ERR_ACCOUNT_EMPTY_PARAM = 10002;
const ERR_EMPTY_INPUT = 10003;
const ERR_NOT_AGREE_PROTOCOL = 10004;
const ERR_USER_PASSWORD = 20000;
const ERR_USER_TOKEN_INVALID = 40000;
const ERR_NONE = 40001;
const ERR_DENY = 40002;
const ERR_UPLOAD_FILE = 40003;
const ERR_ILLEGAL = 40004;
const ERR_EMPLOYEE_BALANCE = 40005;
const ERR_SMS_SEND = 40006;
const ERR_ERROR_PARAM = 40007;
const ERR_VERSION_MUST_UPGRADE = 40008;
const ERR_USER_TOKEN_EXPIRE = 400013;
const ERR_USER_REFRESH_TOKEN_EXPIRE = 40014;
const ERR_USER_TOKEN = 40015;
const ERR_ACCESS_TOKEN = 40016;
const ERR_APPID = 40017;
const ERR_ORDER_STATUS_ERROR = 80001;
/** 信息提示 */
const message = [
'SUCCESS' => "成功",
'ERR_EMPTY_PARAM' => "参数丢失",
'ERR_EMPTY_INPUT' => "请输入",
'ERR_PASSWORD_EMPTY_PARAM' => "请输入密码",
'ERR_ACCOUNT_EMPTY_PARAM' => "请输入手机号",
'ERR_ACCOUNT_PASSWORD' => "请输入正确的手机号和密码",
'ERR_USER_HAVE_LOCKED' => "账号已被冻结",
'ERR_USER_TOKEN_INVALID' => "请先登录",
'ERR_USER_TOKEN_EXPIRE' => "TOKEN已过期",
'ERR_USER_TOKEN' => "REFRESH_TOKEN错误",
'ERR_USER_REFRESH_TOKEN_EXPIRE' => "REFRESH_TOKEN已过期",
'ERR_ACCESS_TOKEN' => "access_token不存在或为空",
'ERR_APPID' => "appid错误",
'ERR_NONE' => "系统错误",
'ERR_DENY' => "拒绝请求",
'ERR_UPLOAD_FILE' => "文件上传失败,请重试",
'ERR_SMS_SEND' => "短信发送失败,请重试",
'ERR_ILLEGAL' => "非法请求",
'ERR_EMPLOYEE_BALANCE' => "用户账户异常",
'ERR_ERROR_PARAM' => "参数异常",
'ERR_ORDER_STATUS_ERROR' => "订单状态异常",
];
public static function getMessage($error)
{
return self::message[$error];
}
/**
* @var \think\Request Request实例
*/
protected $request;
protected $clientInfo;
protected $uid;
/**
* 不需要鉴权方法
*/
protected $noAuth = [];
/**
* 构造方法
* @param Request $request Request对象
*/
public function __construct(Request $request)
{
parent::__construct();
//初始化系统常量
$system_constant = Cache::get("SYSTEM_CONSTANT");
if (!$system_constant) {
$list = Db::name('constants')->column("param_value","param_name");
$system_constant = array();
foreach ($list as $k => $v) {
$system_constant[$k] = json_decode($v,true);
}
Cache::set('SYSTEM_CONSTANT', $system_constant,120);
}
//注意区别于缓存config方式只对当前请求有效
config('SYSTEM_CONSTANT',$system_constant);
$this->request = $request;
$this->init();
if(isset($this->clientInfo['client'])){
$this->uid = $this->clientInfo['client']['id'];
$this->clientInfo = $this->clientInfo['client'];
}
}
/**
* 初始化
* 检查请求类型,数据格式等
*/
public function init()
{
//所有ajax请求的options预请求都会直接返回200如果需要单独针对某个类中的方法可以在路由规则中进行配置
if ($this->request->isOptions()) {
return self::returnMsg(200, 'success');
}
$oauth = app('app\api\controller\OauthController'); //tp5.1容器,直接绑定类到容器进行实例化
$user_info = $oauth->authenticate();
if (!$oauth->match($this->noAuth)) {
if($user_info){
if(isset($user_info['refresh_expires_time']) && $user_info['refresh_expires_time'] < time()){
return self::returnMsg(self::ERR_USER_REFRESH_TOKEN_EXPIRE,self::getMessage('ERR_USER_REFRESH_TOKEN_EXPIRE'),[]);
}
if(!isset($user_info['expires_time']) || $user_info['expires_time'] < time()){
return self::returnMsg(self::ERR_USER_TOKEN_EXPIRE,self::getMessage('ERR_USER_TOKEN_EXPIRE'),[]);
}
$getCacheAccessToken = $oauth->certification($oauth::getClient());
if(!$getCacheAccessToken){
return self::returnMsg(self::ERR_ACCESS_TOKEN,self::getMessage('ERR_ACCESS_TOKEN'),[]);
}
$this->clientInfo = $user_info;
return $this->clientInfo;
}
return self::returnMsg(self::ERR_USER_TOKEN_INVALID,self::getMessage('ERR_USER_TOKEN_INVALID'));
}
$this->clientInfo = $user_info;
return $this->clientInfo;
}
}