Продолжаю формировать глобальную базу интеграций с партнёрскими сетями, и на этот раз расскажу о CPA сети LemonAD.
Сайт: limonadcpa.com
Почему стоит выбрать эту партнёрку:
Плюсы:
- Адекватные, отзывчивые менеджеры, с которыми легко работать.
- Высокие ставки на старте – отличный стимул для новых вебмастеров.
- Ежедневные выплаты без лишних проблем.
- Широкая выборка гео: от Африки до СНГ – покроют практически любые нужды.
Минус:
Один из немногих неудобных моментов – работа с гарантами. Их можно согласовать только на три дня, и этот срок нужно постоянно продлевать, чтобы не упустить момент. Это может быть хлопотно и легко можно «провтыкать» эти сроки.
В целом, LemonAD – давно зарекомендовавшая себя партнёрка на рынке, с которой не стоит ожидать неприятных сюрпризов.
Настройка API для CPA сети limonadcpa.com
Теперь перейдём к настройке постбеков в Keitaro для партнёрки LemonAD.
Keitaro:
- Шаблон: Если в Keitaro нет предустановленного шаблона для LemonAD, используйте следующие настройки:
- Название: LemonAD.com
- Параметры для оффера:
clickid={subid}
- Postback URL:
ВАШ_Домен/postback?subid={clickid}&payout={payout}&status={status}&lead_status=lead&sale_status=sale&rejected_status=rejected,trash¤cy=[ISO]&from=LemonAD.com

Партнёрская программа LemonAD:
- Перейдите в свой профиль и откройте раздел Глобальный постбек и API.
- В поле Глобальный постбек укажите:
ВАШ_Домен/postback?subid={clickid}&payout={payout}&status={status}&lead_status=lead&sale_status=sale&rejected_status=rejected,trash¤cy=[ISO]&from=LemonAD.com
- Статусы:
- Новые лиды:
lead
- Подтверждённые лиды:
sale
- Треш лиды:
rejected
- Отклонённые лиды:
rejected
- Новые лиды:
- Нажмите «Сохранить», чтобы применить настройки.

Интеграция API на лендинге:
Вставьте в форму на лендинге макрос с clickid
, чтобы обеспечить корректную работу постбеков.
<form action="api.php" method="post" class="form"> <div class="input-group tooltip-hide"> <input name="name" type="text" placeholder="Имя" required=""> </div> <div class="input-group tooltip-hide"> <input name="phone" type="text" placeholder="Телефон" required=""> </div> <button type="submit" class="btn btn-order"> ПОЛУЧИТЬ <span class="flare"></span> </button> <input name="utm_medium" value="{utm_medium}" type="hidden"> <input type="hidden" name="utm_term" value="<?= @$_GET['utm_term'] ?>"> <input type="hidden" name="utm_campaign" value="<?= @$_GET['campaign.name'] ?>"> <input type='hidden' name='ip' value="{acc}"> <input type='hidden' name='userAgent' value="<?= $_GET[' utm_userAgent']; ?>"> <input type='hidden' name='utm_source' value="<?= $_GET[' utm_source']; ?>"> <input type='hidden' name='acc' value="<?= $_GET[' campaign.name']; ?>"> <input type='hidden' name='placement' value="<?= $_GET[' placement']; ?>"> <input type='hidden' name='adset' value="<?= $_GET[' ad.name']; ?>"> <input type='hidden' name='ad' value="<?= $_GET[' ad.id']; ?>"> <input type='hidden' name='clickid' value="{subid}"> <input type='hidden' name='sub4' value="<?php echo $_GET['pxl']; ?>"> <input type='hidden' name='sid2' value="{acc}"> <input type='hidden' name='sid3' value="{adset}"> <input type='hidden' name='utm_content' value="{buyer}"> <input type='hidden' name='sid5' value="{ev}"> </form>
💡 Пример: В форму добавляются значения для сабайди и пикселя, как показано выше.
Объяснение работы api в ПП lemonad
Файл api.php
выполняет следующие функции:
- Функция для проверки дублирующих лидов:
- isDuplicateLead($phone): Проверяет, существует ли уже номер телефона в файле
leads.txt
. Если нет, добавляет номер телефона в файл.
- isDuplicateLead($phone): Проверяет, существует ли уже номер телефона в файле
- Очистка номера телефона:
- cleanPhoneNumber($phoneNumber): Очищает телефонный номер от всех символов, кроме цифр.
- Основная логика:
- Проверяется метод запроса. Если запрос не является POST, или отсутствуют необходимые поля (имя и телефон), происходит перенаправление на страницу ошибки.
- Если данные валидны, создаётся массив с данными лидов (включая имя, телефон, параметры UTM и Click ID), и отправляется POST-запрос на API сервера LemonAD.
- Логирование:
- Функция writeToLog() записывает данные запроса и ответ от сервера в лог-файл.
- Обработка ответа API:
- Если ответ от API не соответствует формату JSON, происходит перенаправление на страницу ошибки.
- При успешном ответе пользователь перенаправляется на страницу благодарности, а в URL передаются имя, телефон и id FB пикселя.
Описание работы:
- Обработка и валидация данных формы:
- При отправке формы на лендинге файл проверяет валидность данных (имя, телефон) и предотвращает отправку дублирующих лидов.
- Отправка данных на сервер LemonAD:
- Данные лидов отправляются через cURL запрос на указанный API, используя токен вебмастера и ID оффера.
- Перенаправление пользователя:
- В зависимости от результата запроса (успех или ошибка) пользователя перенаправляют либо на страницу ошибки, либо на страницу благодарности с параметрами в URL.
<?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_URL = "https://sendmelead.com/api/v3/lead/add"; const OFFER_ID = 'ID_Оффера'; const WEBMASTER_TOKEN = 'Токен_Вебмастера'; const NAME_FIELD = 'name'; const PHONE_FIELD = 'phone'; $urlForNotPost = 'index.php'; $urlForEmptyRequiredFields = 'error.php'; $urlForNotJson = 'index.php'; $urlSuccess = 'thankyou.php'; function writeToLog(array $data, $response) { $log = date("F j, Y, g:i a") . PHP_EOL . "----------- DATA -------------" . PHP_EOL . print_r($data, true) . PHP_EOL . "----------- RESPONSE ---------" . PHP_EOL . $response . PHP_EOL . "----------- END --------------" . PHP_EOL; file_put_contents('./log_' . date("j.n.Y") . '.log', $log, FILE_APPEND); } function getUserIP() { if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if (filter_var($client, FILTER_VALIDATE_IP)) { $ip = $client; } elseif (filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } return $ip; } $isCurlEnabled = function () { return function_exists('curl_version'); }; if (!$isCurlEnabled) { echo "<pre>"; echo "pls install curl\n"; echo "For *unix open terminal and type this:\n"; echo 'sudo apt-get install curl && apt-get install php-curl'; die; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (empty($_POST[NAME_FIELD]) || empty($_POST[PHONE_FIELD])) { header('Location: ' . $urlForEmptyRequiredFields); exit; } $args = array( 'name' => $_POST[NAME_FIELD], 'phone' => $_POST[PHONE_FIELD], 'flow' => $_POST['flow'], 'offerId' => OFFER_ID, 'domain' => "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], 'ip' => getUserIp(), 'utm_campaign' => key_exists('utm_campaign', $_POST) ? $_POST['utm_campaign'] : null, 'utm_content' => key_exists('utm_content', $_POST) ? $_POST['utm_content'] : null, 'utm_medium' => $_POST['utm_content'], 'utm_source' => "Facebook", 'utm_term' => key_exists('utm_term', $_POST) ? $_POST['utm_term'] : null, 'clickid' => key_exists('clickid', $_POST) ? $_POST['clickid'] : null, 'fbpxl' => key_exists('sub4', $_POST) ? $_POST['sub4'] : null, ); $data = json_encode($args); $curl = curl_init(); curl_setopt_array( $curl, array( CURLOPT_URL => API_URL, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data, CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data), 'X-Token: ' . WEBMASTER_TOKEN, ), ) ); $result = curl_exec($curl); curl_close($curl); writeToLog($args, $result); $result = json_decode($result, true); if ($result === null) { header('Location: ' . $urlForEmptyRequiredFields); exit; } else { $parameters = [ 'fbpxl' => $args['sub4'], 'fio' => $args['name'], 'name' => $args['name'], 'phone' => $args['phone'] ]; $urlSuccess .= '?' . http_build_query($parameters); header('Location: thankyou.php?name=' . $_POST['name'] . '&phone=' . $_POST['phone'] . '&pxl=' . $_POST['sub4']); exit; } } ?>
Не забудьте заменить следующие параметры на свои:
- const OFFER_ID = ‘ID_Оффера’;
- const WEBMASTER_TOKEN = ‘Токен_Вебмастера’;
Так же прикрепляю архивом готовый файл api.php для партнерской сети Лимонад
Заходите в ТГ канал BoostClicks, всем удачи)