Browse Source

add ad track and postback

master
filesite 1 week ago
parent
commit
d1f57de8a8
  1. 26
      conf/app.php
  2. 10
      conf/custom_config_adtracker.json
  3. 10
      themes/tajian/controller/FrontapiController.php
  4. 64
      themes/tajian/controller/SiteController.php

26
conf/app.php

@ -204,6 +204,22 @@ $configs = array( @@ -204,6 +204,22 @@ $configs = array(
"password_auth" => array(
"enable" => false,
),
//广告跟踪参数配置
"ad_tracker" => array(
"enable" => false,
"parameters" => array(
"gclid",
"gadid",
),
//广告跟踪回调接口
"postbackApi" => "",
"postbackParaMap" => array(
"clickid" => 'gclid',
),
),
);
//自定义配置支持
@ -257,4 +273,14 @@ if (file_exists($customConfigFile)) { @@ -257,4 +273,14 @@ if (file_exists($customConfigFile)) {
}catch(Exception $e) {}
}
//广告跟踪自定义配置
$customConfigFile = __DIR__ . "/../runtime/custom_config_adtracker.json";
if (file_exists($customConfigFile)) {
try {
$json = file_get_contents($customConfigFile);
$customConfigs = json_decode($json, true);
$configs = array_merge($configs, $customConfigs);
}catch(Exception $e) {}
}
return $configs;

10
conf/custom_config_adtracker.json

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
{
"ad_tracker": {
"enable": false,
"parameters": ["gclid", "gadid"],
"postbackApi": "",
"postbackParaMap": {
"clickid": "gclid"
}
}
}

10
themes/tajian/controller/FrontapiController.php

@ -790,6 +790,16 @@ eof; @@ -790,6 +790,16 @@ eof;
$shareUrl = "/{$newUser['username']}/";
$msg = "注册完成,开始收藏你喜欢的视频吧,正在为你跳转到专属网址...";
$code = 1;
//广告跟踪回调
try {
$adTrackPostbackRes = $this->adTrackPostBack();
if (!empty($adTrackPostbackRes) && !empty($adTrackPostbackRes['status']) && $adTrackPostbackRes['status'] != 200) {
$this->logError( "Ad tracker postback result status {$adTrackPostbackRes['status']}, response: " . json_encode($adTrackPostbackRes['result']) );
}
}catch(Exception $e) {
$this->logError("Ad tracker postback failed: " . $e->getMessage());
}
}else {
$err = '注册失败,请稍后再试';
}

64
themes/tajian/controller/SiteController.php

@ -9,9 +9,71 @@ require_once __DIR__ . '/../../../plugins/TajianStats.php'; @@ -9,9 +9,71 @@ require_once __DIR__ . '/../../../plugins/TajianStats.php';
Class SiteController extends Controller {
//TODO: 广告跟踪,通过cookie保存广告参数
//广告跟踪,通过cookie保存广告参数
protected function trackAdParameters() {
if (empty(FSC::$app['config']['ad_tracker']) || empty(FSC::$app['config']['ad_tracker']['enable'])) {
return false;
}
$params = FSC::$app['config']['ad_tracker']['parameters'];
if (empty($params)) {
return false;
}
$adParaData = array();
foreach ($params as $key) {
$val = $this->get($key);
if (!empty($val)) {
$adParaData[$key] = $val;
}
}
if (!empty($adParaData)) {
//30天内有效
setcookie('ad_tracker', json_encode($adParaData), time() + 86400*30, '/');
}
}
//广告跟踪回调
protected function adTrackPostBack() {
if (empty(FSC::$app['config']['ad_tracker']) || empty(FSC::$app['config']['ad_tracker']['enable'])) {
return false;
}
$params = FSC::$app['config']['ad_tracker']['parameters'];
if (empty($params)) {
return false;
}
$postbackApi = FSC::$app['config']['ad_tracker']['postbackApi'];
if (empty($postbackApi)) {
return false;
}
//为追加get参数做准备
if (strpos($postbackApi, "?") === false) {
$postbackApi .= "?timestamp=" . time();
}
//从cookie中获取跟踪到的广告参数
$adParaDataFromCookie = !empty($_COOKIE['ad_tracker']) ? json_decode( urldecode($_COOKIE['ad_tracker']), true ) : array();
//用记录下来的广告参数值替换回调API中的变量
$postbackParaMap = FSC::$app['config']['ad_tracker']['postbackParaMap'];
if (!empty($postbackParaMap)) {
foreach ($postbackParaMap as $find => $replace) {
$postbackApi = str_replace("\{{$find}\}", @adParaDataFromCookie[$replace], $postbackApi);
}
}
//把广告参数追加到回调API网址中
foreach($adParaDataFromCookie as $key => $val) {
$postbackApi .= "&{$key}=" . urlencode($val);
}
//请求回调API,所有广告参数同时GET和POST传参数以支持不同传参模式
$timeout = 10;
return $this->request($postbackApi, $adParaDataFromCookie, $timeout);
}
//TODO: 增加cookie跟踪同意/不同意选择,确保用户知道cookie跟踪了哪些数据

Loading…
Cancel
Save