API интеграция лендингов с партнерской сетью Affstar

API интеграция лендингов с партнерской сетью Affstar API интеграции с ПП

Здарова, мои хорошие! Давайте сегодня настроим API интеграцию наших лендингов с партнерской сетью Affstar. Настроим постбеки в Кейтаро, напишем API для сайта и разберем его работу.

Пару слов про Affstar – это весомая CPA сеть на рынке с хорошей историей и репутацией. Всё грамотно организовано и настроено для эффективной работы. Адекватные менеджеры, топовые офферы, разнообразные гео. Выплаты без задержек. Простое подключение новых вебов и быстрое введение их в курс дела.

Что не нравится:

  • Довольно низкие ставки на старте.
  • Сложности согласования гарантов.
  • Долгое решение вопросов, связанных с прямыми рекламами.
  • Длительные согласования всего.

В целом, рекомендую работать с Affstar. Благодаря разнообразию офферов, все минусы так или иначе перекрываются.

Настройка API и постбеков в Кейтаро для CPA сети Affstar.com

Начнем с настройки постбеков в Кейтаро.

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

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

Postback URL: ВАШ_Домен/postback?subid={sub_id1}&payout={amount}&currency={currency}&status={status}&lead_status=new&sale_status=approved&rejected_status=rejected,trash&from=Affstar.com

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

  1. Идем в ПП → Инструменты → Постбеки.
  2. Создать постбек.
  3. Метод запроса: GET
  4. Ставим галочки: Новый, Подтвержденный, Отклонен, Треш.
  5. Названия статусов — Новый: new, Подтвержденный: approved, Отклонен: rejected, Трэш: trash
  6. В поле URL вписываем наш постбек: ВАШ_Домен/postback?subid={sub_id1}&payout={amount}&currency={currency}&status={status}&lead_status=new&sale_status=approved&rejected_status=rejected,trash&from=Affstar.com

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

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

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


Интеграция 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 для ПП Affstar.com

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

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 не существует, он создается.
  • Чтение содержимого файла: Содержимое файла считывается в переменную $leads.
  • Экранирование номера телефона: Номер телефона экранируется для использования в регулярном выражении.
  • Проверка на совпадение: Если номер уже есть в файле, возвращается true, иначе номер добавляется в файл и функция возвращает false.

2. Функция cleanPhoneNumber($phoneNumber)

Эта функция очищает номер телефона, оставляя только цифры.

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

3. Класс LeadSender

Класс для отправки лидов.

3.1 Метод getRequestParams()

Собирает параметры запроса из POST данных и серверных переменных.

php
private function getRequestParams()
{
    return [
        'flow_uuid' => $_POST['flow'] ?? '',
        'name' => $_POST['name'] ?? '',
        'phone' => $_POST['phone'] ?? '',
        'country_code' => $_POST['country'] ?? '',
        'ip' => $_SERVER['REMOTE_ADDR'] ?? '',
        'referer' => $_SERVER['HTTP_REFERER'] ?? '',
        'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
        'sub_id1' => $_POST['sub1'] ?? '',
        'sub_id2' => $_POST['sub2'] ?? '',
        'sub_id3' => $_POST['sub3'] ?? '',
        'utm_source' => $_POST['utm_source'] ?? '',
        'utm_content' => $_POST['utm_content'] ?? '',
        'utm_campaign' => $_POST['utm_campaign'] ?? '',
        'utm_term' => $_POST['utm_term'] ?? '',
        'utm_medium' => $_POST['utm_medium'] ?? '',
        'pxl' => $_POST['pxl'] ?? '',
    ];
}
  • Сбор параметров: Собираются параметры из POST данных и серверных переменных.
3.2 Метод send()

Отправляет запрос и обрабатывает ответ.

public function send()
{
    $params = $this->getRequestParams();
    $output = $this->request($params);
    $response = json_decode($output, true);

    if (empty($response) || !isset($response['success'])) {
        header('Location: error.php');
        exit;
    }

    if ($response['success']) {
        header('Location: thankyou.php?name=' . $_POST['name'] . '&phone=' . $_POST['phone'] . '&pxl=' . $_POST['pxl']);
        exit;
    } else {
        header('Location: error.php');
        exit;
    }
}
  • Запрос: Параметры отправляются методом request().
  • Обработка ответа: В зависимости от ответа API пользователь перенаправляется на страницу благодарности или ошибку.
3.3 Метод request($params)

Отправляет данные через API с помощью cURL.

private function request($params)
{
    $url = 'https://api.affstar.com/api/lead/create/publisher?api_key=' . API_KEY;
    $headers = ["ApiKey:" . API_KEY, 'Content-Type: application/json'];
    $json_str = json_encode($params);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_str);
    $output = curl_exec($ch);
    curl_close($ch);

    return $output;
}
  • cURL запрос: Отправка POST запроса с заголовками и параметрами в формате JSON.

4. Основной блок

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    (new LeadSender())->send();
} else {
    echo 'error';
}

  • Обработка POST запроса: Если запрос является POST, создается экземпляр класса LeadSender и вызывается метод send(), иначе выводится сообщение об ошибке.

Полный код api для передачи лидов в ПП Affstar:

<?php

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;
}

const API_KEY = 'апи_ключ_из_ПП';

class LeadSender
{
    private function getRequestParams()
    {
        return [
            'flow_uuid' => $_POST['flow'] ?? '',
            'name' => $_POST['name'] ?? '',
            'phone' => $_POST['phone'] ?? '',
            'country_code' => $_POST['country'] ?? '',
            'ip' => $_SERVER['REMOTE_ADDR'] ?? '',
            'referer' => $_SERVER['HTTP_REFERER'] ?? '',
            'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
            'sub_id1' => $_POST['sub1'] ?? '',
            'sub_id2' => $_POST['sub2'] ?? '',
            'sub_id3' => isset($_POST['sub3']) ? $_POST['sub3'] : "",
            'utm_source' => isset($_POST['utm_source']) ? $_POST['utm_source'] : "",
            'utm_content' => isset($_POST['utm_content']) ? $_POST['utm_content'] : "",
            'utm_campaign' => isset($_POST['utm_campaign']) ? $_POST['utm_campaign'] : "",
            'utm_term' => isset($_POST['utm_term']) ? $_POST['utm_term'] : "",
            'utm_medium' => isset($_POST['utm_medium']) ? $_POST['utm_medium'] : "",
            'pxl' => isset($_POST['pxl']) ? $_POST['pxl'] : "",
        ];
    }

    public function send()
    {
        $params = $this->getRequestParams();
        $output = $this->request($params);
        $response = json_decode($output, true);

        if (empty($response) || !isset($response['success'])) {
            header('Location: error.php');
            exit;
        }

        if ($response['success']) {
            header('Location: thankyou.php?name=' . $_POST['name'] . '&phone=' . $_POST['phone'] . '&pxl=' . $_POST['pxl']);
            exit;
        } else {
            header('Location: error.php');
            exit;
        }
    }

    private function request($params)
    {
        $url = 'https://api.affstar.com/api/lead/create/publisher?api_key=' . API_KEY;
        $headers = ["ApiKey:" . API_KEY, 'Content-Type: application/json'];
        $json_str = json_encode($params);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json_str);
        $output = curl_exec($ch);
        curl_close($ch);

        return $output;
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    (new LeadSender())->send();
} else {
    echo 'error';
}

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

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

Так же делюсь CPA кейстом Keto-Matcha ES. Помоему это вечный оффер, на него мы сейчас активно льем, и на эту проклу в том числе.

Спасибо за прочтение! Жду тебя в своем ТГ канале и искренне желаю больших рои!

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