Всем привет! В этой статье я подробно разберу процесс настройки API интеграций с CPA-сетью m4leads. Поделюсь полезными советами и помогу коллегам настроить работу с партнерской сетью без лишних сложностей, чтобы у вас было больше времени на генерацию трафика.
От себя добавлю, что команда m4leads отлично справляется с обработкой трафика и демонстрирует высокий уровень апрува. По моему мнению, это одна из ведущих сетей в сфере нутры. У них есть множество собственных офферов и собственный колл-центр, работающий круглосуточно, что, безусловно, положительно влияет на показатели апрува. m4leads – это давно зарекомендовавшая себя партнерская программа с адекватными и всегда готовыми помочь менеджерами. Она явно заслуживает внимания арбитражников.
Ну а теперь перейдем к делу и настроим интеграцию с партнерской программой m4leads.
- Задача: Настройка api интеграции с партнерской программой m4leads
- Настройка постбеков в кейтаро
- Первый этап настройки завершен
- Интеграция api на лендинге
- Разбор файла api.php
- 1. Проверка дублирующихся лидов
- 2. Очистка номера телефона
- 3. Проверка наличия номера телефона
- 4. Очистка номера телефона
- 5. Проверка на дублирование лида
- 6. Формирование данных для запроса
- 7. Добавление параметров sub_id
- 8. Формирование URL для запроса
- Отправка запроса с помощью cURL
Задача: Настройка api интеграции с партнерской программой m4leads
Будем настраивать постбеки в Кейтаро и партнерской программе, а также передачу лидов по API.
Настройка постбеков в кейтаро
В Кейтаро уже есть встроенный шаблон для m4leads. Если вы используете другой трекер или по каким-то причинам шаблона нет, вот настройка:
- Название: M4leads.com
- Параметры для оффера: sub_id1={subid}
- Postback URL: ВАШ_Домен/postback?subid=[sub_id1]&tid=[order_id]&payout=[price]&status=[status]&from=m4leads.com

Теперь перейдем в партнерскую программу:
- Идем в ПП → Инструменты → Postback
- Метод передачи: GET (галочку «Только принятые» НЕ ставим).
- В поле postbackURL вписываем наш постбек:
ВАШ_Домен/postback?subid=[sub_id1]&tid=[order_id]&payout=[price]&status=[status]&from=m4leads.com
Далее настроим статусы пользователя:
- Одобрено: sale
- Отменен: rejected
- Некорректный: rejected
- В ожидании: lead
После этого нажимаем кнопку «Применить».

Первый этап настройки завершен
Постбеки в партнерской сети m4leads и Кейтаро настроены. Теперь приступим к самой интеграции.
Интеграция api на лендинге
Идем на наш лендинг и находим форму. В форму вставляем макрос с sub_id для корректной работы постбеков:
<input type="hidden" name="subid" value="{subid}">
Пример формы:
<form action="api.php" method=post> <label class=block_form_label>Имя</label> <input name=name placeholder="Ваше имя" required minlength="3"> <label class=block_form_label>Телефон</label> <input name=phone placeholder="Ваш телефон" type=tel required minlength="8"> <button type=submit>ПОЛУЧИТЬ</button> <input type="hidden" name="country" value="Страна"> <input type="hidden" name="offerId" value="id оффера в ПП"> <input type="hidden" name="price" value="Цена на сайте"> <input type="hidden" name="subid" value="{subid}"> <input type='hidden' name='pxl' value="<?php echo $_GET['pxl']; ?>" /> </form>
С формой все понятно, здесь особых объяснений не требуется.
Разбор файла api.php
Теперь разберем файл api.php
, на который ссылается наша форма:
1. Проверка дублирующихся лидов
Функция isDuplicateLead
проверяет, является ли лид дублирующимся.
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
очищает номер телефона от всех символов, кроме цифр.
function cleanPhoneNumber($phoneNumber) { return preg_replace('/[^0-9]/', '', $phoneNumber); }
3. Проверка наличия номера телефона
Если номер телефона не передан в POST-запросе, перенаправляем на страницу ошибки.
if (!isset($_POST['phone'])) { header('Location: error.php'); exit; }
4. Очистка номера телефона
Очистка номера телефона с помощью ранее описанной функции.
$cleanedPhone = cleanPhoneNumber($_POST['phone']);
5. Проверка на дублирование лида
Если лид дублируется, перенаправляем на страницу ошибки.
if (isDuplicateLead($cleanedPhone)) { header('Location: error.php'); exit; }
6. Формирование данных для запроса
Формируем данные для отправки в API m4leads.
$url = 'https://api.m4leads.com/order/add'; $data = [ 'partnerId' => ПартнерID, 'access-token' => 'Токен в ПП', 'offerId' => $_POST['offerId'], 'phone' => $_POST['phone'], 'price' => $_POST['price'], 'fullName' => $_POST['name'], 'ip' => $_SERVER['REMOTE_ADDR'], 'country' => $_POST['country'], ];
7. Добавление параметров sub_id
Добавляем параметры sub_id
в данные.
$sub_id = []; $sub_id[] = $_POST['subid']; $sub_id[] = $_POST['sub1']; $sub_id[] = $_POST['sub2']; $sub_id[] = $_POST['sub3']; $sub_id[] = $_POST['sub4']; $data['sub_id'] = $sub_id;
8. Формирование URL для запроса
Формируем URL для запроса с параметрами.
$url .= '?' . http_build_query($data);
Отправка запроса с помощью cURL
Отправляем запрос с использованием cURL.
if ($curl = curl_init()) { curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($curl); curl_close($curl); if ($result === false) { header('Location: error.php'); exit; } else { $arr = json_decode($result, true); if (!isset($arr['error'])) { header('Location: thankyou.php?name=' . $_POST['name'] . '&phone=' . $_POST['phone'] . '&pxl=' . $_POST['pxl']); exit; } else { header('Location: error.php'); } } }
- Инициализируем cURL.
- Устанавливаем URL и параметры возврата.
- Выполняем запрос.
- Закрываем cURL.
- Обрабатываем результат. Если запрос успешен и нет ошибок, перенаправляем на страницу благодарности. В противном случае, перенаправляем на страницу ошибки.
Таким образом, этот скрипт выполняет проверку на дублирование лидов, очищает номер телефона, отправляет данные в API m4leads и обрабатывает ответ.
Полный код api файла выглядит так:
<?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); } if (!isset($_POST['phone'])) { header('Location: error.php'); exit; } $cleanedPhone = cleanPhoneNumber($_POST['phone']); if (isDuplicateLead($cleanedPhone)) { header('Location: error.php'); exit; } $url = 'https://api.m4leads.com/order/add'; $data = [ 'partnerId' => ПартнерID, 'access-token' => 'Токен в ПП', 'offerId' => $_POST['offerId'], 'phone' => $_POST['phone'], 'price' => $_POST['price'], 'fullName' => $_POST['name'], 'ip' => $_SERVER['REMOTE_ADDR'], 'country' => $_POST['country'], ]; $sub_id = []; $sub_id[] = $_POST['subid']; $sub_id[] = $_POST['sub1']; $sub_id[] = $_POST['sub2']; $sub_id[] = $_POST['sub3']; $sub_id[] = $_POST['sub4']; $data['sub_id'] = $sub_id; $url .= '?' . http_build_query($data); if ($curl = curl_init()) { curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($curl); curl_close($curl); if ($result === false) { header('Location: error.php'); exit; } else { $arr = json_decode($result, true); if (!isset($arr['error'])) { header('Location: thankyou.php); exit; } else { header('Location: error.php'); } } } ?>
Базовая настройка API для CPA m4leads завершена. Не забудьте добавить страницы thankyou.php
и error.php
для корректной обработки успешных и ошибочных результатов. Этот код можно существенно улучшить и модернизировать в зависимости от ваших потребностей.
Если у вас есть вопросы или предложения, буду рад обсудить их в моем Telegram-канале. Присоединяйтесь!