Блог Горошко Андрея 1C-Битрикс,Bitrix24 Обновить коллекцию цен товара catalog.price.modify

Обновить коллекцию цен товара catalog.price.modify

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Обновить коллекцию цен товара catalog.price.modify», проанализируем лучшие практики и покажем, как правильно использовать catalog.price.modify в реальных задачах.

Обновить коллекцию цен товара catalog.price.modify

> Scope: catalog
>
> Кто может выполнять метод: пользователь с правом «Изменение цены продажи товара»

Метод catalog.price.modify изменяет коллекцию цен товара. Позволяет добавлять, обновлять и удалять разные цены товара за один запрос.

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

Название
тип
Описание
fields
object
Объект с данными для модификации цен (подробное описание)

Параметр fields {#fields}

Название
тип
Описание
product
object
Данные товара и его цен (подробное описание)

Параметр product {#product}

Название
тип
Описание
id
catalog_product.id
Идентификатор товара, можно получить методами catalog.product.list, catalog.product.offer.list, catalog.product.service.list, catalog.product.sku.list
prices
array
Массив цен товара (подробное описание)

Параметр prices {#prices}

Название
тип
Описание
id
catalog_price.id
Идентификатор цены. Если указан, то цена будет обновлена. Если не указан, то будет создана новая цена. Цена, идентификатор которой не был передан, будет удалена. Получить идентификаторы цен можно методом catalog.price.list
catalogGroupId
catalog_price_type.id
Идентификатор типа цены, можно получить методом catalog.priceType.list
price
double
Значение цены
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
    }
}

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

Название
тип
Описание
result
object
Корневой элемент ответа
prices
catalog_price[]
Массив объектов с информацией о ценах товара
time
time
Информация о времени выполнения запроса

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

HTTP-статус: 400

{
    "error": 0,
    "error_description": "Required fields: price, currency"
}

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

КодОписаниеЗначение
200040300020Access DeniedНедостаточно прав на редактирование цены
200040300030Access DeniedНедостаточно прав на редактирование товара
100Could not find value for parameter {fields}Не указан или пустой параметр fields
0Required fields:Не переданы обязательные поля
0Validate price error. Catalog price group is wrongНеправильный тип цены
0Validate 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 и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Найти подразделения im.search.department.listНайти подразделения im.search.department.list

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Найти подразделения im.search.department.list». Вы узнаете экспертные методики работы с im.search.department.list и научитесь избегать

Создать статус sale.status.addСоздать статус sale.status.add

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Создать статус sale.status.add». Вы узнаете экспертные методики работы с sale.status.add и научитесь избегать

Редизайн мобильной версии интернет-магазина по принципу Mobile-FirstРедизайн мобильной версии интернет-магазина по принципу Mobile-First

Миграция сайта на платформу 1С-Битрикс или комплексный редизайн интерфейса — это стратегический шаг для устранения технических ограничений, защиты от санкционных рисков и масштабирования онлайн-продаж. Услуга «Редизайн мобильной версии интернет-магазина по