* @version : HUOOA 1.0 */ namespace huolib\oa; use huolib\oa\Request; use huolib\tool\StrUtils; use huolib\tool\Aes; use think\Db; use think\exception\HttpResponseException; use think\Response; use think\Config; class Oa { /** * 定义相关表名 */ CONST AGENT_DB_NAME = 'user'; //渠道表 CONST MEMBER_DB_NAME = 'member'; //玩家表 CONST ROLE_DB_NAME = 'role'; //角色表 CONST GAME_DB_NAME = 'game'; //游戏表 CONST GAME_SERVER_DB_NAME = 'game_server'; //游戏区服表 CONST AGENT_GAME_DB_NAME = 'agent_game'; //渠道申请游戏表 CONST PAY_DB_NAME = 'pay'; //游戏区服表 CONST OA_GAME_DB_NAME = 'oa_game'; //oa游戏相关表 CONST OA_AGENT_DB_NAME = 'oa_agent'; //推广员oa业绩总览表 CONST OA_GM_LOG_DB_NAME = 'oa_gm_log'; //oa首充扶植记录表 CONST MEM_REG_IP_COLUMN = 'reg_ip'; //玩家表注册ip字段 CONST PAY_STATUS_SUCCESS = 2; //支付成功状态值 CONST MG_ROLE_DB_NAME = 'mg_role'; //支付成功状态值 CONST OA_ADMIN_GROUP_ID = 11; //OA 超级管理员 角色ID CONST OA_LEGION_GROUP_ID = 31; //OA 军团长的 角色ID CONST OA_PROMOTER_GROUP_ID = 61; //OA 推广员的 角色ID CONST SDK_ADMIN_ROLE_ID = 1; //sdk 超级管理员 角色ID CONST SDK_LEGION_ROLE_ID = 23; //sdk 军团长的 角色ID CONST SDK_PROMOTER_ROLE_ID = 231; //sdk 推广员的 角色ID protected $oa_conf = array( "PLAT_ID" => "1",/* 平台ID */ "PLAT_SECURE_KEY" => "",/* 平台的秘钥 */ "METHOD" => "POST",/* 提交方式 */ "SIGN_TYPE" => "MD5",/* 验证方式 */ "OA_HOST" => "",/* 对接服务器 */ "MEM_REG_URL" => 'v1/api/user/reg',/* 用户注册 */ "MEM_LOGIN_URL" => 'v1/api/user/login',/* 用户登录 */ "MEM_UPINFO_URL" => 'v1/api/user/uproleinfo',/* 用户上传角色 */ "MEM_PAY_URL" => 'v1/api/user/pay',/* 用户充值 */ "MEM_UPDATE_URL" => 'v1/api/user/update',/* 用户修改归属*/ "GAME_ADD_URL" => 'v1/api/game/add',/* 添加游戏 */ "GAME_UPDATE_URL" => 'v1/api/game/update',/* 修改游戏 */ "GAME_DELETE_URL" => 'v1/api/game/delete',/* 删除游戏 */ "GAME_RESTORE_URL" => 'v1/api/game/restore',/* 还原已删除游戏 */ "SERVER_ADD_URL" => 'v1/api/server/add',/* 添加游戏区服 */ "SERVER_UPDATE_URL" => 'v1/api/server/update',/* 修改游戏区服 */ "GM_FIRST_URL" => 'v1/api/gm/first',/* 首充回调 */ "GM_FOSTER_URL" => 'v1/api/gm/foster',/* 扶植回调 */ "ADMIN_LOGIN_URL" => 'v1/api/admin/login',/* 登录跳转 */ ); public function __construct() { $this->conf = $this->getOaConf(); } public static function getOaConf() { if (defined('GLOBAL_CONF_PATH') && file_exists(GLOBAL_CONF_PATH."oa.php")) { $oa_conf = include GLOBAL_CONF_PATH."oa.php"; } else { $oa_conf = []; } return $oa_conf; } /** * 是否开启oa * * @return bool */ public static function hasOa() { if (defined('GLOBAL_CONF_PATH') && file_exists(GLOBAL_CONF_PATH."config.php")) { $_global_config = include GLOBAL_CONF_PATH."config.php"; } else { $_global_config = []; } $_oa_conf = self::getOaConf(); if (isset($_oa_conf['OA_HOST']) && $_oa_conf['OA_HOST'] && isset($_global_config['G_OA_EN']) && $_global_config['G_OA_EN'] ) { return true; } return false; } /** * 正确获取值 若不存在则使用默认 * * @copy form member.php * * @param $data * @param $key * @param string $default * * @return string */ public function getVal($data, $key, $default = '') { if (empty($data) || !isset($data[$key])) { return $default; } return $data[$key]; } /** * 火树api返回函数 * * @param int $code * @param string $msg * @param array $data * @param string $type * * @return $this */ public function hs_api_responce($code = 200, $msg = '', $data = array(), $type = "json") { if (empty($data)) { $data = null; } $rdata = array( 'code' => $code, 'msg' => $msg, 'data' => $data ); $response = Response::create($rdata, $type)->code(200); if ($code >= 300) { throw new HttpResponseException($response); } else { return $response; } } /** * 输出json数组 * * @param int $code * @param string $msg * @param array $data */ public function hs_api_json($code = 200, $msg = '', $data = array()) { if (empty($data)) { $data = null; } $rdata = array( 'code' => $code, 'msg' => $msg, 'data' => $data ); echo json_encode($rdata); exit; } /** * 构建url参数 * * @param $func * @param array $param * * @return array|bool */ public static function buildUrlParam($func, $param = array()) { $_param = $param; $oa_conf = self::getOaConf(); $_param['plat_id'] = $oa_conf['PLAT_ID']; $_param['timestamp'] = time(); $_param['sign_type'] = $oa_conf['SIGN_TYPE']; $_query_str = self::buildParam($_param); if (!empty($oa_conf[$func])) { $_url = $oa_conf['OA_HOST'].$oa_conf[$func]; } else { return false; } return array('url' => $_url, 'query_str' => $_query_str); } /** * @param $func * @param array $param */ public static function jumpOa($func, $param = array()) { $_url_info = self::buildUrlParam($func, $param); $_url = $_url_info['url']; $_query_str = $_url_info['query_str']; if (strpos($_url, '?')) { $_all_url=$_url.'&'.$_query_str; } else { $_all_url=$_url.'?'.$_query_str; } // echo $_all_url;exit; // header('location:'.$_all_url); echo ''; exit; } /** * oa方向的aes加密 * * @param string $str * @param string $code * * @return string */ public function aesEnCode($str = '', $code = '') { $oa_conf = self::getOaConf(); $_option = array(); $_option['key'] = $oa_conf['PLAT_SECURE_KEY']; $_option['vi'] = $code ? $code : substr(md5($_option['key']), 0, 16); return Aes::doEncrypt($str, $_option); } /** * 角色id 转oa角色id * * @param int $role_id * * @return int */ public function roleToNodeGroup($role_id = 0) { $_auto = 0; switch ($role_id) { case self::SDK_ADMIN_ROLE_ID: $_auto = self::OA_ADMIN_GROUP_ID; break; case self::SDK_LEGION_ROLE_ID: $_auto = self::OA_LEGION_GROUP_ID; break; case self::SDK_PROMOTER_ROLE_ID: $_auto = self::OA_PROMOTER_GROUP_ID; break; }; return $_auto; } /** * oa角色id 转sdk 角色id * * @param int $group_id * * @return int */ public function nodeGroupToRole($group_id = 0) { $_auto = 0; switch ($group_id) { case self::OA_ADMIN_GROUP_ID: $_auto = self::SDK_ADMIN_ROLE_ID; break; case self::OA_LEGION_GROUP_ID: $_auto = self::SDK_LEGION_ROLE_ID; break; case self::OA_PROMOTER_GROUP_ID: $_auto = self::SDK_PROMOTER_ROLE_ID; break; }; return $_auto; } /** * oa方向的aes解密 * * @param string $str * @param string $code * * @return string */ public function aesDeCode($str = '', $code = '') { $oa_conf = self::getOaConf(); $_option = array(); $_option['key'] = $oa_conf['PLAT_SECURE_KEY']; $_option['vi'] = $code ? $code : substr(md5($_option['key']), 0, 16); return Aes::doDecrypt($str, $_option); } /** * 请求oa 后需更改为curl * * @param string $func * @param array $param * * @return bool */ public static function request($func, $param = array()) { $_url_info = self::buildUrlParam($func, $param); $_url = $_url_info['url']; $_query_str = $_url_info['query_str']; $_cookie = ''; $_timeout = 0; \think\Log::write($_url, 'debug'); \think\Log::write($_query_str, 'debug'); return Request::callBack($_url, $_query_str); } /** * 构建参数 * * @param array $param * * @return bool|string */ public static function buildParam(array $param) { $_param = $param; $oa_conf = self::getOaConf(); $_param['sign'] = self::getSign($param, $oa_conf['PLAT_SECURE_KEY']); return StrUtils::createLinkString($_param); } /** * 构建sign * * @param array $param * @param string $key * * @return string */ public static function getSign($param = array(), $key = '') { $_param = StrUtils::argSort($param); $_str = StrUtils::createLinkstring($_param); $_sign = md5($_str.'&key='.$key); return $_sign; } /** * 获取渠道账号 * * @param $agent_id * * @return mixed|string */ public function getAgentnamebById($agent_id) { if (empty($agent_id)) { return ''; } $_map['id'] = $agent_id; $_rs = Db::name(self::AGENT_DB_NAME)->where($_map)->cache($agent_id, 86400)->value('user_login'); if (empty($_rs)) { return ''; } return $_rs; } /** * 验证签名 * * @param array $param * * @return bool|Oa */ public function checkSign($param = array()) { if (!isset($param['sign'])) { return $this->hs_api_responce('404', '签名错误'); } $_sign = $param['sign']; $_param = $param; unset($_param['sign']); if (isset($_param['version'])) { unset($_param['version']); } $oa_conf = self::getOaConf(); $_param = StrUtils::argSort($_param); $_sign_str = StrUtils::createLinkstring($_param); $_verify_sign = md5($_sign_str.'&key='.$oa_conf['PLAT_SECURE_KEY']); if ($_verify_sign != strtolower($_sign)) { return $this->hs_api_responce('404', '签名错误'); } return true; } /** * 获取玩家用户名 * * @param $mem_id * * @return mixed|string */ public function getUersnameById($mem_id) { if (empty($mem_id)) { return ''; } $_map['id'] = $mem_id; $_rs = Db::name(self::MEMBER_DB_NAME)->where($_map)->cache($mem_id, 86400)->value('username'); if (empty($_rs)) { return ''; } return $_rs; } /** * os转from * * @param string $os * * @return int */ public static function osToFrom($os = '') { $_from = 1; if (empty($os)) { return $_from; } switch (strtolower($os)) { case 'android': $_from = 3; break; case 'ios': $_from = 4; break; case 'wp': $_from = 5; break; default: $_from = 2; break; } return $_from; // 设备的平台(android、ios、wp) // 来源信息 1-WEB、2-WAP、3-Android、4-IOS、5-WP } /** * 获取平台id * @return mixed */ public function getPlatId(){ $oa_conf = self::getOaConf(); return $oa_conf['PLAT_ID']; } /** * 获取加密类型 * @return mixed */ public function getSignType(){ $oa_conf = self::getOaConf(); return $oa_conf['SIGN_TYPE']; } }