Блог Горошко Андрея 1C-Битрикс,Bitrix24 Добавить позицию с товаром или услугой из модуля catalog в корзину существующ…

Добавить позицию с товаром или услугой из модуля catalog в корзину существующ…

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Добавить позицию с товаром или услугой из модуля catalog в корзину существующ…». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции.

Добавить позицию с товаром или услугой из модуля catalog в корзину существующего заказа sale.basketitem.addCatalogProduct

> Scope: sale
>
> Кто может выполнять метод: администратор

Метод добавляет позицию (элемент) с товаром или услугой из модуля catalog в корзину существующего заказа.

Параметры метода

Название
тип
Описание
fields
object
Значения полей для создания элемента (позиции) корзины в заказе

Параметр fields

Название
тип
Описание
orderId
sale_order.id
Идентификатор заказа. Может быть указан только при создании позиции корзины.

Должен быть получен ранее методами sale.order.add или sale.order.list

sort
integer
Положение в списке позиций заказа
productid
catalog_product.id
Идентификатор товара/вариации
price
double
Цена с учетом наценок и скидок (смотрите поле customPrice ниже). Если не указать, будет рассчитана на основе данных каталога.

Поле будет заполнено автоматически, если customPrice !== ‘Y’

basePrice
double
Исходная цена без учета наценок и скидок (смотрите поле customPrice ниже). Если не указать, будет рассчитана на основе данных каталога.

Поле будет заполнено автоматически, если customPrice !== ‘Y’

discountPrice
double
Величина итоговой скидки или наценки (смотрите поле customPrice ниже). Если не указать, будет рассчитана на основе данных каталога.

Поле будет заполнено автоматически, если customPrice !== ‘Y’

currency
crm_currency.CURRENCY
Валюта цены. Должна совпадать с валютой заказа
customPrice
string
Указана ли цена вручную:
— Y — цена задана вручную
— N — цена получена из каталога товаров

По умолчанию значение N.

Если указывается значение Y, то данные цены из каталога будут игнорироваться. Необходимо явно задать параметры price, basePrice и discountPrice так, чтобы выполнялось условие basePrice = price + discountPrice

quantity
double
Количество товара
xmlId
string
Внешний код позиции корзины
name
string
Название товара

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"fields":{"orderId":5147,"quantity":1,"productId":4347,"currency":"RUB"}}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/sale.basketitem.addCatalogProduct
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"fields":{"orderId":5147,"quantity":1,"productId":4347,"currency":"RUB"},"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/sale.basketitem.addCatalogProduct
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		"sale.basketitem.addCatalogProduct",
    		{
    			fields: {
    				orderId: 5147,
    				quantity: 1,
    				productId: 4347,
    				currency: 'RUB',
    			}
    		}
    	);
    	
    	const result = response.getData().result;
    	console.log(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'sale.basketitem.addCatalogProduct',
                [
                    'fields' => [
                        'orderId'   => 5147,
                        'quantity'  => 1,
                        'productId' => 4347,
                        'currency'  => 'RUB',
                    ],
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
        // Нужная вам логика обработки данных
        processData($result);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error adding catalog product: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        "sale.basketitem.addCatalogProduct",
        {
            fields: {
                orderId: 5147,
                quantity: 1,
                productId: 4347,
                currency: 'RUB',
            }
        },
    )
        .then(
            function(result)
            {
                if (result.error())
                {
                    console.error(result.error());
                }
                else
                {
                    console.log(result.data());
                }
            },
            function(error)
            {
                console.info(error);
            }
        );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'sale.basketitem.addCatalogProduct',
        [
            'fields' => [
                'orderId' => 5147,
                'quantity' => 1,
                'productId' => 4347,
                'currency' => 'RUB',
            ]
        ]
    );

    echo '<PRE>';
    print_r($result);
    echo '</PRE>';

Обработка ответа

HTTP-статус: 200

{
    "result": {
        "basketItem": {
            "basePrice": 1234,
            "canBuy": "Y",
            "catalogXmlId": "FUTURE-1C-CATALOG",
            "currency": "RUB",
            "customPrice": "N",
            "dateInsert": "2024-04-22T16:36:43+02:00",
            "dateUpdate": "2024-04-22T16:36:43+02:00",
            "dimensions": "a:3:{s:5:\"WIDTH\";N;s:6:\"HEIGHT\";N;s:6:\"LENGTH\";N;}",
            "discountPrice": 124,
            "id": 6784,
            "measureCode": "796",
            "measureName": "шт",
            "name": "Услуга2",
            "orderId": 5147,
            "price": 1110,
            "productId": 4347,
            "productXmlId": "4347",
            "properties": [],
            "quantity": 1,
            "reservations": [],
            "sort": 100,
            "type": 2,
            "vatIncluded": "N",
            "vatRate": null,
            "weight": 0,
            "xmlId": "bx_662675fba6516"
        }
    },
    "total": 1,
    "time": {
        "start": 1713796602.830767,
        "finish": 1713796604.315251,
        "duration": 1.4844841957092285,
        "processing": 0.6749260425567627,
        "date_start": "2024-04-22T16:36:42+02:00",
        "date_finish": "2024-04-22T16:36:44+02:00",
        "operating": 0
    }
}

Возвращаемые данные

Название
тип
Описание
result
object
Корневой элемент ответа
basketItem
sale_basket_item
Объект с данными созданного элемента (позиции) корзины
total
integer
Число обработанных записей
time
time
Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400

{
    "error":0,
    "error_description":"error"
}

Возможные коды ошибок

КодОписание
200140400006Module catalog is not exists

Отсутствует модуль Торговый каталог (catalog)

200140400007basket item is not saved - bad data

Позиция не была создана. Ошибка возникает, если передан неверный идентификатор товара или же товар неактивен

200140400008Required fields: fields[ORDER_ID]

Не указан идентификатор заказа

200140400009Order not found

Заказ не найден

200140400011Currency must be the currency of the order

Валюта позиции не совпадает с валютой заказа

200040300010Недостаточно прав для добавления
100Не указаны обязательные параметры
0Другие ошибки (например, фатальные ошибки)
  • [](./sale-basket-item-add)
  • [](./sale-basket-item-update)
  • [](./sale-basket-item-get)
  • [](./sale-basket-item-list)
  • [](./sale-basket-item-delete)
  • [](./sale-basket-item-get-fields)
  • [](./sale-basket-item-update-catalog-product)
  • [](./sale-basket-item-get-catalog-product-fields)

💡 Экспертное мнение и рекомендации

Практические рекомендации:

  • При написании кастомных компонентов для «Добавить позицию с товаром или услугой из модуля catalog в корзину существующ…» всегда разделяйте бизнес-логику и представление (шаблон).
  • Используйте отладку SQL-запросов через конструкцию $wpdb->last_query или стандартный трекер Битрикса, чтобы контролировать нагрузку.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Удалить свойство заказа sale.property.deleteУдалить свойство заказа sale.property.delete

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Удалить свойство заказа sale.property.delete», разберем архитектурные особенности и

Разработка интернет-магазина на 1С-Битрикс с модулем отслеживания статуса заказа по номеру телефона и SMSРазработка интернет-магазина на 1С-Битрикс с модулем отслеживания статуса заказа по номеру телефона и SMS

Внедрение функционала «с модулем отслеживания статуса заказа по номеру телефона и SMS» на платформе 1С-Битрикс позволяет существенно повысить средний чек, сократить операционные расходы и предоставить покупателям первоклассный сервис. удобная страница

Разработка сайта для клининговой компании и сервиса услуг на БитриксРазработка сайта для клининговой компании и сервиса услуг на Битрикс

Создание и развитие эффективного веб-ресурса по направлению «Разработка сайта для клининговой компании и сервиса услуг на Битрикс» позволяет усилить позиции бренда на рынке, автоматизировать взаимодействие с заказчиками и кратно увеличить