API интеграция с ПП shakes.pro: Настройка постбеков.

API интеграция с ПП shakes.pro: Настройка постбеков в Кейтаро API интеграции с ПП

Всем привет! В этой статье я подробно разберу процесс настройки API интеграций с CPA-сетью shakes.pro. Сегодня мы настроим форму, API, а также страницу «спасибо». Готовый файл API и интересный ленд на партнерку shakes можно скачать внизу данной статьи.

Мы не слишком активно льем трафик на эту ПП, поэтому особо нечего сказать. С выплатами всё ровно, без задержек. Адекватные менеджеры и довольно неплохие офферы. Но, судя по главной странице их сайта, на которой со старта написано, что они лидеры рынка с 2013 года, точно есть над чем подумать. А вы точно не преувеличиваете? Ну ладно, отойдем от прелюдий.

Теперь перейдем к делу и настроим интеграцию с партнерской программой shakes.pro.

Задача: Настройка API интеграции с партнерской программой shakes. Мы будем настраивать постбеки в Кейтаро и партнерской программе, а также передачу лидов по API.

Настройка постбеков в Кейтаро

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

  • Название: Shakes.pro
  • Параметры для оффера: sub1={subid}
  • Postback URL: ВАШ_Домен/postback?subid={sub1}&payout={cost}&status={status}&stream={stream}&source_id={source}&offer={offer}&currency={currency}&sale_status=confirm,approved&rejected_status=reject,decline&lead_status=none&from=shakes.pro

Настройка постбеков в партнерской программе

Тут юзабилити явно не на высоте, одна из самых основных настроек спрятана куда подальше…

  1. Идем в ПП → Потоки → Глобальный постбек.
  2. В поле «Постбек» вписываем наш постбек: ВАШ_Домен/postback?subid={sub1}&payout={cost}&status={status}&stream={stream}&source_id={source}&offer={offer}&currency={currency}&sale_status=confirm,approved&rejected_status=reject,decline&lead_status=none&from=shakes.pro
  3. Далее настроим статусы пользователя, отменяем все:
    • Генерация конверсии
    • Подтверждение конверсии
    • Отклонение конверсии
    • Невалидные заявки
Настройка постбеков в партнерской программе shakes

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

Первый этап настройки завершен. Постбеки в партнерской сети shakes и Кейтаро настроены. Теперь приступим к настройке API.


Настройка API для передачи лидов с кейтаро в партнерку shakes

Начнем настройку интеграции с формы на нашей прокле, а после этого разберем и напишем api файл для передачи лидов в ПП, с нашей формы на сайте.

Идем на наш лендинг и находим форму. В форму вставляем макрос с sub_id для корректной работы постбеков:

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

Полный код формы на сайте выглядит так:

<form action="api.php" method="post">
    <div class="all-form__body">
        <div class="all-form__box">
            <div class="all-form__label"> <span class="lt88">Su nombre:</span><input class="all-form__field"
                    placeholder="Nombre y apellido" type="text" name="name" required> </div>
            <div class="all-form__label"> <span class="lt89">Teléfono:</span><input class="all-form__field"
                    placeholder="+506 23456789" type="text" name="phone" required> </div>
        </div>
        <div class="all-form__footer"> <button type="submit" class="all-form__btn lt90">Obtener con 50% de
                descuento</button>
        </div>
    </div>
    <input type="hidden" name="country" value="страна">
    <input type="hidden" name="offerId" value="id оффера">
    <input type="hidden" name="landingUrl" value="url лендинга с ПП">
    <input type="hidden" name="streamCode" value="код потока">
    <input type="hidden" name="sub1" value="{subid}">
    <input type='hidden' name='pxl' value="<?php echo $_GET['pxl']; ?>" />
    //пиксель
</form>

С формой все, обычная стандартная форма, которая отправялет данные в api.php методом POST.


Напишем api для партнерки shakes.pro

Этот API-файл предназначен для обработки лидов (заявок) на сервере. Рассмотрим его структуру и работу поэтапно:

Зачем нам нужен api.php?

Файл служит для:

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

Детальный разбор кода

1. Проверка на дублирование лидов

Функция isDuplicateLead($phone) проверяет, был ли уже лид с таким номером телефона:

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 (лид новый).

2. Очистка номера телефона

Функция cleanPhoneNumber($phoneNumber) удаляет из номера телефона все символы, кроме цифр:

function cleanPhoneNumber($phoneNumber)
{
    return preg_replace('/[^0-9]/', '', $phoneNumber);
}
  • Очистка номера: Используется регулярное выражение для удаления всех символов, кроме цифр.

3. Проверка лида и подготовка данных

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

if (isDuplicateLead($cleanedPhone)) {
    header('Location: error.php');
    exit;
}
  • Очистка номера телефона: Входящий номер телефона очищается.
  • Проверка на дублирование: Если номер телефона уже существует в leads.txt, пользователь перенаправляется на error.php.

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

$apiKey = 'Апиключ из ПП';
$domain = 'shakes.pro';

$url = "http://$domain?r=/api/order/in&key=$apiKey";
$order = [
    'createdAt' => date('Y-m-d H:i:s'),
    'offerId' => (!empty($_POST['offerId']) ? $_POST['offerId'] : ($_GET['offerId'] ? $_GET['offerId'] : '')),
    'landingUrl' => (!empty($_POST['landingUrl']) ? $_POST['landingUrl'] : ($_GET['landingUrl'] ? $_GET['landingUrl'] : '')),
    'streamCode' => (!empty($_POST['streamCode']) ? $_POST['streamCode'] : ($_GET['streamCode'] ? $_GET['streamCode'] : '')),
    'ip' => (!empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null),
    'referrer' => (!empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null),
    'userAgent' => (!empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '-'),
    'name' => (!empty($_POST['name']) ? $_POST['name'] : ($_GET['name'] ? $_GET['name'] : '')),
    'phone' => (!empty($_POST['phone']) ? $_POST['phone'] : ($_GET['phone'] ? $_GET['phone'] : '')),
    'countryCode' => (!empty($_POST['country']) ? $_POST['country'] : ($_GET['country'] ? $_GET['country'] : 'RU')),
    'comment' => (!empty($_POST['comment']) ? $_POST['comment'] : ($_GET['comment'] ? $_GET['comment'] : '')),
    'sub1' => (!empty($_POST['sub1']) ? $_POST['sub1'] : ($_GET['sub1'] ? $_GET['sub1'] : '')),
    'sub2' => (!empty($_POST['sub2']) ? $_POST['sub2'] : ($_GET['sub2'] ? $_GET['sub2'] : '')),
    'sub3' => (!empty($_POST['sub3']) ? $_POST['sub3'] : ($_GET['sub3'] ? $_GET['sub3'] : '')),
    'sub4' => (!empty($_POST['sub4']) ? $_POST['sub4'] : ($_GET['sub4'] ? $_GET['sub4'] : '')),
];
  • Создание массива заказа: Собираются данные из $_POST и $_GET.

5. Отправка данных на удалённый сервер

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $order);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

try {
    $responseBody = curl_exec($curl);
    $response = json_decode($responseBody, true);

    if ($response['status'] != 'ok') {
        throw new Exception(
            'Success: Order is accepted. '
            . PHP_EOL . 'Order: ' . var_export($order, true)
            . PHP_EOL . 'Response: ' . var_export($response, true)
        );
    }

    curl_close($curl);
    header('Location: ./success.php?pxl=' . $_REQUEST['pxl']);
    exit();
} catch (Exception $e) {
    header('Location: ./error.php');
    exit();
}
  • Настройка cURL: Устанавливаются параметры для POST-запроса.
  • Отправка запроса: Выполняется запрос и обрабатывается ответ.
  • Проверка ответа: Если ответ сервера не содержит статус ok, вызывается исключение.
  • Обработка исключения: При возникновении ошибки пользователь перенаправляется на error.php
  • Успешный ответ: Если ответ успешный, пользователь перенаправляется на success.php с параметром pxl.

Таким образом, файл API выполняет всю работу по обработке, проверке и отправке данных лида, обеспечивая также базовую защиту от повторных заявок с одного и того же номера телефона.


Скачать файл api.php для передачи лидов с сайта в ПП shakes.pro, можно по ссылке ниже. Не забудьте в апи добавить свой ключ, с личного кабинета ПП.

Так же прикрепляю ленд на Коста Рику, который показал себя с сильной стороны в плане конверта. Направление — простатит. Спасибо за прочтение, жду тебя в своем ТГ канале, по запросу сделаю для тебя апи под любую ПП. Всем зеленых ROI и удачи!

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