Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Обновить коллекцию цен товара catalog.price.modify», проанализируем лучшие практики и покажем, как правильно использовать catalog.price.modify в реальных задачах.
Обновить коллекцию цен товара catalog.price.modify
> Scope: catalog
>
> Кто может выполнять метод: пользователь с правом «Изменение цены продажи товара»
Метод catalog.price.modify изменяет коллекцию цен товара. Позволяет добавлять, обновлять и удалять разные цены товара за один запрос.
Параметры метода
Названиетип | Описание |
|---|---|
fieldsobject | Объект с данными для модификации цен (подробное описание) |
Параметр fields {#fields}
Названиетип | Описание |
|---|---|
productobject | Данные товара и его цен (подробное описание) |
Параметр product {#product}
Названиетип | Описание |
|---|---|
idcatalog_product.id | Идентификатор товара, можно получить методами catalog.product.list, catalog.product.offer.list, catalog.product.service.list, catalog.product.sku.list |
pricesarray | Массив цен товара (подробное описание) |
Параметр prices {#prices}
Названиетип | Описание |
|---|---|
idcatalog_price.id | Идентификатор цены. Если указан, то цена будет обновлена. Если не указан, то будет создана новая цена. Цена, идентификатор которой не был передан, будет удалена. Получить идентификаторы цен можно методом catalog.price.list |
catalogGroupIdcatalog_price_type.id | Идентификатор типа цены, можно получить методом catalog.priceType.list |
pricedouble | Значение цены |
currency*string | Идентификатор валюты, можно получить методом crm.currency.list |
Примеры кода
- cURL (Webhook)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fields":{"product":{"id":8,"prices":[{"catalogGroupId":1,"currency":"RUB","price":2001},{"catalogGroupId":3,"currency":"RUB","price":2001},{"catalogGroupId":5,"currency":"RUB","price":2001,"id":122}]}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/catalog.price.modify- cURL (OAuth)
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fields":{"product":{"id":8,"prices":[{"catalogGroupId":1,"currency":"RUB","price":2001},{"catalogGroupId":3,"currency":"RUB","price":2001},{"catalogGroupId":5,"currency":"RUB","price":2001,"id":122}]},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/catalog.price.modify- JS
try {
const response = await $b24.callMethod(
'catalog.price.modify',
{
fields: {
product: {
id: 8,
prices: [
{
catalogGroupId: 1,
currency: 'RUB',
price: 2001
},
{
catalogGroupId: 3,
currency: 'RUB',
price: 2001
},
{
catalogGroupId: 5,
currency: 'RUB',
price: 2001,
id: 122
},
]
},
}
}
);
const result = response.getData().result;
console.log('Modified prices:', result);
processResult(result);
} catch (error) {
console.error('Error:', error);
}- PHP
try {
$response = $b24Service
->core
->call(
'catalog.price.modify',
[
'fields' => [
'product' => [
'id' => 8,
'prices' => [
[
'catalogGroupId' => 1,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 3,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 5,
'currency' => 'RUB',
'price' => 2001,
'id' => 122
]
]
]
]
]
);
$result = $response
->getResponseData()
->getResult();
if ($result->error()) {
error_log($result->error());
} else {
echo 'Success: ' . print_r($result->data(), true);
}
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error modifying prices: ' . $e->getMessage();
}- BX24.js
BX24.callMethod(
'catalog.price.modify',
{
fields: {
product: {
id: 8,
prices: [
{
catalogGroupId: 1,
currency: 'RUB',
price: 2001
},
{
catalogGroupId: 3,
currency: 'RUB',
price: 2001
},
{
catalogGroupId: 5,
currency: 'RUB',
price: 2001,
id: 122
},
]
},
}
},
function(result)
{
if(result.error())
console.error(result.error().ex);
else
console.log(result.data());
}
);- PHP CRest
require_once('crest.php');
$result = CRest::call(
'catalog.price.modify',
[
'fields' => [
'product' => [
'id' => 8,
'prices' => [
[
'catalogGroupId' => 1,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 3,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 5,
'currency' => 'RUB',
'price' => 2001,
'id' => 122
],
]
],
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';Обработка ответа
HTTP-статус: 200
{
"result": {
"prices": [
{
"catalogGroupId": 1,
"currency": "RUB",
"extraId": null,
"id": 123,
"price": 2001,
"priceScale":2001,
"productId": 8,
"quantityFrom": null,
"quantityTo": null,
"timestampX": "2024-05-27T16:29:35+02:00"
},
{
"catalogGroupId": 3,
"currency": "RUB",
"extraId": null,
"id": 124,
"price": 2001,
"priceScale":2001,
"productId": 8,
"quantityFrom": null,
"quantityTo": null,
"timestampX": "2024-05-27T16:29:35+02:00"
},
{
"catalogGroupId": 5,
"currency": "RUB",
"extraId": null,
"id": 122,
"price": 2001,
"priceScale":2001,
"productId": 8,
"quantityFrom": null,
"quantityTo": null,
"timestampX": "2024-05-27T16:29:35+02:00"
}
]
},
"time": {
"start": 1712327086.69665,
"finish": 1712327086.95303,
"duration": 0.256376028060913,
"processing": 0.0112268924713135,
"date_start": "2024-05-27T16:29:35+02:00",
"date_finish": "2024-05-27T16:29:35+02:00",
"operating": 0
}
}Возвращаемые данные
Названиетип | Описание |
|---|---|
resultobject | Корневой элемент ответа |
pricescatalog_price[] | Массив объектов с информацией о ценах товара |
timetime | Информация о времени выполнения запроса |
Обработка ошибок
HTTP-статус: 400
{
"error": 0,
"error_description": "Required fields: price, currency"
}Возможные коды ошибок
| Код | Описание | Значение |
|---|---|---|
200040300020 | Access Denied | Недостаточно прав на редактирование цены |
200040300030 | Access Denied | Недостаточно прав на редактирование товара |
100 | Could not find value for parameter {fields} | Не указан или пустой параметр fields |
0 | Required fields: | Не переданы обязательные поля |
0 | Validate price error. Catalog price group is wrong | Неправильный тип цены |
0 | Validate price error. Catalog product is allowed has only single price without ranges in price group | Дублирование типа цены. Были переданы в массиве prices две или более записей с одинаковым catalogGroupId |
0 | Другие ошибки |
- [](./catalog-price-add)
- [](./catalog-price-update)
- [](./catalog-price-get)
- [](./catalog-price-list)
- [](./catalog-price-delete)
- [](./catalog-price-get-fields)
💡 Экспертное мнение и рекомендации
Ключевые выводы по теме «Обновить коллекцию цен товара catalog.price.modify»:
Использование современных стандартов D7 при работе с catalog.price.modify позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru