Если вам нужно добавить подписчика вручную (например, через кастомную форму) и сразу активировать подписку без подтверждения по 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();
}
}
?>Как это работает?
-
Проверка CSRF (
check_bitrix_sessid()) — защита от подделки запросов. -
Валидация email (
check_email()) — проверка корректности адреса. -
Проверка дублей (
CSubscription::GetList()) — избегаем повторной подписки. -
Настройки подписки:
-
ACTIVE: "Y"— подписка сразу активна. -
CONFIRMED: "Y"— не требует подтверждения. -
SEND_CONFIRM: "N"— не отправляет письмо с подтверждением.
-
-
Гибкие рубрики — можно передавать массив
RUB_IDиз формы.
Дополнительные улучшения
1. AJAX-обработка
Для современных сайтов лучше использовать AJAX:
javascriptfetch('/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 — убедитесь, что пользователь согласен на рассылку!