BaseApi.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2015-2025 山西牛酷信息科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: http://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\api\controller;
  13. use app\model\system\Api;
  14. use extend\RSA;
  15. use think\facade\Cache;
  16. class BaseApi
  17. {
  18. public $lang;
  19. public $params;
  20. public $token;
  21. protected $member_id;
  22. protected $auth_key = 'a222221111asssscvsrdf!@#';
  23. public $app_type;
  24. protected $api_config;
  25. public function __construct()
  26. {
  27. //获取参数
  28. $this->params = input();
  29. $this->getApiConfig();
  30. $this->decryptParams();
  31. }
  32. /**
  33. * api请求参数解密
  34. */
  35. private function decryptParams()
  36. {
  37. if ($this->api_config['is_use'] && !empty($this->api_config['value']) && isset($this->params['encrypt'])) {
  38. $decrypted = RSA::decrypt($this->params['encrypt'], $this->api_config['value']['private_key'], $this->api_config['value']['public_key']);
  39. if ($decrypted['code'] >= 0) {
  40. $this->params = json_decode($decrypted['data'], true);
  41. } else {
  42. $this->params = [];
  43. }
  44. }
  45. }
  46. /**
  47. * 获取api配置
  48. */
  49. private function getApiConfig()
  50. {
  51. $api_model = new Api();
  52. $config_result = $api_model->getApiConfig();
  53. $this->api_config = $config_result["data"];
  54. }
  55. /**
  56. * 检测token(使用私钥检测)
  57. */
  58. protected function checkToken() : array
  59. {
  60. if (empty($this->params['token'])) return error('-2', 'token不能为空');
  61. if ($this->api_config['is_use'] && isset($this->api_config['value']['private_key']) && !empty($this->api_config['value']['private_key'])) {
  62. $decrypt = decrypt($this->params['token'], $this->api_config['value']['private_key']);
  63. } else {
  64. $decrypt = decrypt($this->params['token']);
  65. }
  66. if (empty($decrypt)) return $this->error('', 'TOKEN_ERROR');
  67. $data = json_decode($decrypt, true);
  68. if (!isset($data['member_id']) || empty($data['member_id'])) return $this->error('', 'TOKEN_ERROR');
  69. if (!empty($data['expire_time']) && $data['expire_time'] > time()) return $this->error('', 'TOKEN_EXPIRE');
  70. $this->member_id = $data['member_id'];
  71. return success(0, '', $data);
  72. }
  73. /**
  74. * 创建token
  75. * @param int $expire_time 有效时间 0为永久 单位s
  76. */
  77. protected function createToken($member_id, $expire_time = 0)
  78. {
  79. $data = [
  80. 'member_id' => $member_id,
  81. 'expire_time' => empty($expire_time) ? 0 : time() + $expire_time
  82. ];
  83. if ($this->api_config['is_use'] && isset($this->api_config['value']['private_key']) && !empty($this->api_config['value']['private_key'])) {
  84. $token = encrypt(json_encode($data), $this->api_config['value']['private_key']);
  85. } else {
  86. $token = encrypt(json_encode($data));
  87. }
  88. return $token;
  89. }
  90. /**
  91. * 返回数据
  92. * @param $data
  93. * @return false|string
  94. */
  95. public function response($data)
  96. {
  97. $data['timestamp'] = time();
  98. return json_encode($data, JSON_UNESCAPED_UNICODE);
  99. }
  100. /**
  101. * 操作成功返回值函数
  102. * @param string $data
  103. * @param string $code_var
  104. * @return array
  105. */
  106. public function success($data = '', $code_var = 'SUCCESS')
  107. {
  108. $lang_array = $this->getLang();
  109. $code_array = $this->getCode();
  110. $lang_var = isset($lang_array[ $code_var ]) ? $lang_array[ $code_var ] : $code_var;
  111. $code_var = isset($code_array[ $code_var ]) ? $code_array[ $code_var ] : $code_array['SUCCESS'];
  112. return success($code_var, $lang_var, $data);
  113. }
  114. /**
  115. * 操作失败返回值函数
  116. * @param string $data
  117. * @param string $code_var
  118. * @return array
  119. */
  120. public function error($data = '', $code_var = 'ERROR')
  121. {
  122. $lang_array = $this->getLang();
  123. $code_array = $this->getCode();
  124. $lang_var = isset($lang_array[ $code_var ]) ? $lang_array[ $code_var ] : $code_var;
  125. $code_var = isset($code_array[ $code_var ]) ? $code_array[ $code_var ] : $code_array['ERROR'];
  126. return error($code_var, $lang_var, $data);
  127. }
  128. /**
  129. * 获取语言包数组
  130. * @return Ambigous <multitype:, unknown>
  131. */
  132. private function getLang()
  133. {
  134. $default_lang = config("lang.default_lang");
  135. $addon = request()->addon();
  136. $addon = isset($addon) ? $addon : '';
  137. $cache_common = Cache::get("lang_app/api/lang/" . $default_lang);
  138. if (!empty($addon)) {
  139. $addon_cache_common = Cache::get("lang_app/api/lang/" . $addon . '_' . $default_lang);
  140. if (!empty($addon_cache_common)) {
  141. $cache_common = array_merge($cache_common, $addon_cache_common);
  142. }
  143. }
  144. if (empty($cache_common)) {
  145. $cache_common = include 'app/api/lang/' . $default_lang . '.php';
  146. Cache::tag("lang")->set("lang_app/api/lang/" . $default_lang, $cache_common);
  147. if (!empty($addon)) {
  148. try {
  149. $addon_cache_common = include 'addon/' . $addon . '/api/lang/' . $default_lang . '.php';
  150. if(!empty($addon_cache_common)) {
  151. $cache_common = array_merge($cache_common, $addon_cache_common);
  152. Cache::tag("lang")->set("lang_app/api/lang/" . $addon . '_' . $default_lang, $addon_cache_common);
  153. }
  154. } catch (\Exception $e) {
  155. }
  156. }
  157. }
  158. $lang_path = isset($this->lang) ? $this->lang : '';
  159. if (!empty($lang_path)) {
  160. $cache_path = Cache::get("lang_" . $lang_path . "/" . $default_lang);
  161. if (empty($cache_path)) {
  162. $cache_path = include $lang_path . "/" . $default_lang . '.php';
  163. Cache::tag("lang")->set("lang_" . $lang_path . "/" . $default_lang, $cache_path);
  164. }
  165. $lang = array_merge($cache_common, $cache_path);
  166. } else {
  167. $lang = $cache_common;
  168. }
  169. return $lang;
  170. }
  171. /**
  172. * 获取code编码
  173. * @return Ambigous <multitype:, unknown>
  174. */
  175. private function getCode()
  176. {
  177. $addon = request()->addon();
  178. $addon = isset($addon) ? $addon : '';
  179. $cache_common = Cache::get("lang_code_app/api/lang");
  180. if (!empty($addon)) {
  181. $addon_cache_common = Cache::get("lang_code_app/api/lang/" . $addon);
  182. if (!empty($addon_cache_common)) {
  183. $cache_common = array_merge($cache_common, $addon_cache_common);
  184. }
  185. }
  186. if (empty($cache_common)) {
  187. $cache_common = include 'app/api/lang/code.php';
  188. Cache::tag("lang_code")->set("lang_code_app/api/lang", $cache_common);
  189. if (!empty($addon)) {
  190. try {
  191. $addon_cache_common = include 'addon/' . $addon . '/api/lang/code.php';
  192. if (!empty($addon_cache_common)) {
  193. Cache::tag("lang_code")->set("lang_code_app/api/lang/" . $addon, $addon_cache_common);
  194. $cache_common = array_merge($cache_common, $addon_cache_common);
  195. }
  196. } catch (\Exception $e) {
  197. }
  198. }
  199. }
  200. $lang_path = isset($this->lang) ? $this->lang : '';
  201. if (!empty($lang_path)) {
  202. $cache_path = Cache::get("lang_code_" . $lang_path);
  203. if (empty($cache_path)) {
  204. $cache_path = include $lang_path . '/code.php';
  205. Cache::tag("lang")->set("lang_code_" . $lang_path, $cache_path);
  206. }
  207. $lang = array_merge($cache_common, $cache_path);
  208. } else {
  209. $lang = $cache_common;
  210. }
  211. return $lang;
  212. }
  213. }