- Общая информация
- Ключевые преимущества партнерки
- Настройка API для CPA-сети metacpa.ru
- Настройка постбеков в трекере
- Настройка постбеков в партнерке metacpa
- API интеграция оффера с ПП metacpa
- Объяснение настройки api в ПП metacpa
- 1. Проверка на дублирование лидов
- Функция isDuplicateLead
- 2. Функция логирования
- Функция mylog
- 3. Очистка номера телефона
- Функция cleanPhoneNumber
- 4. Основная логика обработки формы
- Очистка и проверка номера телефона
- 5. Формирование запроса к API
- Подготовка данных для отправки
- 6. Выполнение cURL-запроса
- Инициализация и выполнение запроса
- 7. Обработка ответа от API
- Анализ ответа и перенаправление
- Итоговый код api принцип работы
Общая информация
- Год основания: 2013
- Официальный сайт: metacpa.ru
Meta CPA – международная партнерская CPA-сеть, работающая в нутра-сегменте. Основана в 2013 году. С 2022 года компания выступает как прямой рекламодатель в регионах Азии и Латинской Америки, предоставляя партнёрам возможность выбирать оптимальные предложения из более чем 700 офферов, охватывающих 60 географических регионов.
Ключевые преимущества партнерки
- Собственные in-house офферы с высоким аппрувалом и быстрыми выплатами до 150$ за лид.
- Эксклюзивные предложения, ориентированные на рынки Азии и Латам.
- Поддержка при переводе лендингов и адаптации рекламных кампаний.
- Персональный саппорт 24/7 – надёжный помощник в арбитраже.
- Специальные условия для ТОП-партнёров.
- Приём заявок через API.
Настройка API для CPA-сети metacpa.ru
Настройка постбеков в трекере
Если у вас отсутствует предустановленный шаблон для metacpa, используйте следующие настройки:
- Название: Metacpa.ru
- Параметры для оффера: sub5={subid}
- Postback URL: luaКопировать
ВАШ_Домен/postback?subid={sub5}&payout={payout}&status={status}¤cy={currency}&lead_status=0&sale_status=1&rejected_status=3&sub_id_1={offer_id}&sub_id_2={landing_id}&from=metacpa.ru

Настройка постбеков в партнерке metacpa
- Перейдите в свой профиль и откройте раздел Глобальный постбек.
- В поле URL постбэка (новый) укажите: bashКопировать
ВАШ_Домен/postback?subid={sub5}&status=0&lead_status=0&sale_status=1&rejected_status=3&sub_id_1={offer_id}&sub_id_2={landing_id}&from=metacpa.ru
- В поле URL постбэка (принят) укажите: bashКопировать
ВАШ_Домен/postback?subid={sub5}&payout={payout}&status=1¤cy={currency}&lead_status=0&sale_status=1&rejected_status=3&sub_id_1={offer_id}&sub_id_2={landing_id}&from=metacpa.ru
- В поле URL постбэка (отклонен) укажите: bashКопировать
ВАШ_Домен/postback?subid={sub5}&status=3&lead_status=0&sale_status=1&rejected_status=3&sub_id_1={offer_id}&sub_id_2={landing_id}&from=metacpa.ru
Статусы:
- Новые лиды: 0
- Подтверждённые лиды: 1
- Треш-лиды: 3
- Отклонённые лиды: 3
Нажмите «Сохранить», чтобы применить настройки.

API интеграция оффера с ПП metacpa
Файл: index.php
Вставьте в форму на лендинге макрос с subid, чтобы обеспечить корректную работу постбеков.
<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 type="hidden" name="flow_id" value="ID_потока"> <input type="hidden" name="geo" value="ID_ГЕО"> <input type="hidden" name="sub3" value="{buyer}"> <input type="hidden" name="sub5" value="{subid}"> </form>
💡 В форму добавляется значения для сабайди, как показано выше. Так же в форме необходимо заполнить id потока и id ГЕО. Чекнуть гео можно в кабинете ПП, вкладка помощь — справочник по ГЕО
Объяснение настройки api в ПП metacpa
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. Функция логирования
Функция mylog
function mylog($data) { $file = 'log.txt'; if (!file_exists($file)) { file_put_contents($file, ''); } file_put_contents($file, $data . "\n", FILE_APPEND); return false; }
- Цель: Записывать данные в лог-файл
log.txt
.
- Проверка файла: Если файла не существует, он создаётся.
- Запись данных: Переданные данные дописываются в файл с новой строки.
- Возвращаемое значение: Всегда возвращает
false
(это может использоваться для остановки дальнейшей обработки в других частях кода).
3. Очистка номера телефона
Функция cleanPhoneNumber
function cleanPhoneNumber($phoneNumber) { return preg_replace('/[^0-9]/', '', $phoneNumber); }
- Цель: Удалить из номера телефона все символы, кроме цифр.
- Работа функции: Используется регулярное выражение, которое заменяет всё, что не является цифрой, на пустую строку. Это гарантирует корректное сравнение и отправку номера.
4. Основная логика обработки формы
Очистка и проверка номера телефона
$cleanedPhone = cleanPhoneNumber($_POST['phone']); if (isDuplicateLead($cleanedPhone)) { header('Location: error.php?name=' . urlencode($_POST['name']) . '&phone=' . urlencode($_POST['phone'])); exit; }
- Очистка: Значение
$_POST['phone']
очищается от ненужных символов.
- Проверка дубликата: Если функция
isDuplicateLead
возвращаетtrue
(номер уже встречался), происходит перенаправление на страницу ошибки с передачей имени и телефона в URL.
5. Формирование запроса к API
Подготовка данных для отправки
$url = 'http://metacpa.ru/create'; $data = array( 'phone' => $_POST['phone'], 'name' => $_POST['name'], 'ip' => $_SERVER['REMOTE_ADDR'], 'flow_id' => $_POST['flow_id'], 'geo' => $_POST['geo'], 'subid' => $_POST['subid'], 'sub1' => $_POST['sub1'], 'sub3' => $_POST['sub3'], 'sub4' => $_POST['sub4'], 'sub5' => $_POST['sub5'], ); foreach ($_POST as $key => $value) { $data[$key] = $value; }
- URL запроса: Определён конечный адрес API
http://metacpa.ru/create
. - Массив данных: Формируется массив с основными параметрами, такими как телефон, имя, IP-адрес пользователя, идентификаторы потоков, геолокация и прочее.
- Цикл перебора $_POST: Этот цикл гарантирует, что все данные из формы будут включены в массив
$data
. При этом если какие-то ключи уже заданы, они перезаписываются значениями из$_POST
.
6. Выполнение cURL-запроса
Инициализация и выполнение запроса
$process = curl_init(); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_TIMEOUT, 5); curl_setopt($process, CURLOPT_URL, $url . '?' . http_build_query($data)); $result = curl_exec($process); curl_close($ch);
- Инициализация cURL: Функция
curl_init()
подготавливает новый сеанс. - Настройка опций:
CURLOPT_RETURNTRANSFER
: позволяет сохранить ответ в переменной вместо прямого вывода.CURLOPT_TIMEOUT
: устанавливает максимальное время ожидания ответа – 5 секунд.CURLOPT_URL
: формируется URL с параметрами запроса с помощьюhttp_build_query($data)
.
- Выполнение запроса:
curl_exec($process)
выполняет запрос и сохраняет ответ в переменной$result
. - Закрытие сеанса: После выполнения запроса сеанс cURL закрывается. Обратите внимание, что закрытие происходит через переменную
$ch
, которая не определена – это потенциальная ошибка, и должно бытьcurl_close($process)
.
7. Обработка ответа от API
Анализ ответа и перенаправление
if ($result === false) { echo 'cURL Error: ' . curl_error($process); } else { $arr = json_decode($result, true); if (!isset($arr['error'])) { header('Location: ./success.php?name=' . urlencode($_POST['name']) . '&phone=' . urlencode($_POST['phone'])); exit; } else { header('Location: error.php?name=' . urlencode($_POST['name']) . '&phone=' . urlencode($_POST['phone'])); } }
- Проверка на ошибку: В условии проверяется переменная
$return
, хотя результат запроса хранится в переменной$result
. Здесь, вероятно, допущена опечатка, и вместо$return
должно быть$result
. - Ошибка cURL: Если результат запроса равен
false
, выводится сообщение об ошибке. - Парсинг ответа: Если запрос выполнен успешно, ответ декодируется из JSON в ассоциативный массив.
- Перенаправление:
- Если массив не содержит ключа
error
, происходит перенаправление на страницу успеха (success.php
). - Если ошибка обнаружена, пользователь перенаправляется на страницу ошибки (
error.php
).
- Если массив не содержит ключа
Итоговый код api принцип работы
- Очистка и проверка: При поступлении данных из формы очищается номер телефона, после чего проверяется на дублирование. Если лид уже существует – пользователь перенаправляется на страницу ошибки.
- Формирование запроса: Собирается массив с данными, включающими все параметры, полученные через POST.
- Отправка данных: Данные отправляются на API metacpa через GET-запрос с использованием cURL.
- Обработка ответа: Полученный ответ анализируется. В зависимости от наличия ошибок происходит перенаправление пользователя либо на страницу успеха, либо на страницу ошибки.
<?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 mylog($data) { $file = 'log.txt'; if (!file_exists($file)) { file_put_contents($file, ''); } file_put_contents($file, $data . "\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?name=' . urlencode($_POST['name']) . '&phone=' . urlencode($_POST['phone'])); exit; } $url = 'http://metacpa.ru/create'; $data = array( 'phone' => $_POST['phone'], 'name' => $_POST['name'], 'ip' => $_SERVER['REMOTE_ADDR'], 'flow_id' => $_POST['flow_id'], 'geo' => $_POST['geo'], 'subid' => $_POST['subid'], 'sub1' => $_POST['sub1'], 'sub3' => $_POST['sub3'], 'sub4' => $_POST['sub4'], 'sub5' => $_POST['sub5'], ); foreach ($_POST as $key => $value) { $data[$key] = $value; } $process = curl_init(); curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); curl_setopt($process, CURLOPT_TIMEOUT, 5); curl_setopt($process, CURLOPT_URL, $url . '?' . http_build_query($data)); $result = curl_exec($process); curl_close($ch); if ($result === false) { echo 'cURL Error: ' . curl_error($process); } else { $arr = json_decode($result, true); if (!isset($arr['error'])) { header('Location: ./success.php?name=' . urlencode($_POST['name']) . '&phone=' . urlencode($_POST['phone'])); exit; } else { header('Location: error.php?name=' . urlencode($_POST['name']) . '&phone=' . urlencode($_POST['phone'])); } } ?>

Ну и по уже сложившейся традиции, прикреппляю файл API интеграции metacpa, внутри архива. Копируете форму из примера выше и закидывайте в свой архив файл api.php Получаете профит и зеленые ROI.