Блог Горошко Андрея 1C-Битрикс,Bitrix24 Добавить элемент (позицию) в корзину существующего заказа sale.basketitem.add

Добавить элемент (позицию) в корзину существующего заказа sale.basketitem.add

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

Добавить элемент (позицию) в корзину существующего заказа sale.basketitem.add

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

Метод добавляет позицию в корзину существующего заказа.

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

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

Параметр fields

Значения полей, отмеченных , будут взяты из данных о товаре на сайте, если в поле productid передан реальный идентификатор товара. Если товар не существует на сайте, поле нужно заполнить самостоятельно. {.b24-info}

Название
тип
Описание
orderId
sale_order.id
Идентификатор заказа
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 — нет

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

quantity
double
Количество товара
xmlId
string
Внешний код позиции корзины
name,
string
Название товара
weight
integer
Вес товара
dimensions*
string
Размеры товара (сериализованный массив)
measureCode
catalog_measure.code
Код единицы измерения товара
measureName
catalog_measure.symbol
Название единицы измерения
canBuy
string
Флаг доступности товара. Возможные значения:
— Y — да
— N — нет
vatRate
double
Величина налога в процентах. Для указания ставки «Без НДС» нужно передать пустую строку
vatIncluded
string
Флаг того, включен ли НДС или налог в цену товара. Возможные значения:
— Y — да
— N — нет
catalogXmlId
string
Внешний код каталога товаров
productXmlId
string
Внешний код товара

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"fields":{"orderId":5147,"quantity":2,"productId":6544,"currency":"RUB"}}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/sale.basketitem.add
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"fields":{"orderId":5147,"quantity":2,"productId":6544,"currency":"RUB"},"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/sale.basketitem.add
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		"sale.basketitem.add",
    		{
    			fields: { // минимальный набор необходимых полей
    				orderId: 5147,
    				quantity: 2,
    				productId: 6544,
    				currency: 'RUB',
    			}
    		}
    	);
    	
    	const result = response.getData().result;
    	console.log(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'sale.basketitem.add',
                [
                    'fields' => [
                        'orderId'   => 5147,
                        'quantity'  => 2,
                        'productId' => 6544,
                        'currency'  => 'RUB',
                    ],
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error adding basket item: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        "sale.basketitem.add",
        {
            fields: { // минимальный набор необходимых полей
                orderId: 5147,
                quantity: 2,
                productId: 6544,
                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.add',
        [
            'fields' =>
            [
                'orderId' => 5147,
                'quantity' => 2,
                'productId' => 6544,
                'currency' => 'RUB',
            ]
        ]
    );

    echo '<PRE>';
    print_r($result);
    echo '</PRE>';
  • [](../../../tutorials/sale/example-position-with-custom-price)
  • [](../../../tutorials/sale/example-position-that-is-not-on-the-site)

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

HTTP-статус: 200

{
    "result": {
        "basketItem": {
            "basePrice": 1000,
            "canBuy": "Y",
            "catalogXmlId": "FUTURE-1C-CATALOG",
            "currency": "RUB",
            "customPrice": "N",
            "dateInsert": "2024-04-23T15:59:37+02:00",
            "dateUpdate": "2024-04-23T15:59:37+02:00",
            "dimensions": "a:3:{s:5:\"WIDTH\";N;s:6:\"HEIGHT\";N;s:6:\"LENGTH\";N;}",
            "discountPrice": 100,
            "id": 6790,
            "measureCode": "163",
            "measureName": "г",
            "name": "Товар",
            "orderId": 5147,
            "price": 900,
            "productId": 1245,
            "productXmlId": "1245",
            "properties": [],
            "quantity": 1,
            "reservations": [],
            "sort": 100,
            "vatIncluded": "N",
            "vatRate": null,
            "weight": 0,
            "xmlId": "bx_6627bec8c4fdc"
        }
    },
    "total": 1,
    "time": {
        "start": 1713880776.108755,
        "finish": 1713880777.704221,
        "duration": 1.595465898513794,
        "processing": 0.973701000213623,
        "date_start": "2024-04-23T15:59:36+02:00",
        "date_finish": "2024-04-23T15:59:37+02:00",
        "operating": 0
    }
}

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

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

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

HTTP-статус: 400

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

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

КодОписание*
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-update)
  • [](./sale-basket-item-get)
  • [](./sale-basket-item-list)
  • [](./sale-basket-item-delete)
  • [](./sale-basket-item-get-fields)
  • [](./sale-basket-item-add-catalog-product)
  • [](./sale-basket-item-update-catalog-product)
  • [](./sale-basket-item-get-catalog-product-fields)

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

Советы эксперта по интеграции:

  • Всегда используйте кэширование при частых запросах к sale.basketitem.add, чтобы разгрузить базу данных.
  • Соблюдайте стандарты PSR при написании обработчиков для «Добавить элемент (позицию) в корзину существующего заказа sale.basketitem.add».
  • Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.

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

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

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

Related Post

Событие при изменении набора значений для пользовательского поля списочного т…Событие при изменении набора значений для пользовательского поля списочного т…

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

Интеграция 1С-Битрикс с сервисом онлайн-чата JivoИнтеграция 1С-Битрикс с сервисом онлайн-чата Jivo

Бесшовная и отказоустойчивая интеграция сайта на 1С-Битрикс с внешними учетными системами, банками, службами доставки и маркетплейсами — основа масштабирования современного бизнеса. Услуга «Интеграция 1С-Битрикс с сервисом онлайн-чата Jivo» обеспечивает виджет

Как использовать метод SDK crm.contact.delete в Битрикс24Как использовать метод SDK crm.contact.delete в Битрикс24

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