sale.basketitem.add
Добавить элемент (позицию) в корзину существующего заказа
Описание
Метод sale.basketitem.add добавляет позицию в корзину существующего заказа.
Параметры
fields
object
обязательный
Значения полей для создания элемента (позиции) корзины в заказе
Параметр fields
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
обязательный
Ставка налога долей от единицы: 0.1 — это 10 %. Для указания ставки «Без НДС» нужно передать пустую строку
vatIncluded
string
обязательный
Флаг того, включен ли НДС или налог в цену товара. Возможные значения:
- Y — да
- N — нет
catalogXmlId
string
обязательный
Внешний код каталога товаров
productXmlId
string
обязательный
Внешний код товара
Примеры запроса
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_webhook_here**/sale.basketitem.add
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
// This snippet is an ES module: top-level await requires type="module" or a bundler.
// $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
import { Text } from '@bitrix24/b24jssdk'
import type { B24Frame, ISODate } from '@bitrix24/b24jssdk'
declare const $b24: B24Frame
// Shape of the payload returned in result (match the "response handling" section of the page)
type BasketItemAddResult = {
basketItem: {
id: number
orderId: number
productId: number
name: string
sort: number
quantity: number
price: number
basePrice: number
discountPrice: number
currency: string
customPrice: string
vatRate: number | null
vatIncluded: string
weight: number
dimensions: string
measureCode: string
measureName: string
canBuy: string
xmlId: string
catalogXmlId: string
productXmlId: string
dateInsert: ISODate | null
dateUpdate: ISODate | null
properties: unknown[]
reservations: unknown[]
}
}
try {
const response = await $b24.actions.v2.call.make<BasketItemAddResult>({
method: 'sale.basketitem.add',
params: {
fields: {
orderId: 5147,
quantity: 2,
productId: 6544,
currency: 'RUB',
},
},
requestId: Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
} else {
const result = response.getData()!.result
console.info(result.basketItem.id, result.basketItem.name, result.basketItem.price)
}
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
<script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
<script>
async function addBasketItem() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
const response = await $b24.actions.v2.call.make({
method: 'sale.basketitem.add',
params: {
fields: {
orderId: 5147,
quantity: 2,
productId: 6544,
currency: 'RUB',
},
},
requestId: B24Js.Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
return
}
const result = response.getData().result
console.info(result.basketItem.id, result.basketItem.name, result.basketItem.price)
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', addBasketItem)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
fields = {
"orderId": 5147,
"quantity": 2,
"productId": 6544,
"currency": "RUB",
}
try:
bitrix_response = client.sale.basketitem.add(
fields=fields,
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
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.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);
}
);
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>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "sale.basketitem.add", b24.Params{
"fields": b24.Params{
"orderId": 5147,
"quantity": 2,
"productId": 6544,
"currency": "RUB",
},
})
if err != nil {
return fmt.Errorf("sale.basketitem.add: %w", err)
}
// Метод заворачивает ответ в объект с ключом "basketItem".
raw, ok := b24.Unwrap(res.Result, "basketItem")
if !ok {
return fmt.Errorf("в ответе нет ключа basketItem")
}
var item struct {
BasePrice int `json:"basePrice"`
CanBuy string `json:"canBuy"`
CatalogXmlID string `json:"catalogXmlId"`
Currency string `json:"currency"`
CustomPrice string `json:"customPrice"`
DateInsert string `json:"dateInsert"`
}
if err := json.Unmarshal(raw, &item); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
fmt.Println(item.BasePrice, item.CanBuy)
Ответ
HTTP-статус: 200
{
"result": {
"basketItem": {
"basePrice": 1000,
"canBuy": "Y",
"catalogXmlId": "FUTURE-ERP-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"
}
| Код | Описание | Значение |
|---|---|---|
200140400007 |
basket item is not saved - bad data
Позиция не была создана. Ошибка возникает, если передан неверный идентификатор товара или же товар неактивен |
|
200140400008 |
Required fields: fields[ORDER_ID]
Не указан идентификатор заказа |
|
200140400009 |
Order not found
Заказ не найден |
|
200140400011 |
Currency must be the currency of the order
Валюта позиции не совпадает с валютой заказа |
|
200040300010 |
Недостаточно прав для добавления | |
100 |
Не указаны обязательные параметры | |
0 |
Другие ошибки (например, фатальные ошибки) |

