Продолжаю формировать глобальную базу интеграций с партнёрскими сетями, и на этот раз расскажу о 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, всем удачи)



