Всем привет! В этой статье я подробно разберу процесс настройки 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-канале. Присоединяйтесь!



