API интеграция для передачи лидов из Кейтаро в CPA сеть kma.biz

настройка api передачи лидов в cpa kma API интеграции с ПП

Привет, друзья! Сегодня рассмотрим, как написать API для передачи лидов с наших сайтов в партнерку kma.biz. Также настроим постбеки в Кейтаро и партнерской программе (ПП). Детально разберем, как работает API партнерки, и поделюсь некоторыми полезными советами, такими как настройка пикселя Facebook и отсечение дубликатов лидов.

kma.biz в целом довольно адекватная партнерка. У них отлично организован вывод средств: без запросов и прочей волокиты, достаточно нажать две кнопки в кабинете ПП, и в 19:00 выплата у вас на кошельке. Они имеют свои инхаус офферы, которые обычно идут с гарантом. Однако, ставки иногда приходится выбивать, возможно, они задумаются над этим вопросом.

Начнем настройку api для kma.biz и написания постбеков

Настройка постбеков для ПП kma.biz

В Кейтаро уже есть встроенный шаблон для kma.biz. Если вы используете другой трекер или по каким-то причинам шаблона нет, вот настройка:

  • Название: Kma.biz
  • Параметры для оффера: subid={subid}

Postback URL: ВАШ_Домен/postback?subid={data1}&payout={sum}&status={status}&stream={stream}&orderid={orderid}&bannerid={bannerid}&campaignid={campaignid}&currency={currency}&lead_status=P&sale_status=A&rejected_status=D,F&from=kma.biz

Теперь перейдем в партнерскую программу:

  1. Идем в ПП → Инструменты → Глобальный Postback.
  2. Метод передачи: GET
  3. Ставим галочки: Создание заказа, Подтверждение заказа, Отмена заказа
  4. Метод — POST
  5. Статус — Отмечаем все статусы
  6. Чекбокс — Отправлять комиссию только со статусом Апрув — оставляем не отмеченным!
  7. В поле postbackURL вписываем наш постбек: ВАШ_Домен/postback?subid={data1}&payout={sum}&status={status}&stream={stream}&orderid={orderid}&bannerid={bannerid}&campaignid={campaignid}&currency={currency}&lead_status=P&sale_status=A&rejected_status=D,F&from=kma.biz

После этого нажимаем кнопку «Применить».

Первый этап настройки завершен

Постбеки в партнерской сети kma.biz и Кейтаро настроены. Теперь приступим к самой интеграции.

Интеграция API на лендинге

Заходим на наш лендинг и находим форму. По традиции уже, в форму вставляем макрос с sub_id для корректной работы постбеков:

<input type="hidden" name="sub1" value="{subid}">

Пример формы:

<form action="api.php" method="POST">
 
    <input class="wheel_input" name="name" placeholder="Nombre" type="text" required>
    <input class="wheel_input" name="phone" placeholder="Numero de telefono" type="tel"
        required>
    <button class="main-link">КУПИТЬ</button>
 
    <input type="hidden" name="sub1" value="{subid}">
    <input type='hidden' name='pxl' value="<?php echo $_GET['pxl']; ?>" />
 
</form>

На примере показана довольно обычная стандартная форма, в которую мы добавили сабайди и код пикселя, который приходит на лендинг в ссылке, в параметре: pxl

Разбор файла api.php для ПП kma.biz

Теперь разберем файл api.php, на который ссылается наша форма, для отправки лидов в ПП. Этот скрипт написан на PHP и выполняет следующие основные функции:

Объявление переменных и функций

$apiToken = 'Апи токен кма';

$apiToken — это токен для авторизации при обращении к внешнему API.

2. Функция для проверки дублирования лидов

function isDuplicateLead($phone)
{
    $file = 'leads.txt';

    if (!file_exists($file)) {
        file_put_contents($file, '');
    }

    $leads = file_get_contents($file);
    $escapedPhone = preg_quote($phone, '/');
    $phonePattern = '/' . $escapedPhone . "\n/";

    if (preg_match($phonePattern, $leads)) {
        return true;
    } else {
        file_put_contents($file, $phone . "\n", FILE_APPEND);
        return false;
    }
}

Эта функция проверяет, был ли данный номер телефона уже записан в файл leads.txt. Если номер уже существует, функция возвращает true, в противном случае она добавляет номер в файл и возвращает false.

3. Функция для очистки номера телефона

$cleanedPhone = cleanPhoneNumber($_POST['phone']);

if (isDuplicateLead($cleanedPhone)) {
    header('Location: error.php');
    exit;
}

Здесь номер телефона очищается, и проверяется на дублирование. Если номер уже существует, происходит редирект на страницу ошибки error.php.

5. Подготовка данных для отправки на API

$url = 'https://api.kma.biz/lead/add';
$ip = $_SERVER['REMOTE_ADDR'];
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'direct';
$language = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'unknown';

$data = [
    'channel' => $_POST['flow'],
    'name' => $_POST['name'],
    'phone' => $_POST['phone'],
    'ip' => $ip,
    'country' => $_POST['country'],
    'referer' => $referer,
    'data1' => $_POST['sub1'],
    'data2' => $_POST['sub2'],
    'data3' => $_POST['sub3'],
    'data4' => $_POST['sub4'],
    'data5' => $_POST['sub5'],
    'language' => $language,
    'is_mobile' => isset($_POST['is_mobile']) ? $_POST['is_mobile'] : null,
    'ua' => $_SERVER['HTTP_USER_AGENT']
];

$postFields = http_build_query($data);

Данные формы подготавливаются для отправки на внешний API.

6. Отправка данных с помощью cURL

$process = curl_init();
curl_setopt($process, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
curl_setopt($process, CURLOPT_POST, true);
curl_setopt($process, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($process, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $apiToken,
    'Content-Type: application/x-www-form-urlencoded',
    'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'],
    'X-Host-Url: ' . (isset($_SERVER['HTTPS']) ? "https" : "http") . '://' . $_SERVER['HTTP_HOST']
]);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($process, CURLOPT_TIMEOUT, 20);

$response = curl_exec($process);
if (curl_errno($process)) {
    echo 'Curl error: ' . curl_error($process);
    curl_close($process);
    exit;
}

curl_close($process);

Здесь происходит инициализация и настройка cURL запроса для отправки данных на внешний API. Если возникает ошибка, она выводится на экран.

7. Обработка ответа от API

$responseArr = json_decode($response, true);

if ($responseArr && $responseArr['code'] == 0) {
    header('Location: thankyou.php?name=' . $_POST['name'] . '&phone=' . $_POST['phone'] . '&pxl=' . $_POST['subid6']);
} else {
    echo isset($responseArr['message']) ? $responseArr['message'] : 'Unknown error';
}

Ответ от API декодируется из JSON. Если код ответа 0, происходит редирект на страницу благодарности thankyou.php. В противном случае выводится сообщение об ошибке.

Этот скрипт выполняет следующие задачи:

  1. Проверяет и предотвращает дублирование лидов.
  2. Очищает и обрабатывает данные формы.
  3. Отправляет данные на внешний API.
  4. Обрабатывает ответ от API и выполняет соответствующие действия в зависимости от результата.

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

<?php

$apiToken = 'Ваш апи токен';

function isDuplicateLead($phone)
{
    $file = 'leads.txt';

    if (!file_exists($file)) {
        file_put_contents($file, '');
    }

    $leads = file_get_contents($file);
    $escapedPhone = preg_quote($phone, '/');
    $phonePattern = '/' . $escapedPhone . "\n/";

    if (preg_match($phonePattern, $leads)) {
        return true;
    } else {
        file_put_contents($file, $phone . "\n", FILE_APPEND);
        return false;
    }
}

function cleanPhoneNumber($phoneNumber)
{
    return preg_replace('/[^0-9]/', '', $phoneNumber);
}

$cleanedPhone = cleanPhoneNumber($_POST['phone']);

if (isDuplicateLead($cleanedPhone)) {
    header('Location: error.php');
    exit;
}

$url = 'https://api.kma.biz/lead/add';
$ip = $_SERVER['REMOTE_ADDR'];
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'direct';
$language = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'unknown';

$data = [
    'channel' => $_POST['flow'],
    'name' => $_POST['name'],
    'phone' => $_POST['phone'],
    'ip' => $ip,
    'country' => $_POST['country'],
    'referer' => $referer,
    'data1' => $_POST['sub1'],
    'data2' => $_POST['sub2'],
    'data3' => $_POST['sub3'],
    'data4' => $_POST['sub4'],
    'data5' => $_POST['sub5'],
    'language' => $language,
    'is_mobile' => isset($_POST['is_mobile']) ? $_POST['is_mobile'] : null,
    'ua' => $_SERVER['HTTP_USER_AGENT']
];

$postFields = http_build_query($data);

$process = curl_init();
curl_setopt($process, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
curl_setopt($process, CURLOPT_POST, true);
curl_setopt($process, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($process, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $apiToken,
    'Content-Type: application/x-www-form-urlencoded',
    'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'],
    'X-Host-Url: ' . (isset($_SERVER['HTTPS']) ? "https" : "http") . '://' . $_SERVER['HTTP_HOST']
]);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($process, CURLOPT_TIMEOUT, 20);

$response = curl_exec($process);
if (curl_errno($process)) {
    echo 'Curl error: ' . curl_error($process);
    curl_close($process);
    exit;
}

curl_close($process);

$responseArr = json_decode($response, true);

if ($responseArr && $responseArr['code'] == 0) {
    header('Location: thankyou.php?name=' . $_POST['name'] . '&phone=' . $_POST['phone'] . '&pxl=' . $_POST['subid6']);
} else {
    echo isset($responseArr['message']) ? $responseArr['message'] : 'Unknown error';
}
?>

Для корректной работы лендингов и пикселя, обязательно добавляйте в свои проклы файлы error.php и thankyou.php — ссылки кликабельные, тут можно скачать мультиязычные универсальные страницы.

Скачать файл api.php для cpa сети kma.biz можно по ссылке ниже

Так же бонусом выкладываю проклу, которую мы долгое время лили на кма, потенция — Бангладеш. Прокла показывала очень хороший конверт!

Кому была полезна статья, заходите в наш телеграмм канал, стараюсь публиковать полезные вещи как можно чаще. Ну и как говориться — всем больших, зеленых ROI

Оцените статью
BoostClicks