# KClient PHP
pro business
KClient PHP — это один из методов интеграции Keitaro, который позволяет подключаться к удаленным ресурсам посредством PHP кода и выполнять динамическую подмену контента без видимого редиректа.
Метод подходит для любых удаленных сайтов, где пристуствует возмонжсть разместить php код или для импорта в webview мобильных приложений.
# Получение KClient PHP
WARNING
Для корректной работы интеграции потребуется использование протокола HTTPS на припаркованном домене и удаленном сайте, на который необходимо установить интеграцию.
# Создание кампании
Создаем кампанию с двумя потоками. Первый поток с действием Do nothing и фильтром БОТ. Что позволит оставлять ботов на сайте
Второй поток используем для наших клиентов, можем добавить и ссылку на редирект и оффер и лендинг, все зависит от вашей воронки трафика.
Настройка такого вида позволят оставлять ботов на сайте и направлять клиентов на необходимой поток.
# Загрузка kclient.php по FTP/SFTP
После создания кампании необходимо подключиться по SFTP.
В директории сайта создайте файл index.php
:
TIP
Если присутствует файл index.html
, удалите файл или переименуйте в index.php
.
После открываем index.php
и вставляем код в самое начало файла (до <html>
и DOCTYPE).
Проверка на UTF-8 BOM
Важным условием добавления и сохранения файла с кодом сайта, является отсутствием BOM в кодировке Utf-8. BOM (Byte Order Mark) — символ вида U+FEFF.
Воспользуйтесь обычным текстовым редактором:
# Скачивание kclient.php
Скачайте файл kclient.php
на вкладке Интеграции
Скачиваем файл и загружаем рядом с файлом index куда вставляли код интеграции.
Основной этап интеграции завершен. При переходе на главную страницу сайта, в код которой добавили интеграцию вызватся созданная кампания Кейтаро.
# Тестирование
Проверьте работу клиента с помощью Лога трафика в кампании.
Откройте сайт, затем смотрите лог трафика. В логе отображается клик и действие которое выбрано для клика в потоке (Редирект на оффер, Do nothing и т.д.).
Включение лога
Если ранее не пользовались логом трафика, включите лог и откройте сайт еще раз.
# Отправка postback
Для отправки postback потребуется subid
, взять который возможно с помощью $client->getSubid();
и положить в сессию:
$_SESSION['subid'] = $client->getSubid();
На странице, с которой отправляется postback, берите subid из сессии:
$url = 'POSTBACK_URL/postback?payout=100&status=sale&subid=' . urlencode($_SESSION['subid']);
file_get_contents($url);
2
Замените POSTBACK_URL
.
Смотрите еще:
- Альтернативное решение с JS адаптером.
- Страница Postback.
# Вывод subid на странице и передача в CRM/партнерскую программу
Если необходимо забирать subid и передавать куда то дальше, без отправки postback скриптом трекера - добавьте метод $client->getSubid();
в код KClient PHP
Выведите subid на форме заявки как <input type="hidden" name="subid" value=<?echo "$subid"?> />
.
Настройка со стороны трекера закончена. Дальше передаете subid
c формы на обработчик (если это необходимо), как <form action="call.php" method="post" >
, либо воспользоваться любым другим способом взятия со страницы и передачи дальше метки, подходящим для партнерки/CRM, в которую необходимо передать subid клика и отрпавить в postback в трекер.
# Создание ссылки оффера
Ссылка на оффер создается методом $client->getOffer()
. Пример:
<?php
require_once dirname(__FILE__) . '/kclient.php';
$client = new KClient('https://domain_tracker/api.php?', 'wzbfwg3dxlmttkvt5v63mbw3x');
?>
<html>
...
<body>
<a href="<?php echo $client->getOffer() ?>">CLICK!</a>
</body>
</html>
2
3
4
5
6
7
8
9
10
В потоке должна использоваться схема Лендинги или Офферы.
Если необходимо вызвать определённый оффер, передавайте в таком виде $client->getOffer(array('offer_id' => ID))
:
<a href="<?php echo $client->getOffer(array('offer_id' => 123));?>">LINK</a>
Если присутствует вероятность, что трекер не вернёт оффер, выставьте ссылку по умолчанию вторым параметром:
<a href="<?php echo $client->getOffer(null, 'https://ya.ru');?>">LINK</a>
# Показ HTML в определенных местах на сайте
- Удалите (закомментируйте) строки:
$client->execute();`
и
$client->executeAndBreak();
- Добавьте:
$GLOBALS['client'] = $client;
- Вставьте код в шаблоне сайта:
<?php echo $GLOBALS['client']->getContent() ?>
# Методы KClient PHP
Метод | Описание |
---|---|
$client->sendAllParams() | Передача параметров из адресной строки |
$client->forceRedirectOffer() | Если в потоке выбран оффер, то выполнить редирект на данный оффер. В ином случае необхолимо использовать getOffer() |
$client->params('param1=c¶m2=b') | Передача строки параметров |
$client->param('extra_param_5', '123') | Альтернативный способ передачи параметра |
$client->sendUtmLabels() | Передача из адресной строки utm-меток |
$client->debug() | Показ отладочной информации |
$client->currentPageAsReferrer() | Отправить адрес текущей страницы в качестве реферера |
$client->keyword('QUERY') | Использование значения QUERY в качестве ключевика |
$client->execute() | Выполнение инструкций Keitaro и с продолжением выполнения кода страницы |
$client->executeAndBreak() | Выполнение инструкций Keitaro с остановкой выполнения страницы. Если передано действие в потоке «Do nothing», остановки не произойдет |
$client->getOffer() | Получение ссылки на оффер. В кампании должен присутствовать поток со схемой Офферы, иначе получите результат no_offer |
$client->getBody() | Получение содержимого body |
$client->getHeaders() | Получение заголовков (headers) |
$client->isUnique(TypE) | Статус уникальности (варианты TYPE: stream, campaign, global) |
$client->isBot() | Статус бота |
$client->disableSessions() | Отключение куки PHP-сессии (без данной куки restoreFromSession не работает) |
$client->restoreFromQuery() | Ловит параметры _subid и _token из запроса и не заводит нового клика |
$client->restoreFromSession() | Восстанавливает предыдущее посещение из сессии и не заводит нового клика |
# Отладка
Проверьте, записаны ли клики в кампании. Смотрите лог трафика или отчёт Клики кампании.
Если кликов нет, добавьте $client->showLog();
после строк ($client->execute()
или $client->executeAndBreak()
).
- Если на странице не появился результат отладки, вероятно, не подключен KClient PHP.
- Если в логе исключительно
Requested: https://tracker.com/api.php
- вероятно проблема с доменом. - Проверьте DNS-кэш, блокировку в РКН.
- Если видите код ошибки, смотрите расшифровку далее.
# Расшифровка ошибок
[REQ_ERR: 400]
— запрос не удалось обработать из-за синтаксической ошибки.[REQ_ERR: 402]
— тип лицензии не профессиональная или лицензия закончилась.[REQ_ERR: 401]
— запрос требует аунтефикации пользователя.[REQ_ERR: 403]
— доступ к указанному ресурсу ограничен.[REQ_ERR: 404]
— сервер не нашел по указанному URI никаких ресурсов.[REQ_ERR: 405]
— указанный метод не применяется к текущему ресурсу.[REQ_ERR: 407]
— необходима авторизация на прокси-сервере.[REQ_ERR: 408]
— превышено время ожидания запроса.[REQ_ERR: 410]
— требуемый ресурс больше не доступен на сервере и адрес расположения неизвестен.[REQ_ERR: 429]
— аномально много запросов.[REQ_ERR: 500]
— внутренняя ошибка сервера.[REQ_ERR: 501]
— сервер не поддерживает функциональных возможностей, необходимых для выполнения запроса.[REQ_ERR: 502]
— сервер, выступая в роли шлюза или прокси-сервера, получил некорректный ответ от сервера.[REQ_ERR: 503]
— сервер не обрабатывает запрос из-за временной перегрузки или технических работ.[REQ_ERR: 504]
— сервер, выступая в роли шлюза или прокси-сервера, не дождался в рамках установленного таймаута ответа от вышестоящего сервера текущего запроса.[REQ_ERR: UNSUPPORTED_PROTOCOL]
— переданный URL содержит неподдерживаемый библиотекой cURL протокол.[REQ_ERR: FAILED_INIT]
— проблема при инициализации запроса.[REQ_ERR: BAD_URL]
— неправильно сформирован URL.[REQ_ERR: COULDNT_RESOLVE_PROXY]
— проблема при определении прокси.[REQ_ERR: COULDNT_RESOLVE_HOST]
— проблема при определении сервера у домена: проверьте DNS.[REQ_ERR: COULDNT_CONNECT]
— сбой при соединении с сервером.[REQ_ERR: PARTIAL_FILE]
— передана не все данные: проверьте системный лог трекера.[REQ_ERR: READ_ERROR]
— ошибка чтения данных.[REQ_ERR: OUT_OF_MEMORY]
— недостаточно памяти.[REQ_ERR: OPERATION_TIMEDOUT]
— превышен лимит ожидания ответа трекера: проверьте, что сервер, где стоит KClient PHP, подключается к трекеру без ошибок.[REQ_ERR: HTTP_POST_ERROR]
— ошибка при HTTP запросе.[REQ_ERR: BAD_FUNCTION_ARGUMENT]
— функция вызвана с неправильными параметрами.[REQ_ERR: TOO_MANY_REDIRECTS]
— аномально много переадресаций, достигнут счётчик разрешённых переадресаций.[REQ_ERR: GOT_NOTHING]
— сервер отправил пустые данные.[REQ_ERR: SEND_ERROR]
— сбой при отправке данных.[REQ_ERR: RECV_ERROR]
— сбой при получении данных.[REQ_ERR: BAD_CONTENT_ENCODING]
— нераспознанная кодировка данных.[REQ_ERR: SSL]
— проблемы с SSL: проверьте настройки Cloudflare (секция SSL).[REQ_ERR: UNKNOWN]
— неизвестная ошибка: проверьте логи трекера.
# KClient PHP FAQ
Почему показывает ошибку 500 или белую страницу?
Добавьте перед кодом интеграции, после <?php
:
ini_set('display_errors', 'on');
error_reporting(7);
2
Как фильтровать ботов?
Создаем два потока. Первый поток с действием Do nothing и фильтром БОТ. Что позволит оставлять ботов на сайте.
Второй поток использовуем для наших клиентов, можем добавить ссылку на редирект, оффер и лендинг, все зависит от воронки трафика.
Данная настройка позволяет оставлять ботов на сайте, и направлять клиентов куда необходимо.
Как не создавать новые клики на внутренних страницах?
Подключите KClient PHP на внутренней странице, добавив $client->restoreFromSession();
:
<?php
require_once dirname(__FILE__) . '/kclient.php';
$client = new KClient('http://domain_tracker/api.php?', 'token');
$client->restoreFromSession();
2
3
4
5
Вызывайте аналогичные методы, но без создания нового клика. Например, создать ссылку на оффер:
<a href="<?php echo $client->getOffer()">offer link</a>
Как взять subid?
SubID берется с помощью метода $client->getSubId()
.
<?php
$url = 'https://domain_tracker/85474/postback?payout=0&status=lead&subid=' . urlencode($client->getSubId());
?>
2
3
Как взять subid на внутренних страницах сайта?
Содержимое SubID сохраняется в сессию:
$_SESSION['sub_id'];
Пример использования:
session_start();
...
$data = array(
'sub1' => $_SESSION['sub_id'],
'name' => $_POST['name'],
...
);
2
3
4
5
6
7
Как оставить определенных пользователей на сайте?
Используйте "Do nothing" в качестве действия потока.
Почему в браузере ошибка TOO_MANY_REDIRECTS?
Один поток отправляет на сайт, где срабатывает проверка и повторный редирект в кампанию, из которой сделан данный редирект. Отредактируйте поток с редиректом на сайт. Смените схему на Действие и выберите "Do nothing" для проверки.
Почему в логе трафика http-редирект, но по факту не происходит?
Причина в том, что файл index.php сохранён в utf-8 с заголовком BOM.
Как выявить: убедитесь, что перед кодом нет пробела или любого другого символа. Как исправить: удалите символ. Если не получится, сохраните заново в UTF-8 without BOM.
Внимание
Не все редакторы видят символ.
Проверка ботов на сайте
/*
код инициализации клиента
*/
if ($client->isBot()) {
echo 'bot';
} else {
echo 'not bot';
}
2
3
4
5
6
7
8
TIP
Чтобы отключить запись данных в статистику, включите в потоке опцию "Подсчет кликов".
Как подключить к Wordpress?
Смотрите плагин WordPress.
Как передать title в качестве ключевой фразы?
Необходимо взять title
в PHP cкриптах. Передается keyword с помощью
метод $client->keyword('...')
:
$client->keyword($myTitle);`
$myTitle
— это пример того, как содержимое переменной передаётся в качестве keyword.
Как указать путь до kclient.php, если сайт не в корне?
Посмотрите директорию сайта и указывайте абсолютный путь:
require '/путь_до_сайта/kclient.php';