* @version : HUOSDK 7.2 */ namespace api\promotion\controller\v8; use huolib\promotion\Base; use Think\Config; use think\Controller; use think\Db; use Think\Log; class UcController extends BaseController { protected $logtable = 'promotion_uc_log'; protected $usertable = 'promotion_uc_user'; public $uc_conf = array( 'uc_key' => '', /* key */ ); function _initialize() { parent::_initialize(); } private function ucReturn($status = '0') { return parent::hs_api_responce($status); } /** * 点击数据记录 */ public function start() { $_rs = $this->checkLogTable(); if (false == $_rs) { return false; } /* 1 查询是否具有访问权限 */ $_urldata = $this->request->param(); if (empty($_urldata)) { $this->ucReturn(300); } /*验证渠道信息*/ $_pmt_id = $this->request->param('pmtid'); $_pmt_data = $this->getPmtData($_pmt_id); if (!$_pmt_data) { $this->ucReturn(301); } /*1 查看参数是否配置*/ $_rs = $this->check($_pmt_data['app_id'], $_pmt_data['agent_id']); if (!$_rs) { $this->ucReturn(302); } /*sign 验证*/ /*$_rrs = $this->varifySign($_urldata); if (!$_rrs) { $this->ucReturn(303); }*/ $_data['agent_id'] = $_pmt_data['agent_id']; $_data['app_id'] = $_pmt_data['app_id']; $_data['imei_md5'] = get_val($_urldata, 'imei', ''); $_data['idfa'] = get_val($_urldata, 'idfa', ''); $_data['os'] = get_val($_urldata, 'os', ''); $_data['ip'] = get_val($_urldata, 'ip', ''); $_data['ua'] = get_val($_urldata, 'ua', ''); $_data['ts'] = get_val($_urldata, 'time', ''); $_data['create_time'] = time(); $_data['callback_url'] = get_val($_urldata, 'callback', ''); /*保存数据*/ if (empty($_data)) { $this->ucReturn(304); } else { $_rs = Db::name($this->logtable)->insert($_data); if ($_rs) { $_user_table_check = $this->checkUserTable(); if (false == $_user_table_check) { return false; } $_rs = $this->userInsert($_data); $this->ucReturn(); } } } /**插入promotion_toutiao_user表中 * * @param $data * * @return bool|int|string */ public function userInsert($data) { //$_check_map['agent_id'] = $data['agent_id']; $_check_map['app_id'] = $data['app_id']; $_check_map['os'] = $data['os']; if (1 == $data['os']) { $_check_map['imei_md5'] = $data['imei_md5']; $_from = 3; } elseif (0 == $data['os']) { $_check_map['idfa'] = $data['idfa']; $_from = 4; } else { $_check_map['imei_md5'] = $data['imei_md5']; $_from = 3; } $_is_md5 = true; $_check = Db::name($this->usertable)->where($_check_map)->find(); $_base_class = new \huolib\promotion\Base(); $_base_class->entVisitLog($data['agent_id'], $data['app_id']); $_uc_class = new \huolib\promotion\Uc(); $_is_while = $_uc_class->isWhile($_from, $data['imei_md5'], $data['idfa'], $_is_md5); $_rs = false; if (empty($_check) || $_is_while) { $_data['agent_id'] = $data['agent_id']; $_data['app_id'] = $data['app_id']; $_data['os'] = $data['os']; $_data['imei_md5'] = $data['imei_md5']; $_data['idfa'] = $data['idfa']; $_data['create_time'] = $data['create_time']; $_data['update_time'] = $data['create_time']; $_data['status'] = 1; $_data['callback_url'] = $data['callback_url']; if ($_is_while) { $_data['is_test'] = 1; } else { $_data['is_test'] = 2; } $_rs = Db::name($this->usertable)->insert($_data); } if (empty($_check)) { $is_distinct = 1; $_rs = $_base_class->entVisitLog($data['agent_id'], $data['app_id'], $is_distinct); } return $_rs; } /**通过pmt_id获取agent_id跟app_id * * @param $pmt_id * * @return array|bool|false|\PDOStatement|string|\think\Model */ public function getPmtData($pmt_id = 0) { if (empty($pmt_id)) { return false; } $_map['id'] = $pmt_id; $_data = Db::name('promotion_detail')->where($_map)->find(); if (empty($_data)) { return false; } if (is_object($_data)) { $_data = $_data->toArray(); } return $_data; } /**验证是否配置 * * @param int $app_id * @param int $agent_id * * @return bool * @internal param array $params * */ public function check($app_id = 0, $agent_id = 0) { if (empty($app_id) || empty($agent_id)) { return false; } $_map['app_id'] = $app_id; $_map['agent_id'] = $agent_id; $_key = Db::name('promotion_detail')->where($_map)->value('toutiao_key'); if (empty($_key)) { return false; } $this->uc_conf['uc_key'] = $_key; return true; } /**sign验证 * * @param $urldata * * @return bool */ public function varifySign($urldata) { $_url = $this->request->server('REQUEST_SCHEME').'://'.$this->request->server('HTTP_HOST') .$this->request->server('REQUEST_URI'); $_check = stripos($_url, "&sign="); if (!$_check) { return false; } $_check_string = substr($_url, 0, $_check).$this->uc_conf['uc_key']; $_sign = $urldata['sign']; $_check_sign = md5($_check_string); if ($_sign == $_check_sign) { return true; } } /** * @return bool */ private function checkLogTable() { $_table_name = Config::get('database.prefix').$this->logtable; $_sql = ''; $_sql .= "CREATE TABLE IF NOT EXISTS `".$_table_name."` ("; $_sql .= " `id` int(11) NOT NULL AUTO_INCREMENT,"; $_sql .= " `app_id` INT(11) NOT NULL DEFAULT 0 COMMENT '游戏id',"; $_sql .= " `agent_id` INT(11) NOT NULL DEFAULT 0 COMMENT '子渠道id',"; $_sql .= " `imei_md5` VARCHAR(64) NOT NULL COMMENT '用户终端的IMEI码md5后的值',"; $_sql .= " `idfa` VARCHAR(64) NOT NULL COMMENT 'iOS 手机广告唯一标识',"; $_sql .= " `os` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '客户端操作系统的类型,0表示Ios ,1表示Android,2其他',"; $_sql .= " `ip` VARCHAR(32) NOT NULL DEFAULT '未知ip' COMMENT '百度信息流返回玩家ip',"; $_sql .= " `ua` VARCHAR(518) NOT NULL DEFAULT '' COMMENT 'userua信息', "; $_sql .= " `android_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '用户终端的AndroidID',"; $_sql .= " `ts` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '百度信息流返回时间戳',"; $_sql .= " `aid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '创意ID',"; $_sql .= " `click_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '点击唯一标识',"; $_sql .= " `callback_url` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '回调地址',"; $_sql .= " `create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间戳',"; $_sql .= " PRIMARY KEY (`id`)"; $_sql .= " )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='uc点击数据记录';"; try { $_rs = db()->execute($_sql); if (false === $_rs) { Log::write("uc_log create table ".$_table_name." failed1", 'error'); return false; } return true; } catch (Exception $_e) { Log::write("uc_log create table ".$_table_name." failed2", 'error'); return false; } } /** * @return bool */ private function checkUserTable() { $_table_name = Config::get('database.prefix').$this->usertable; $_sql = ''; $_sql .= "CREATE TABLE IF NOT EXISTS `".$_table_name."` ("; $_sql .= " `id` int(11) NOT NULL AUTO_INCREMENT,"; $_sql .= " `app_id` INT(11) NOT NULL DEFAULT 0 COMMENT '游戏id',"; $_sql .= " `agent_id` INT(11) NOT NULL DEFAULT 0 COMMENT '子渠道id',"; $_sql .= " `imei_md5` VARCHAR(64) NOT NULL COMMENT '用户终端的IMEI码md5后的值',"; $_sql .= " `idfa` VARCHAR(64) NOT NULL COMMENT 'iOS 手机广告唯一标识',"; $_sql .= " `os` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '客户端操作系统的类型,0表示Ios ,1表示Android,2其他',"; $_sql .= " `callback_url` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '回调地址',"; $_sql .= " `create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间戳',"; $_sql .= " `update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间戳',"; $_sql .= " `status` TINYINT(2) NOT NULL DEFAULT 1 COMMENT '状态,1为待激活,2为已激活',"; $_sql .= " `is_test` TINYINT(2) NOT NULL DEFAULT 2 COMMENT '是否测试数据,1是,2不是',"; $_sql .= " PRIMARY KEY (`id`)"; $_sql .= " )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='uc点击用户';"; try { $_rs = db()->execute($_sql); if (false === $_rs) { Log::write("uc_log create table ".$_table_name." failed1", 'error'); return false; } return true; } catch (Exception $_e) { Log::write("uc_log create table ".$_table_name." failed2", 'error'); return false; } } }