123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- <?php
- /**
- * BaiduController.php UTF-8
- * 百度信息流对接
- *
- * @date : 2018/7/6 11:46
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : ouzhongfu <ozf@huosdk.com>
- * @version : HUOSDK 7.2
- */
- namespace api\promotion\controller\v8;
- use Think\Config;
- //use api\promotion\controller\v8\BaseController;
- use think\Db;
- use Think\Log;
- class BaiduController extends BaseController {
- protected $logtable = 'promotion_baidu_log';
- protected $usertable = 'promotion_baidu_user';
- public $baidu_conf
- = array(
- 'baidu_key' => '', /* key */
- );
- function _initialize() {
- parent::_initialize();
- }
- private function baiduReturn($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->baiduReturn(300);
- }
- /*验证渠道信息*/
- $_pmt_id = $this->request->param('pmtid');
- $_pmt_data = $this->getPmtData($_pmt_id);
- if (!$_pmt_data) {
- $this->baiduReturn(301);
- }
- /*1 查看参数是否配置*/
- $_rs = $this->check($_pmt_data['app_id'], $_pmt_data['agent_id']);
- if (!$_rs) {
- $this->baiduReturn(302);
- }
- /*sign 验证*/
- $_rrs = $this->varifySign($_urldata);
- if (!$_rrs) {
- $this->baiduReturn(303);
- }
- $_data['agent_id'] = $_pmt_data['agent_id'];
- $_data['app_id'] = $_pmt_data['app_id'];
- $_data['imei_md5'] = get_val($_urldata, 'imei_md5', '');
- $_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, 'ts', '');
- $_data['userid'] = get_val($_urldata, 'userid', '');
- $_data['pid'] = get_val($_urldata, 'pid', '');
- $_data['uid'] = get_val($_urldata, 'uid', '');
- $_data['aid'] = get_val($_urldata, 'aid', '');
- $_data['click_id'] = get_val($_urldata, 'click_id', '');
- $_data['sign'] = get_val($_urldata, 'sign', '');
- $_data['create_time'] = time();
- $_data['callback_url'] = get_val($_urldata, 'callback_url', '');
- /*保存数据*/
- if (empty($_data)) {
- $this->baiduReturn(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->baiduReturn();
- }
- }
- return false;
- }
- /**插入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 (2 == $data['os']) {
- $_check_map['imei_md5'] = $data['imei_md5'];
- $_from = 3;
- } elseif (1 == $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']);
- $_baidu_class = new \huolib\promotion\Baidu();
- $_is_while = $_baidu_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->baidu_conf['baidu_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->baidu_conf['baidu_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 '客户端操作系统的类型,1–iOS;2–Android',";
- $_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 .= " `userid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '账户ID',";
- $_sql .= " `pid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '计划ID',";
- $_sql .= " `uid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '单元ID',";
- $_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 .= " `sign` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '验证sign',";
- $_sql .= " `create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间戳',";
- $_sql .= " PRIMARY KEY (`id`)";
- $_sql .= ")ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='百度点击数据记录';";
- try {
- $_rs = db()->execute($_sql);
- if (false === $_rs) {
- Log::write("baidu_log create table ".$_table_name." failed1", 'error');
- return false;
- }
- return true;
- } catch (Exception $_e) {
- Log::write("baidu_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 '客户端操作系统的类型,1–iOS;2–Android',";
- $_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='百度点击用户';";
- try {
- $_rs = db()->execute($_sql);
- if (false === $_rs) {
- Log::write("baidu_log create table ".$_table_name." failed1", 'error');
- return false;
- }
- return true;
- } catch (Exception $_e) {
- Log::write("baidu_log create table ".$_table_name." failed2", 'error');
- return false;
- }
- }
- }
|