Назад

Битрикс как добавить подписчика через API

Главная
Блог
Битрикс как добавить подписчика через API

Если вам нужно добавить подписчика вручную (например, через кастомную форму) и сразу активировать подписку без подтверждения по email, используйте API модуля subscribe в 1С-Битрикс.

Основной код

Создайте обработчик формы (например, subscribe.php):

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

global $USER, $APPLICATION;

// Проверяем CSRF-токен и наличие email
if (!check_bitrix_sessid() || empty($_POST['email'])) {
    die('Ошибка запроса');
}

// Подключаем модуль подписки
if (!CModule::IncludeModule('subscribe')) {
    die('Модуль подписки не доступен');
}

// Валидация email
$email = trim($_POST['email']);
if (!check_email($email)) {
    die('Неверный формат email');
}

// Получаем ID рубрик (если переданы, иначе берем по умолчанию)
$rubrics = !empty($_POST['RUB_ID']) && is_array($_POST['RUB_ID']) 
    ? $_POST['RUB_ID'] 
    : [1]; // ID рубрики по умолчанию

// Проверяем, не подписан ли email уже
$existingSub = CSubscription::GetList([], ["EMAIL" => $email])->Fetch();
if ($existingSub) {
    die('Этот email уже подписан');
}

// Параметры подписки
$subscribeFields = [
    "USER_ID"      => $USER->IsAuthorized() ? $USER->GetID() : false,
    "FORMAT"       => "html", // или "text"
    "EMAIL"        => $email,
    "ACTIVE"      => "Y",     // сразу активна
    "CONFIRMED"   => "Y",     // без подтверждения
    "SEND_CONFIRM" => "N",    // не отправлять письмо
    "RUB_ID"      => $rubrics // массив ID рубрик
];

// Добавляем подписчика
$subscr = new CSubscription;
$ID = $subscr->Add($subscribeFields);

if ($ID > 0) {
    CSubscription::Authorize($ID);
    echo 'Подписка успешно оформлена!';
} else {
    // Выводим ошибку, если что-то пошло не так
    if ($ex = $APPLICATION->GetException()) {
        echo 'Ошибка: ' . $ex->GetString();
    }
}
?>

Как это работает?

  1. Проверка CSRF (check_bitrix_sessid()) — защита от подделки запросов.

  2. Валидация email (check_email()) — проверка корректности адреса.

  3. Проверка дублей (CSubscription::GetList()) — избегаем повторной подписки.

  4. Настройки подписки:

    • ACTIVE: "Y" — подписка сразу активна.

    • CONFIRMED: "Y" — не требует подтверждения.

    • SEND_CONFIRM: "N" — не отправляет письмо с подтверждением.

  5. Гибкие рубрики — можно передавать массив RUB_ID из формы.

Дополнительные улучшения

1. AJAX-обработка

Для современных сайтов лучше использовать AJAX:

javascript


fetch('/subscribe.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body: `email=${encodeURIComponent(email)}&sessid=${BX.bitrix_sessid()}`
})
.then(response => response.text())
.then(data => alert(data));

2. Использование REST API

Если сайт работает через REST (например, мобильное приложение), можно использовать:

$result = \Bitrix\Main\Mail\Sender::subscribe($email, $rubrics);
if (!$result->isSuccess()) {
    print_r($result->getErrors());
}

3. Логирование ошибок

Добавьте запись в лог при ошибках:

if ($ID <= 0 && $ex) {
    AddMessage2Log($ex->GetString(), "subscribe");
}

Вывод

Этот метод позволяет:

  • Добавлять подписчиков без подтверждения
  • Контролировать дубли
  • Гибко настраивать рубрики
  • Защищаться от CSRF

Используйте этот код в своих формах, но помните о GDPR — убедитесь, что пользователь согласен на рассылку!

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи