ProfitAds.ru - Инструкция по самостоятельной интеграции.
<?php
class Api {
private $api_url = "";
private $api_key;
private $flow_hash = null;
private $offer_id;
private $ip;
private $user_agent;
private $referer = "";
private $uri_params = "";
private $transit_hash = null;
private $postclick = 30;
private $metrika_id = null;
private $mail_id = null;
private $google_id = null;
private $retarg_vk_id = null;
private $flow_hash_cookie = false;
private $cookie_path = '/';
function __construct($api_url, $api_key, $offer_id) {
// адрес API
$this->api_url = $api_url;
// устанавливаем API HASH
$this->api_key = $api_key;
$this->offer_id = $offer_id;
}
public function init($cookie_path='/', $flow_hash = '') {
$this->ip = $_SERVER["REMOTE_ADDR"];
$this->cookie_path=$cookie_path;
$this->set_flow_hash($flow_hash);
}
public function set_flow_hash($flow_hash = '') {
if ($flow_hash == '') {
if (isset($_COOKIE["flow_hash"]) and ( $_COOKIE["flow_hash"] != '')) {
$this->flow_hash_cookie = true;
$this->flow_hash = $_COOKIE["flow_hash"];
} elseif (isset($_GET["flow_hash"]) and ( $_GET["flow_hash"] != '')) {
$this->flow_hash = $_GET["flow_hash"];
} elseif (isset($_POST["flow_hash"]) and ( $_POST["flow_hash"] != '')) {
$this->flow_hash = $_POST["flow_hash"];
} else {
// ищем в урл последнее вхождение подстроки /xxxx/ (http://landing.domen.ru/sdSsE/?data1=1
$url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$url_ar = explode('/', $url);
$url_ar = array_reverse($url_ar);
if(strpos($this->cookie_path, $url_ar[1])==false)
$this->flow_hash = $url_ar[1];
}
} else {
$this->flow_hash = $flow_hash;
}
}
public function get_flow_hash() {
return $this->flow_hash;
}
public function get_hash() {
return $this->transit_hash;
}
private function setTransitRequestParams() {
// браузер
$this->user_agent = $_SERVER['HTTP_USER_AGENT'];
// определяем реферера
if (isset($_SERVER["HTTP_REFERER"]) and ( $_SERVER["HTTP_REFERER"] != ''))
$this->referer = $_SERVER["HTTP_REFERER"];
else
$this->referer = '';
// параметры URI
$this->uri_params = $_SERVER['REQUEST_URI'];
}
public function insert_transit() {
$this->setTransitRequestParams();
$data = array(
'ip' => $this->ip,
'referer' => $this->referer,
'user_agent' => $this->user_agent,
'uri_params' => $this->uri_params
);
$result = $this->request('insert_transit', $data);
$this->setTransitInfo($result);
}
private function setTransitInfo($result) {
$this->transit_hash = $result->transit_hash;
if (isset($result->postclick))
$this->postclick = $result->postclick;
if (isset($result->metrika_id))
$this->metrika_id = $result->metrika_id;
if (isset($result->mail_id))
$this->mail_id = $result->mail_id;
if (isset($result->google_id))
$this->google_id = $result->google_id;
if (isset($result->retarg_vk_id))
$this->retarg_vk_id = $result->retarg_vk_id;
if (isset($result->trafficback_url) and ( $result->trafficback_url != '')) {
header("Location: " . $result->trafficback_url);
}
setcookie("hash", $this->transit_hash, time() + 3 * 86400, $this->cookie_path);
if ($this->flow_hash_cookie == false)
setcookie("flow_hash", $this->flow_hash, time() + $this->postclick * 86400, $this->cookie_path);
}
public function get_metrika_id() {
if ($this->metrika_id != null)
return $this->metrika_id;
}
public function get_mail_id() {
if ($this->mail_id != null)
return $this->mail_id;
}
public function get_google_id() {
if ($this->google_id != null)
return $this->google_id;
}
public function get_retarg_vk_id() {
if ($this->retarg_vk_id != null)
return $this->retarg_vk_id;
}
private function getTransitHash() {
if (isset($_COOKIE["hash"]) and ( $_COOKIE["hash"] != ''))
return $_COOKIE["hash"];
if (isset($_GET["hash"]) and ( $_GET["hash"] != ''))
return $_GET["hash"];
if (isset($_POST["hash"]) and ( $_POST["hash"] != ''))
return $_POST["hash"];
}
public function insert_order($order) {
$this->transit_hash = $this->getTransitHash();
$data = array(
'ip' => $this->ip,
'transit_hash' => $this->transit_hash,
'order' => $this->json_encode_cyr($order)
);
$result = $this->request('insert_request', $data);
return 'true';
}
private function request($method, $data) {
if (!$method)
return false;
$data['api_key'] = $this->api_key;
$data['offer_id'] = $this->offer_id;
$data['flow_hash'] = $this->flow_hash;
$request_data = http_build_query($data);
$json = json_decode($this->goCurl($method, $request_data));
if ($json->status_code != 200) {
die($json->status_code . ' - ' . $json->status_text);
}
return $json->response;
}
private function goCurl($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->api_url . $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
//echo curl_error($ch);
curl_close($ch);
//print_r($result);
return $result;
}
function json_encode_cyr($str) {
$arr_replace_utf = array('\u0410', '\u0430', '\u0411', '\u0431', '\u0412', '\u0432',
'\u0413', '\u0433', '\u0414', '\u0434', '\u0415', '\u0435', '\u0401', '\u0451', '\u0416',
'\u0436', '\u0417', '\u0437', '\u0418', '\u0438', '\u0419', '\u0439', '\u041a', '\u043a',
'\u041b', '\u043b', '\u041c', '\u043c', '\u041d', '\u043d', '\u041e', '\u043e', '\u041f',
'\u043f', '\u0420', '\u0440', '\u0421', '\u0441', '\u0422', '\u0442', '\u0423', '\u0443',
'\u0424', '\u0444', '\u0425', '\u0445', '\u0426', '\u0446', '\u0427', '\u0447', '\u0428',
'\u0448', '\u0429', '\u0449', '\u042a', '\u044a', '\u042b', '\u044b', '\u042c', '\u044c',
'\u042d', '\u044d', '\u042e', '\u044e', '\u042f', '\u044f');
$arr_replace_cyr = array('А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д', 'Е', 'е',
'Ё', 'ё', 'Ж', 'ж', 'З', 'з', 'И', 'и', 'Й', 'й', 'К', 'к', 'Л', 'л', 'М', 'м', 'Н', 'н', 'О', 'о',
'П', 'п', 'Р', 'р', 'С', 'с', 'Т', 'т', 'У', 'у', 'Ф', 'ф', 'Х', 'х', 'Ц', 'ц', 'Ч', 'ч', 'Ш', 'ш',
'Щ', 'щ', 'Ъ', 'ъ', 'Ы', 'ы', 'Ь', 'ь', 'Э', 'э', 'Ю', 'ю', 'Я', 'я');
$str1 = json_encode($str);
$str2 = str_replace($arr_replace_utf, $arr_replace_cyr, $str1);
return $str2;
}
function normalizeTel($tele) {
$ar_tele = array(' ', '(', ')', '+', '-', '_');
$tele = str_replace($ar_tele, '', $tele);
return $tele;
}
}
--------------------------------------
Установка фиксирующего кода на лендинг
--------------------------------------
0. Перед началом интеграции получите от менеджера сети следующую информацию:
- Ваш апи-хэш
- ID Вашего оффера
1. В корневую папку Вашего лендинга положите файл api2.php. Код этого файла Вы можете найти по ссылке:
2. Добавьте в самое начало Вашего лендинга (файл index.php) следующий код, изменив в нем параметры на свои.
--------------------------------------
<?php
require_once 'api2.php'; // адрес к файлу api.2php
// устанавливаем путь к API ПП, api-hash рекламодателя и ID оффера
// Пример:
// $api = new Api("http://profitads.ru/api2/", "Ваш апи-ключ", ID Вашего оффера);
$api = new Api("http://profitads.ru/api2/", "f66801af9d6f556e6742cb577ffceca3", 123456);
// путь для установки cookies ( '/' - если лендинг распложен на http://domen.ru, '/land/' - http://domen.ru/land/
$cookie_path='/land/';
if (isset($_GET['clear_cookies']) and ( $_GET['clear_cookies'] == 1)) {
$api->clearCookies($cookie_path);
}
if(isset($flow_hash))
$api->init($cookie_path, $flow_hash);
else
$api->init($cookie_path);
if(!isset($form_url))
// Укажите абсолютный адрес скрипта, который обрабатывает заказы с Вашего лендинга
// (отправляет на почту, фиксирует в БД, отправляет в CRM и т.п.
$form_url='http://land.clickfat.ru/land/getform.php';
// Укажите абсолютный адрес Вашего лендинга.
$base_url='http://land.clickfat.ru/land/';
// фиксируем посещение
$api->insert_transit();
$metrika_id = $api->get_metrika_id();
$mail_id = $api->get_mail_id();
$google_id = $api->get_google_id();
$retarg_vk_id = $api->get_retarg_vk_id();
?>
--------------------------------------
3. Сразу после открывающего тега "<body>" вставьте следующий код (ничего в нем не изменяйте):
--------------------------------------
<?php if (isset($metrika_id)) : ?>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function () {
try {
w.yaCounter<?= $metrika_id; ?> = new Ya.Metrika({id:<?= $metrika_id; ?>,
clickmap: true,
trackLinks: true,
accurateTrackBounce: true});
} catch (e) {
}
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () {
n.parentNode.insertBefore(s, n);
};
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else {
f();
}
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="//mc.yandex.ru/watch/<?= $metrika_id; ?>" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
<?php endif; ?>
<?php if (isset($mail_id)) : ?>
<!-- Rating@Mail.ru counter -->
<script type="text/javascript">
var _tmr = _tmr || [];
_tmr.push({id: "<?= $mail_id; ?>", type: "pageView", start: (new Date()).getTime()});
(function (d, w) {
var ts = d.createElement("script");
ts.type = "text/javascript";
ts.async = true;
ts.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//top-fwz1.mail.ru/js/code.js";
var f = function () {
var s = d.getElementsByTagName("script")[0];
s.parentNode.insertBefore(ts, s);
};
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else {
f();
}
})(document, window);
</script><noscript><div style="position:absolute;left:-10000px;">
<img src="//top-fwz1.mail.ru/counter?id=<?= $mail_id; ?>;js=na" style="border:0;" height="1" width="1" alt="Рейтинг@Mail.ru" />
</div></noscript>
<!-- //Rating@Mail.ru counter -->
<?php endif; ?>
<?php if (isset($google_id)) : ?>
<!-- Google Analytics -->
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', '<?= $google_id ?>', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
<?php endif; ?>
<?php if (isset($retarg_vk_id)) : ?>
<script type="text/javascript">(window.Image ? (new Image()) : document.createElement('img')).src = location.protocol + '//vk.com/rtrg?r=<?= $retarg_vk_id ?>';</script>
<?php endif; ?>
--------------------------------------
4. Значение атрибута "action" для всех тегов "<form>" установите равным "<?=$form_url?>".
Получится примерно так:
--------------------------------------
<form action='<?=$form_url?>' method='post'>
<input type='text' name='name' value='' placeholder='Введите Ваше имя' required>
<input type='text' name='phone' value='' placeholder='Введите Ваш телефон' required>
</form>
--------------------------------------
5. Все пути к ссылкам, css- и js-файлам, а также изображениям в Вашей верстке прописываем в таком виде:
--------------------------------------
Было: <link type="text/css" rel="stylesheet" href="css/css.css" />
Стало: <link type="text/css" rel="stylesheet" href="<?=$base_url?>css/css.css" />
Было: <script src="assets/scripts/script.js"></script>
Стало: <script src="<?=$base_url?>assets/scripts/script.js"></script>
Было: <img src="assets/img/gallery/1_prev.png" alt="">
Стало: <img src="<?=$base_url?>assets/img/gallery/1_prev.png" alt="">
--------------------------------------