# KClient PHP

Обратите внимание!

Доступно только в профессиональной и бизнес редакции

# Общая информация

KClient PHP — интерфейс для получения результата выполнения кампании и их потоков. Для управления кампаниями и получаением отчетов смотрите Admin API.

При запросе к API необходимо передавать «token» кампании. Взять его можно со страницы редактирования кампании, слева внизу в настройках кампании.

# API URL

Префикс доступа к KClient PHP:

/click_api/v3/

# Пример запроса

curl "http://keitaro.soft.project/click_api/v3?token=ebd928ea"

# Параметры

Специальные параметры для API:

  • ip — IP адрес вида IPv4;
  • user_agent;
  • language;
  • landing_id;
  • uniqueness_cookie — текущее содержимое cookie;
  • log — нужен ли лог обработки клика (1 или 0);
  • info — получить блок info (1 или 0);
  • force_redirect_offer — выполнить действие оффера, иначе вернется только info.token. Также параметры для кампаний.

# Ответ

Ответ возвращается в формате JSON. Его атрибуты:

Атрибут Тип Описание
headers array Массив header ответов
body string Тело ответа (например, текст страницы)
contentType string Тип ответа (в случае с json, будет «application/json; charset=utf-8»)
uniqueness_cookie string Cookie, которое необходимо отправлять в дальнейших запросах к KClient PHP.
log array Содержимое лога обработки клика
cookies_ttl int Количество часов, на протяжении которых нужно хранить куки на стороне сайта
info object Контейнер с информацией по клику
info.sub_id string
info.campaign_id int
info.stream_id int
info.landing_id int
info.offer_id array
info.token string
info.uniqueness array
info.uniqueness.campaign boolean
info.uniqueness.stream boolean
info.uniqueness.global boolean
info.is_bot boolean

# Пример запроса и ответа

curl "http://tracker.com/click_api/v3?token=ebd928ea&log=1&info=1"

{
    "body": null,
    "contentType": "text/html; charset=utf-8",
    "headers": [
        "Location: http://domain.com/?data=&utm-campaign=aff1"
    ],
    "info": {
        "campaign_id": 2,
        "stream_id": 1117,
        "sub_id": "o2q6e42hs08jq",
        "type": "location",
        "url": "http://domain.com/?data=$keyword&utm-campaign=aff1"
    },
    "log": [
        "Processing campaign 2",
        "Referrer: ",
        "Source: ",
        "Keyword: ",
        "IP: 127.0.0.1",
        "UserAgent: HTTPie/0.6.0",
        "Language: ",
        "Is unique in campaign: no",
        "Checking stream #1282",
        "Filter  \"uniqueness\": allow",
        "Filter \"uniqueness\": rejected",
        "Checking stream #1343",
        "Filter \"region\": rejected",
        "Checking stream #1355",
        "Filter  \"limit\": allow",
        "Filter \"ip\": rejected",
        "Checking stream #1117",
        "Accepted by filters",
        "Stream #1117",
        "Send headers: Location: http://domain.com/?data=&utm-campaign=aff1",
        "[Profiler] 0.101 sec.  1 sql queries, 9MB (+7MB)"
    ],
    "uniqueness_cookie": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1wic3RyZWFtc1wiOntcIjExMTdcIjoxNDkwNzA1MTQyfSxcImNhbXBhaWduc1wiOntcIjJcIjoxNDkwNzA1MTQyfSxcInRpbWVcIjoxNDkwNzA1MTQyfSJ9._u5H9oOOdyp02VTnDN8VG47oLDoqRHHKyYI3ChxRqw8"
}

# Есть ли готовый клиент?

Да, Click API Client.

# Как отправить на оффер?

Сформируйте ссылку по формату:

http://trackerdomain.com/?_lp=1&_token=info.token

info.token вы получите при первом запросе к API.

# FAQ по KClient PHP

# Как подключить к Wordpress?

Смотрите страницу WordPress плагин.

# Как сделать, чтобы после кода не загружался сайт?

Замените

$client->execute(); на

$client->executeAndBreak();

# Как передать title в качестве ключевика?

Для этого вы должны знать как получить title в php скриптах. Передавать ключевик нужно через метод $client->keyword('...'):

$client->keyword($myTitle);

$myTitle - это лишь пример того, как содержимое переменной передается в качестве ключевика.

# Как показывать HTML код из потока в определенном месте?

  1. Удалите строки:

$client->execute();

и

$client->executeAndBreak();

  1. Добавьте:

$GLOBALS['client'] = $client;

  1. В нужном месте сайта вставьте:

<?php echo $GLOBALS['client']->getContent() ?>

# Как решать проблемы с KClient PHP?

В первую очередь проверьте, доходят ли клики до трекера. Для этого смотрите лог трафика и отчет Клики кампании.

Если кликов нет. Добавьте в конец кода интеграции:

$client->showLog();

После $client->execute() и $client->executeAndBreak().

Это выведет отладочную информацию прямо на страницу.

Если лога нет, добавьте еще перед кодом интеграции (после <?php):

ini_set('display_errors', 'on');
error_reporting(7);

Если на странице ничего не появилось, значит у вас KClient PHP не подключен. Если вы видите только Requested: https://tracker.com/api.php - это значит домен с трекером недоступен для этого сайта (причины: кэш днс, блокировка РКН или просто не рабочий домен).

# Как оставлять пользователя на сайте при срабатывании определенного потока?

Используйте в потоке действие «Ничего не делать».

# Как проверить, считает ли Keitaro пользователя ботом?

/*
код инициализации клиента
*/
if ($client->isBot()) {
   echo 'bot';
} else {
   echo 'not bot';
}

# Почему не происходит редиректа на оффер?

По умолчанию, оффер подключается как ссылка с помощью $client->getOffer(). Чтобы выполнялся редирект оффера, добавьте строку:

$client->forceRedirectOffer();

# Как указать путь до kclick_client.php при наличии папок?

Посмотрите директорию вашего сайта и указывайте абсолютный путь:

require '/путь_до_сайта/kclick_client.php';
...

# Почему на сайте виден php-код и сам он не выполняется?

  1. Убедитесь, что имя файла, где установлен код с расширением .php

  2. Сам код должен быть обернут в теги:

<?php
....код....
?>

# Почему в браузере ошибка TOO_MANY_REDIRECTS

Это значит, что один ваш поток отправляет на сайт, где снова срабатывает проверки и снова его отправляет редиректом. Отредактируйте поток с редиректом на сайт. Смените схему на Действие и выберите «Ничего не делать».

# Почему в логе трафика http-редирект, но по факту не происходит?

Причина в том, что файл index.php сохранен в utf-8 с заголовком BOM.

Как выявить: смотрите нет ли пробела или какого-то символа перед кодом.

Как исправить: Удалить этот символ. Если не получится, пересохранить в «UTF-8 without BOM».

Важно! Не все редакторы видят этот символ.

# Как передать subid в скрипте m1-shop.ru используя KClient PHP?

SubId можно подключить через метода $client->getSubId(). Вот пример его использования в скрипте m1-shop:

<?php
require_once 'kclick_client.php';
$client = new KClickClient('http://example.con/api.php', 'token');
?>
<html>
...
<script type="text/javascript">
var m1_product_id = 123;
var ref = 123;
var script = document.createElement("script");
script.src = "http://m1-shop.ru/send_order/?ref="+ref+"&s=<?php echo $client->getSubId() ?>&w="+getC("w")+"&t="+getC("t")+"&p="+getC("p")+"&m="+getC("m")+"&product_id="+m1_product_id+'&out=1';
document.body.appendChild(script);
</script>

И код отправки заказа:

<script type="application/javascript">
function urlGen(f){
var i1 = 'http://m1-shop.ru/send_my_order/';
var i2 = '<?php echo $client->getSubId(); ?>';
var i3 = getC("w");
var i4 = getC("t");
var i5 = getC("p");
var i6 = getC("m");
f.action = i1 + '?s=' + i2 + '&w=' + i3 + '&t=' + i4 + '&p=' + i5 + '&m=' + i6;
return true;
}
</script>

# Как получить subid на второстепенных страницах?

Содержимое subid сохравняется в сессию:

$_SESSION['sub_id'];

Вы можете использовать для постановки в своих скриптах:

session_start(); // если сессия не использовалась ранее, то лучше запустить ее.
...
$data = array(
 'sub1' => $_SESSION['sub_id'],
 'name' => $_POST['name'],
  ...
);

# Как использовать KClient PHP на внутренних страницах?

Подключите KClient PHP на внутренней странице, добавив $client->restoreFromSession(); :

<?php
require_once dirname(__FILE__) . '/kclick_client.php';
$client = new KClickClient('http://..../api.php?', 'TOKEN');

$client->restoreFromSession();

Теперь можете вызывать те же методы, но без создания нового клика:

<a href="<?php echo $client->getOffer()">offer link</a>

# Расшифровка ошибок при запросе

  • [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: 505] - сервер не поддерживает или отказывается поддерживать указанную в запросе версию протокола HTTP.
  • [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] - неизвестная ошибка. Проверьте логи трекера.