156 lines
4.9 KiB
PHP
156 lines
4.9 KiB
PHP
<?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;
|
||
}
|
||
}
|