| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.com
- * =========================================================
- */
- namespace app\shopapi\controller;
- use app\exception\ApiException;
- use app\model\shop\Shop;
- use app\model\system\Api;
- use app\model\system\Group as GroupModel;
- use app\model\system\Site;
- use app\model\system\User as UserModel;
- use extend\RSA;
- use think\facade\Cache;
- class BaseApi
- {
- public $lang;
- public $params;
- public $token;
- protected $user_info;
- protected $uid;
- protected $url;
- protected $site_id;
- protected $website_id;
- protected $group_info;
- protected $shop_info;
- public $app_type;
- protected $app_module = 'shop';
- protected $api_config;
- protected $addon = '';
- public function __construct()
- {
- if ($_SERVER[ 'REQUEST_METHOD' ] == 'OPTIONS') {
- exit;
- }
- $this->url = strtolower(request()->parseUrl());
- $this->addon = request()->addon() ? request()->addon() : '';
- //获取参数
- $this->params = input();
- $this->getApiConfig();
- $this->decryptParams();
- $this->site_id = request()->siteid();
- //todo 基于将这个类所谓api基类的解决方案(主观应该提取公共部分重新封装)
- if($this->app_module == 'shop'){
- if (!addon_is_exit('mobileshop', $this->site_id)) {
- $error = $this->error([], 'ADDON_NOT_EXIST');
- throw new ApiException($error['code'], $error['message']);
- }
- }
- }
- /**
- * api请求参数解密
- */
- private function decryptParams()
- {
- if ($this->api_config[ 'is_use' ] && !empty($this->api_config[ 'value' ]) && isset($this->params[ 'encrypt' ])) {
- $decrypted = RSA::decrypt(
- $this->params[ 'encrypt' ],
- $this->api_config[ 'value' ][ 'private_key' ],
- $this->api_config[ 'value' ][ 'public_key' ]
- );
- if ($decrypted[ 'code' ] >= 0) {
- $this->params = json_decode($decrypted[ 'data' ], true);
- } else {
- $this->params = [];
- }
- }
- }
- /**
- * 获取api配置
- */
- private function getApiConfig()
- {
- $api_model = new Api();
- $config_result = $api_model->getApiConfig();
- $this->api_config = $config_result[ "data" ];
- }
- /**
- * 检测token(使用私钥检测)
- */
- protected function checkToken() : array
- {
- if (empty($this->params[ 'token' ])) {
- return $this->error('', 'TOKEN_NOT_EXIST');
- }
- if ($this->api_config[ 'is_use' ] && isset($this->api_config[ 'value' ][ 'private_key' ])
- && !empty($this->api_config[ 'value' ][ 'private_key' ])) {
- $decrypt = decrypt($this->params[ 'token' ], $this->api_config[ 'value' ][ 'private_key' ]);
- } else {
- $decrypt = decrypt($this->params[ 'token' ]);
- }
- if (empty($decrypt)) {
- return $this->error('', 'TOKEN_ERROR');
- }
- $data = json_decode($decrypt, true);
- if (!empty($data[ 'expire_time' ]) && $data[ 'expire_time' ] > time()) {
- return $this->error('', 'TOKEN_EXPIRE');
- }
- $this->user_info = $data[ 'user_info' ];
- $this->app_module = $this->user_info['app_module'];
- $this->uid = $data[ 'user_info' ][ 'uid' ];
- $this->getShopInfo();
- $this->getGroupInfo();
- //判断权限
- if (!$this->checkAuth()) {
- $error = $this->error([], 'NO_PERMISSION');
- throw new ApiException($error['code'], $error['message']);
- }
- return success(0, '', $data);
- }
- /**
- * 创建token
- * @param $user_info
- * @param int $expire_time 有效时间 0为永久 单位s
- * @return string
- */
- protected function createToken($user_info)
- {
- $data = [
- 'user_info' => $user_info,
- 'expire_time' => $this->api_config[ 'value' ]['long_time'] * 3600
- ];
- if ($this->api_config[ 'is_use' ] && isset($this->api_config[ 'value' ][ 'private_key' ])
- && !empty($this->api_config[ 'value' ][ 'private_key' ])) {
- $token = encrypt(json_encode($data), $this->api_config[ 'value' ][ 'private_key' ]);
- } else {
- $token = encrypt(json_encode($data));
- }
- return $token;
- }
- public function getShopInfo()
- {
- //获取店铺信息
- $condition = array (
- [ "site_id", "=", $this->site_id ]
- );
- $shop_info_result = (new Shop())->getShopInfo($condition);
- $site_info = (new Site())->getSiteInfo($condition);
- $this->shop_info = array_merge($shop_info_result['data'], $site_info['data']);
- }
- /**
- * 获取当前用户的用户组
- */
- private function getGroupInfo()
- {
- $group_model = new GroupModel();
- $group_info_result = $group_model->getGroupInfo([ [ "group_id", "=", $this->user_info[ "group_id" ] ], [ "site_id", "=", $this->site_id ], [ "app_module", "=", $this->app_module ] ]);
- $this->group_info = $group_info_result[ "data" ];
- }
- /**
- * 返回数据
- * @param $data
- * @return false|string
- */
- public function response($data)
- {
- $data[ 'timestamp' ] = time();
- return json_encode($data, JSON_UNESCAPED_UNICODE);
- }
- /**
- * 操作成功返回值函数
- * @param string $data
- * @param string $code_var
- * @return array
- */
- public function success($data = '', $code_var = 'SUCCESS')
- {
- $lang_array = $this->getLang();
- $code_array = $this->getCode();
- $lang_var = isset($lang_array[ $code_var ]) ? $lang_array[ $code_var ] : $code_var;
- $code_var = isset($code_array[ $code_var ]) ? $code_array[ $code_var ] : $code_array[ 'SUCCESS' ];
- return success($code_var, $lang_var, $data);
- }
- /**
- * 操作失败返回值函数
- * @param string $data
- * @param string $code_var
- * @return array
- */
- public function error($data = '', $code_var = 'ERROR')
- {
- $lang_array = $this->getLang();
- $code_array = $this->getCode();
- $lang_var = isset($lang_array[ $code_var ]) ? $lang_array[ $code_var ] : $code_var;
- $code_var = isset($code_array[ $code_var ]) ? $code_array[ $code_var ] : $code_array[ 'ERROR' ];
- return error($code_var, $lang_var, $data);
- }
- /**
- * 获取语言包数组
- * @return array|mixed
- */
- private function getLang()
- {
- $default_lang = config("lang.default_lang");
- $addon = request()->addon();
- $addon = isset($addon) ? $addon : '';
- $cache_common = Cache::get("lang_app/shopapi/lang/" . $default_lang);
- if (!empty($addon)) {
- $addon_cache_common = Cache::get("lang_app/shopapi/lang/" . $addon . '_' . $default_lang);
- if (!empty($addon_cache_common)) {
- $cache_common = array_merge($cache_common, $addon_cache_common);
- }
- }
- if (empty($cache_common)) {
- $cache_common = include 'app/shopapi/lang/' . $default_lang . '.php';
- Cache::tag("lang")->set("lang_app/shopapi/lang/" . $default_lang, $cache_common);
- if (!empty($addon)) {
- try {
- $addon_cache_common = include 'addon/' . $addon . '/shopapi/lang/' . $default_lang . '.php';
- if (!empty($addon_cache_common)) {
- $cache_common = array_merge($cache_common, $addon_cache_common);
- Cache::tag("lang")->set(
- "lang_app/shopapi/lang/" . $addon . '_' . $default_lang,
- $addon_cache_common
- );
- }
- } catch (\Exception $e) {
- }
- }
- }
- $lang_path = isset($this->lang) ? $this->lang : '';
- if (!empty($lang_path)) {
- $cache_path = Cache::get("lang_" . $lang_path . "/" . $default_lang);
- if (empty($cache_path)) {
- $cache_path = include $lang_path . "/" . $default_lang . '.php';
- Cache::tag("lang")->set("lang_" . $lang_path . "/" . $default_lang, $cache_path);
- }
- $lang = array_merge($cache_common, $cache_path);
- } else {
- $lang = $cache_common;
- }
- return $lang;
- }
- /**
- * 获取code编码
- * @return array|mixed
- */
- private function getCode()
- {
- $addon = request()->addon();
- $addon = isset($addon) ? $addon : '';
- $cache_common = Cache::get("lang_code_app/shopapi/lang");
- if (!empty($addon)) {
- $addon_cache_common = Cache::get("lang_code_app/shopapi/lang/" . $addon);
- if (!empty($addon_cache_common)) {
- $cache_common = array_merge($cache_common, $addon_cache_common);
- }
- }
- if (empty($cache_common)) {
- $cache_common = include 'app/shopapi/lang/code.php';
- Cache::tag("lang_code")->set("lang_code_app/shopapi/lang", $cache_common);
- if (!empty($addon)) {
- try {
- $addon_cache_common = include 'addon/' . $addon . '/shopapi/lang/code.php';
- if (!empty($addon_cache_common)) {
- Cache::tag("lang_code")->set("lang_code_app/shopapi/lang/" . $addon, $addon_cache_common);
- $cache_common = array_merge($cache_common, $addon_cache_common);
- }
- } catch (\Exception $e) {
- }
- }
- }
- $lang_path = isset($this->lang) ? $this->lang : '';
- if (!empty($lang_path)) {
- $cache_path = Cache::get("lang_code_" . $lang_path);
- if (empty($cache_path)) {
- $cache_path = include $lang_path . '/code.php';
- Cache::tag("lang")->set("lang_code_" . $lang_path, $cache_path);
- }
- $lang = array_merge($cache_common, $cache_path);
- } else {
- $lang = $cache_common;
- }
- return $lang;
- }
- /**
- * 检测权限
- */
- protected function checkAuth()
- {
- if (empty($addon)) {
- $auth_name = 'config/auth_shopapi.php';
- } else {
- $auth_name = 'addon/' . $addon . '/config/auth_shopapi.php';
- }
- $auth_array = require $auth_name;
- $this->url = strtolower($this->url);
- if ($this->group_info[ 'is_system' ] == 1) {
- return true;
- }
- if (!isset($auth_array[ $this->url ])) {
- return true;
- }
- $auth_control = event("AuthControl", [ 'key' => $auth_array[ $this->url ], 'app_module' => $this->app_module, 'ajax' => 1 ], 1);
- if (!empty($auth_control)) {
- if ($auth_control[ 'code' ] < 0) {
- return false;
- }
- }
- if (array_key_exists($this->url, $auth_array)) {
- if (strpos(',' . $this->group_info[ 'menu_array' ] . ',', ',' . $auth_array[ $this->url ] . ',')) {
- return true;
- } else {
- return false;
- }
- } else {
- return true;
- }
- }
- /**
- * 添加日志
- * @param unknown $action_name
- * @param unknown $data
- */
- protected function addLog($action_name, $data = [])
- {
- $user = new UserModel();
- $user->addUserLog($this->uid, $this->user_info[ 'username' ], $this->site_id, $action_name, $data);
- }
- }
|