Как добавить подписку на товар через API Битрикс: полное руководство

API Битрикс

Добавление подписки на товар через API в Bitrix

При разработке интернет-магазинов на Bitrix часто возникает необходимость программно добавлять подписки на уведомления о поступлении товаров. К сожалению, в официальной документации примеры такого функционала практически отсутствуют. В этой статье мы рассмотрим, как реализовать добавление подписки на товар через API Bitrix.

Основной код

Для работы с подписками в Bitrix используется класс SubscribeManager из модуля catalog. Вот базовый пример добавления подписки:

<?php
use Bitrix\Main\Loader;

// Подключаем необходимый модуль
if (!Loader::includeModule('catalog')) {
    return;
}

// Создаем экземпляр менеджера подписок
$subscribeManager = new \Bitrix\Catalog\Product\SubscribeManager();

// Определяем тип контакта (по умолчанию - email)
$defaultContactTypeId = \Bitrix\Catalog\SubscribeTable::CONTACT_TYPE_EMAIL;

// Подготавливаем данные для подписки
$subscribeData = array(
    'USER_CONTACT' => 'pozitiff@mail.ru',  // Email пользователя
    'ITEM_ID' => 79354,                    // ID товара
    'SITE_ID' => 's1',                     // ID сайта
    'CONTACT_TYPE' => $defaultContactTypeId, // Тип контакта
);

// Добавляем подписку
$subscribeId = $subscribeManager->addSubscribe($subscribeData);

if ($subscribeId > 0) {
    echo "Подписка успешно добавлена. ID: " . $subscribeId;
} else {
    echo "Ошибка при добавлении подписки";
}

Описание параметров

Обязательные параметры:

  • USER_CONTACT – контактные данные пользователя (email или телефон)
  • ITEM_ID – идентификатор товара, на который оформляется подписка
  • SITE_ID – идентификатор сайта
  • CONTACT_TYPE – тип контакта

Типы контактов:

// Email (по умолчанию)
\Bitrix\Catalog\SubscribeTable::CONTACT_TYPE_EMAIL

// Телефон
\Bitrix\Catalog\SubscribeTable::CONTACT_TYPE_PHONE

Расширенный пример с проверками

Для более надежной работы рекомендуется добавить дополнительные проверки:

<?php
use Bitrix\Main\Loader;
use Bitrix\Catalog\Product\SubscribeManager;
use Bitrix\Catalog\SubscribeTable;

if (!Loader::includeModule('catalog')) {
    throw new Exception('Модуль catalog не подключен');
}

function addProductSubscription($email, $productId, $siteId = SITE_ID) {
    // Валидация email
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return array('success' => false, 'error' => 'Некорректный email');
    }

    // Проверяем существование товара
    if (!\Bitrix\Catalog\ProductTable::getById($productId)->fetch()) {
        return array('success' => false, 'error' => 'Товар не найден');
    }

    $subscribeManager = new SubscribeManager();

    $subscribeData = array(
        'USER_CONTACT' => trim($email),
        'ITEM_ID' => intval($productId),
        'SITE_ID' => $siteId,
        'CONTACT_TYPE' => SubscribeTable::CONTACT_TYPE_EMAIL,
    );

    $subscribeId = $subscribeManager->addSubscribe($subscribeData);

    if ($subscribeId > 0) {
        return array(
            'success' => true, 
            'subscribeId' => $subscribeId,
            'message' => 'Подписка успешно оформлена'
        );
    } else {
        return array('success' => false, 'error' => 'Ошибка при добавлении подписки');
    }
}

// Пример использования
$result = addProductSubscription('user@example.com', 79354, 's1');

if ($result['success']) {
    echo $result['message'];
} else {
    echo 'Ошибка: ' . $result['error'];
}

Дополнительные возможности

Проверка существующих подписок

Перед добавлением новой подписки можно проверить, не существует ли уже подписка для данного пользователя:

$existingSubscribe = \Bitrix\Catalog\SubscribeTable::getList(array(
    'filter' => array(
        'USER_CONTACT' => $email,
        'ITEM_ID' => $productId,
        'SITE_ID' => $siteId
    ),
    'limit' => 1
))->fetch();

if ($existingSubscribe) {
    echo "Подписка уже существует";
} else {
    // Добавляем новую подписку
}

Добавление подписки для авторизованного пользователя

Если пользователь авторизован, можно добавить его ID в данные подписки:

global $USER;

$subscribeData = array(
    'USER_CONTACT' => $email,
    'ITEM_ID' => $productId,
    'SITE_ID' => $siteId,
    'CONTACT_TYPE' => SubscribeTable::CONTACT_TYPE_EMAIL,
    'USER_ID' => $USER->IsAuthorized() ? $USER->GetID() : null,
);

Заключение

Использование SubscribeManager позволяет легко интегрировать функционал подписок на товары в ваши проекты на Bitrix. Данный подход особенно полезен при создании кастомных форм подписки или интеграции с внешними системами.

Помните о необходимости валидации входных данных и обработки ошибок для обеспечения стабильной работы системы подписок.

Просмотров: 62 просмотров

Вам также может понравиться

Автор: n8n-ai

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.