* @version : HUOSDK 8.0 */ namespace reyun\api; use huo\controller\request\Request; use huolib\constant\GameConst; use reyun\model\GameReyunModel; use think\Log; class reyun { public $reyun_conf = array( 'appid' => '', /* 热云应用唯一标识 32位的16进制 */ 'appkey' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', /* 热云应用唯一标识 32位的16进制 */ 'url' => 'http://log.reyun.com', /* 请求地址 */ 'install' => '/receive/tkio/install', /* 统计用户首次打开应用方法 */ 'startup' => '/receive/tkio/startup', /* 统计用户打开应用方法 */ 'register' => '/receive/tkio/register', /* 统计用户注册方法 */ 'login' => '/receive/tkio/loggedin', /* 统计用户登陆方法 */ 'payment' => '/receive/tkio/payment', /* 统计用户充值方法 */ 'event' => '/receive/tkio/event', /* 统计用户自定义事件方法 */ 'profile' => '/receive/tkio/profile', /* 统计用户属性方法 */ ); /** * 自定义错误处理 * * @param string $msg * @param string $level * */ private function _error($msg, $level = 'error') { Log::write('line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'&msg='.$msg, $level); } public function __construct() { $_conf_file = CONF_PATH."extra/reyun/config.php"; if (file_exists($_conf_file)) { $this->reyun_conf = include $_conf_file; } } /** * @param string $func * @param array $param * * @param string $who 账户ID * * @return bool 请求成功与失败 */ public function request($func, array $param, $who = '') { $_query_array['appid'] = $this->reyun_conf['appid']; $_context = $param; //$_context['_campaignid'] = '_default_'; if (!empty($who)) { $_query_array['who'] = $who; } $_query_array['context'] = $_context; $_query_str = @json_encode($_query_array); $request_url = $this->reyun_conf['url'].$func; $_rs = Request::httpJsonpost($request_url, $_query_str); if (empty($_rs)) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode( [$request_url, $_query_str] ).'&rs='.$_rs, Log::ERROR ); return false; } $_json_array = @json_decode($_rs, true); if (empty($_json_array) || !is_array($_json_array) || !isset($_json_array['status'])) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode( [$request_url, $_query_str] ).'&rs='.$_rs, Log::ERROR ); return false; } if (0 != $_json_array['status']) { $_result = isset($_json_array['result']) ? json_encode($_json_array['result']) : ''; $this->_error($_result); return false; } return true; } public function check($params = array()) { /* 获取appid */ $_app_id = isset($params['app_id']) ? $params['app_id'] : 0; if (empty($_app_id)) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&rs=' .json_encode($_app_id), Log::ERROR ); return false; } $_reyun_conf = (new GameReyunModel())->getInfoByAppId($_app_id); if (empty($_reyun_conf)) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&rs=' .json_encode($_reyun_conf), Log::ERROR ); return false; } $this->reyun_conf['appid'] = get_val($_reyun_conf, 'reyun_app_id', ''); return true; } /** * 用户首次打开应用 * * @param array $params 请求参数 * * @return bool */ public function install($params = array()) { $_rs = $this->check($params); if (false === $_rs) { return false; } $_context['_campaignid'] = isset($params['agent_id']) ? $params['agent_id'] : '_default_'; if (!empty($params['from']) && GameConst::GAME_ANDROID == $params['from']) { $_context['_deviceid'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_imei'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_idfa'] = 'unknown'; $_context['_idfv'] = 'unknown'; $_context['_androidid'] = $params['device_id']; $_context['_ryos'] = 'android'; } else { $_context['_deviceid'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfa'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfv'] = isset($params['idfv']) ? $params['idfv'] : 'unknown'; $_context['_imei'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_androidid'] = 'unknown'; $_context['_ryos'] = 'ios'; } $_context['_ip'] = isset($params['ip']) ? $params['ip'] : 'unknown'; $_context['_manufacturer'] = 'unknown'; $_context['_ryosversion'] = 'unknown'; if (!empty($params['deviceinfo'])) { $_device_array = explode('||', $params['deviceinfo']); if (isset($_device_array[0])) { $_context['_manufacturer'] = $_device_array[0]; } if (isset($_device_array[1])) { $_context['_ryosversion'] = $_device_array[1]; } } return $this->request($this->reyun_conf['install'], $_context); } /** * 统计用户打开应用方法 * '/receive/tkio/startup' * * @param array $params 请求参数 * * @return bool */ public function startup($params = array()) { $_rs = $this->check($params); if (false === $_rs) { return false; } /* _tz 否 STRING 最长16默认:+8 时区 _devicetype 否 STRING 64 设备类型 _op 否 STRING 32 运营商 _network 否 STRING 16 网络制式2G,3G,WIFI. _os 否 STRING 32 操作系统 _resolution 否 STRING 16 分辨率 */ $_context['_campaignid'] = isset($params['agent_id']) ? $params['agent_id'] : '_default_'; if (!empty($params['from']) && GameConst::GAME_ANDROID == $params['from']) { $_context['_deviceid'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_imei'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_idfa'] = 'unknown'; $_context['_idfv'] = 'unknown'; } else { $_context['_deviceid'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfa'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfv'] = isset($params['idfv']) ? $params['idfv'] : 'unknown'; $_context['_imei'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; } $_context['_ip'] = isset($params['ip']) ? $params['ip'] : 'unknown'; // $_context['_tz'] = ''; // $_context['_devicetype'] = ''; // $_context['_op'] = ''; // $_context['_network'] = ''; // $_context['_os'] = ''; // $_context['_resolution'] = ''; return $this->request($this->reyun_conf['startup'], $_context); } /** * 统计用户注册方法 * '/receive/tkio/register' * * @param array $params 请求参数 * * @return bool */ public function register($params = array()) { $_rs = $this->check($params); if (false === $_rs) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&rs=' .json_encode($_rs), Log::ERROR ); return false; } if (empty($params['mem_id'])) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&msg=缺少玩家id', Log::ERROR ); return false; } $_who = $params['mem_id']; $_context['_campaignid'] = isset($params['agent_id']) ? $params['agent_id'] : '_default_'; if (!empty($params['from']) && GameConst::GAME_ANDROID == $params['from']) { $_context['_deviceid'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_imei'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_idfa'] = 'unknown'; $_context['_idfv'] = 'unknown'; } else { $_context['_deviceid'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfa'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfv'] = isset($params['idfv']) ? $params['idfv'] : 'unknown'; $_context['_imei'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; } $_context['_ip'] = isset($params['ip']) ? $params['ip'] : 'unknown'; return $this->request($this->reyun_conf['register'], $_context, $_who); } /** * 统计用户登陆方法 * '/receive/tkio/login' * * @param array $params 请求参数 * * @return bool */ public function login($params = array()) { $_rs = $this->check($params); if (false === $_rs) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&rs=' .json_encode($_rs), Log::ERROR ); return false; } if (empty($params['mem_id'])) { Log::write( 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&msg=缺少玩家id', Log::ERROR ); return false; } $_who = $params['mem_id']; $_context['_campaignid'] = isset($params['agent_id']) ? $params['agent_id'] : '_default_'; if (!empty($params['from']) && GameConst::GAME_ANDROID == $params['from']) { $_context['_deviceid'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_imei'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_idfa'] = 'unknown'; $_context['_idfv'] = 'unknown'; } else { $_context['_deviceid'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfa'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfv'] = isset($params['idfv']) ? $params['idfv'] : 'unknown'; $_context['_imei'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; } $_context['_ip'] = isset($params['ip']) ? $params['ip'] : 'unknown'; return $this->request($this->reyun_conf['login'], $_context, $_who); } /** * 统计用户充值方法 * '/receive/tkio/payment' * * @param array $params 请求参数 * * @return bool */ public function payment($params = array()) { $_rs = $this->check($params); if (false === $_rs) { return false; } if (empty($params['mem_id'])) { return false; } if (empty($params['order_id'])) { return false; } $_who = $params['mem_id']; $_context['_campaignid'] = isset($params['agent_id']) ? $params['agent_id'] : '_default_'; if (!empty($params['from']) && GameConst::GAME_ANDROID == $params['from']) { $_context['_deviceid'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_imei'] = isset($params['device_id']) ? $params['device_id'] : 'unknown'; $_context['_idfa'] = 'unknown'; $_context['_idfv'] = 'unknown'; } else { $_context['_deviceid'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfa'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; $_context['_idfv'] = isset($params['idfv']) ? $params['idfv'] : 'unknown'; $_context['_imei'] = isset($params['idfa']) ? $params['idfa'] : 'unknown'; } $_context['_ip'] = isset($params['ip']) ? $params['ip'] : 'unknown'; $_context['_transactionid'] = $params['order_id']; $_context['_paymenttype'] = isset($params['payway']) ? $params['payway'] : 0.00; $_context['_currencytype'] = 'CNY'; /* 货币类型,按照国际标准组织ISO 4217中规范的3位字母,例如CNY人民币、USD美金等 */ $_context['_currencyamount'] = isset($params['amount']) ? $params['amount'] : 0.00; /* 支付的真实货币的金额 */ return $this->request($this->reyun_conf['payment'], $_context, $_who); } /** * 统计用户自定义事件方法 * '/receive/tkio/event' * * @param array $params 请求参数 * * @return bool */ public function event($params = array()) { $_rs = $this->check($params); if (false === $_rs) { return false; } return true; } /** * 统计用户属性方法 * '/receive/tkio/profile' * * @param array $params 请求参数 * * @return bool */ public function profile($params = array()) { $_rs = $this->check($params); if (false === $_rs) { return false; } return true; } }