Блог Горошко Андрея 1C-Битрикс,Bitrix24 Обновить обработчик службы доставки sale.delivery.handler.update

Обновить обработчик службы доставки sale.delivery.handler.update

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Обновить обработчик службы доставки sale.delivery.handler.update». Вы узнаете экспертные методики работы с sale.delivery.handler.update и научитесь избегать типичных ошибок начинающих разработчиков.

Обновить обработчик службы доставки sale.delivery.handler.update

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

Метод обновляет обработчик службы доставки.

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

Название
тип
Описание
ID
sale_delivery_handler.ID
Идентификатор обработчика службы доставки.
Получить идентификаторы обработчиков службы доставки можно с помощью метода sale.delivery.handler.list
NAME
string
Название обработчика службы доставки
CODE
string
Символьный код обработчика службы доставки
SORT
integer
Сортировка
DESCRIPTION
string
Описание обработчика службы доставки
SETTINGS
object
Объект, содержащий информацию о настройках обработчика службы доставки (подробное описание приведено ниже)
PROFILES
object[]
Массив, содержащий список объектов профилей доставки (подробное описание приведено ниже).

Подразумевается, что у обработчика службы доставки должен быть как минимум 1 профиль

Параметр SETTINGS {#parametr-settings}

Название
тип
Описание
CALCULATE_URL
string
URL для расчёта стоимости доставки.

На данный URL приходят данные о посылке (что доставить, куда и как), стоимость доставки которой нужно рассчитать в ответе.

Формат запроса и ответа детально описан в документации по веб-хуку Расчет стоимости доставки

CREATE_DELIVERY_REQUEST_URL
string
URL для создания заказа на доставку.

На данный URL приходят данные о посылке (что доставить, куда и как), заказ на которую нужно оформить в службе доставки.

Формат запроса и ответа детально описан в документации по веб-хуку Создание заказа на доставку

CANCEL_DELIVERY_REQUEST_URL
string
URL для отмены заказа на доставку

На данный URL приходят данные о посылке (что доставить, куда и как), заказ на которую нужно отменить в службе доставки.

Формат запроса и ответа детально описан в документации по веб-хуку Отмена заказа на доставку

HAS_CALLBACK_TRACKING_SUPPORT
string
Индикатор того, будет ли служба доставки присылать оповещения о статусе заказа на доставку (см. метод sale.delivery.request.sendmessage).

В случае, если поддержка событий указана, то в интерфейсе менеджера при заказе доставки будет создано дело на доставку, в которое могут транслироваться изменения, связанные с текущим статусом доставки.

Возможные значения:
— Y — есть поддержка
— N — нет поддержки

CONFIG
object
Массив объектов с доступными настройками для службы доставки, создаваемой с использованием данного обработчика (подробное описание приведено ниже)

Параметр CONFIG {#parametr-config}

Название
тип
Описание
TYPE
string
Тип поля настройки
Возможные значения:
— STRING — строка
— Y/N — чекбокс (да / нет)
— NUMBER — число
— ENUM — список
— DATE — дата
— LOCATION — местоположение
CODE
string
Символьный код настройки
NAME
string
Название настройки
OPTIONS
object
Список опций для выбора. Объект в формате ключ=значение. Где ключ — код опции, а значение — опция.

Пример:

{
   "Option1Code": "Option1Value",
   "Option2Code": "Option2Value",
   "Option3Code": "Option3Value"
}

Параметр актуален только для настройки типа ENUM

Параметр PROFILES {#parametr-profiles}

Название
тип
Описание
NAME
string
Название профиля обработчика службы доставки
CODE*
string
Символьный код профиля обработчика службы доставки
DESCRIPTION
string
Описание профиля обработчика службы доставки

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"ID":14,"CODE":"uber","NAME":"New Uber","DESCRIPTION":"New Uber Description","SORT":300,"SETTINGS":{"CALCULATE_URL":"https://gateway.bx/calculate.php","CREATE_DELIVERY_REQUEST_URL":"https://gateway.bx/create_delivery_request.php","CANCEL_DELIVERY_REQUEST_URL":"https://gateway.bx/cancel_delivery_request.php","HAS_CALLBACK_TRACKING_SUPPORT":"N","CONFIG":[{"TYPE":"STRING","CODE":"SETTING_1","NAME":"String Example"},{"TYPE":"Y/N","CODE":"SETTING_2","NAME":"Checkbox Example"},{"TYPE":"NUMBER","CODE":"SETTING_3","NAME":"Number Example"},{"TYPE":"ENUM","CODE":"SETTING_4","NAME":"Enum Example","OPTIONS":{"Option1Code":"Option1Value","Option2Code":"Option2Value","Option3Code":"Option3Value","Option4Code":"Option4Value","Option5Code":"Option5Value"}},{"TYPE":"DATE","CODE":"SETTING_5","NAME":"Date Example"},{"TYPE":"LOCATION","CODE":"SETTING_6","NAME":"Location Example"}]},"PROFILES":[{"NAME":"New Taxi","CODE":"TAXI","DESCRIPTION":"New Taxi Delivery"},{"NAME":"New Cargo","CODE":"CARGO","DESCRIPTION":"New Cargo Delivery"}]}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.delivery.handler.update
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"ID":14,"CODE":"uber","NAME":"New Uber","DESCRIPTION":"New Uber Description","SORT":300,"SETTINGS":{"CALCULATE_URL":"https://gateway.bx/calculate.php","CREATE_DELIVERY_REQUEST_URL":"https://gateway.bx/create_delivery_request.php","CANCEL_DELIVERY_REQUEST_URL":"https://gateway.bx/cancel_delivery_request.php","HAS_CALLBACK_TRACKING_SUPPORT":"N","CONFIG":[{"TYPE":"STRING","CODE":"SETTING_1","NAME":"String Example"},{"TYPE":"Y/N","CODE":"SETTING_2","NAME":"Checkbox Example"},{"TYPE":"NUMBER","CODE":"SETTING_3","NAME":"Number Example"},{"TYPE":"ENUM","CODE":"SETTING_4","NAME":"Enum Example","OPTIONS":{"Option1Code":"Option1Value","Option2Code":"Option2Value","Option3Code":"Option3Value","Option4Code":"Option4Value","Option5Code":"Option5Value"}},{"TYPE":"DATE","CODE":"SETTING_5","NAME":"Date Example"},{"TYPE":"LOCATION","CODE":"SETTING_6","NAME":"Location Example"}]},"PROFILES":[{"NAME":"New Taxi","CODE":"TAXI","DESCRIPTION":"New Taxi Delivery"},{"NAME":"New Cargo","CODE":"CARGO","DESCRIPTION":"New Cargo Delivery"}],"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/sale.delivery.handler.update
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		'sale.delivery.handler.update', {
    			ID: 14,
    			CODE: "uber",
    			NAME: "New Uber",
    			DESCRIPTION: "New Uber Description",
    			SORT: 300,
    			SETTINGS: {
    				CALCULATE_URL: "https://gateway.bx/calculate.php",
    				CREATE_DELIVERY_REQUEST_URL: "https://gateway.bx/create_delivery_request.php",
    				CANCEL_DELIVERY_REQUEST_URL: "https://gateway.bx/cancel_delivery_request.php",
    				HAS_CALLBACK_TRACKING_SUPPORT: "N",
    				CONFIG: [{
    						TYPE: "STRING",
    						CODE: "SETTING_1",
    						NAME: "String Example",
    					},
    					{
    						TYPE: "Y/N",
    						CODE: "SETTING_2",
    						NAME: "Checkbox Example",
    					},
    					{
    						TYPE: "NUMBER",
    						CODE: "SETTING_3",
    						NAME: "Number Example",
    					},
    					{
    						TYPE: "ENUM",
    						CODE: "SETTING_4",
    						NAME: "Enum Example",
    						OPTIONS: {
    							"Option1Code": "Option1Value",
    							"Option2Code": "Option2Value",
    							"Option3Code": "Option3Value",
    							"Option4Code": "Option4Value",
    							"Option5Code": "Option5Value",
    						},
    					},
    					{
    						TYPE: "DATE",
    						CODE: "SETTING_5",
    						NAME: "Date Example",
    					},
    					{
    						TYPE: "LOCATION",
    						CODE: "SETTING_6",
    						NAME: "Location Example",
    					},
    				],
    			},
    			PROFILES: [{
    					NAME: "New Taxi",
    					CODE: "TAXI",
    					DESCRIPTION: "New Taxi Delivery",
    				},
    				{
    					NAME: "New Cargo",
    					CODE: "CARGO",
    					DESCRIPTION: "New Cargo Delivery",
    				},
    			],
    		}
    	);
    	
    	const result = response.getData().result;
    	console.info(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'sale.delivery.handler.update',
                [
                    'ID'          => 14,
                    'CODE'        => "uber",
                    'NAME'        => "New Uber",
                    'DESCRIPTION' => "New Uber Description",
                    'SORT'        => 300,
                    'SETTINGS'    => [
                        'CALCULATE_URL'               => "https://gateway.bx/calculate.php",
                        'CREATE_DELIVERY_REQUEST_URL' => "https://gateway.bx/create_delivery_request.php",
                        'CANCEL_DELIVERY_REQUEST_URL' => "https://gateway.bx/cancel_delivery_request.php",
                        'HAS_CALLBACK_TRACKING_SUPPORT' => "N",
                        'CONFIG'                      => [
                            [
                                'TYPE' => "STRING",
                                'CODE' => "SETTING_1",
                                'NAME' => "String Example",
                            ],
                            [
                                'TYPE' => "Y/N",
                                'CODE' => "SETTING_2",
                                'NAME' => "Checkbox Example",
                            ],
                            [
                                'TYPE' => "NUMBER",
                                'CODE' => "SETTING_3",
                                'NAME' => "Number Example",
                            ],
                            [
                                'TYPE'    => "ENUM",
                                'CODE'    => "SETTING_4",
                                'NAME'    => "Enum Example",
                                'OPTIONS' => [
                                    "Option1Code" => "Option1Value",
                                    "Option2Code" => "Option2Value",
                                    "Option3Code" => "Option3Value",
                                    "Option4Code" => "Option4Value",
                                    "Option5Code" => "Option5Value",
                                ],
                            ],
                            [
                                'TYPE' => "DATE",
                                'CODE' => "SETTING_5",
                                'NAME' => "Date Example",
                            ],
                            [
                                'TYPE' => "LOCATION",
                                'CODE' => "SETTING_6",
                                'NAME' => "Location Example",
                            ],
                        ],
                    ],
                    'PROFILES'    => [
                        [
                            'NAME'        => "New Taxi",
                            'CODE'        => "TAXI",
                            'DESCRIPTION' => "New Taxi Delivery",
                        ],
                        [
                            'NAME'        => "New Cargo",
                            'CODE'        => "CARGO",
                            'DESCRIPTION' => "New Cargo Delivery",
                        ],
                    ],
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error updating delivery handler: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        'sale.delivery.handler.update', {
            ID: 14,
            CODE: "uber",
            NAME: "New Uber",
            DESCRIPTION: "New Uber Description",
            SORT: 300,
            SETTINGS: {
                CALCULATE_URL: "https://gateway.bx/calculate.php",
                CREATE_DELIVERY_REQUEST_URL: "https://gateway.bx/create_delivery_request.php",
                CANCEL_DELIVERY_REQUEST_URL: "https://gateway.bx/cancel_delivery_request.php",
                HAS_CALLBACK_TRACKING_SUPPORT: "N",
                CONFIG: [{
                        TYPE: "STRING",
                        CODE: "SETTING_1",
                        NAME: "String Example",
                    },
                    {
                        TYPE: "Y/N",
                        CODE: "SETTING_2",
                        NAME: "Checkbox Example",
                    },
                    {
                        TYPE: "NUMBER",
                        CODE: "SETTING_3",
                        NAME: "Number Example",
                    },
                    {
                        TYPE: "ENUM",
                        CODE: "SETTING_4",
                        NAME: "Enum Example",
                        OPTIONS: {
                            "Option1Code": "Option1Value",
                            "Option2Code": "Option2Value",
                            "Option3Code": "Option3Value",
                            "Option4Code": "Option4Value",
                            "Option5Code": "Option5Value",
                        },
                    },
                    {
                        TYPE: "DATE",
                        CODE: "SETTING_5",
                        NAME: "Date Example",
                    },
                    {
                        TYPE: "LOCATION",
                        CODE: "SETTING_6",
                        NAME: "Location Example",
                    },
                ],
            },
            PROFILES: [{
                    NAME: "New Taxi",
                    CODE: "TAXI",
                    DESCRIPTION: "New Taxi Delivery",
                },
                {
                    NAME: "New Cargo",
                    CODE: "CARGO",
                    DESCRIPTION: "New Cargo Delivery",
                },
            ],
        },
        function(result) {
            if (result.error()) {
                console.error(result.error());
            } else {
                console.info(result.data());
            }
        }
    );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'sale.delivery.handler.update',
        [
            'ID' => 14,
            'CODE' => "uber",
            'NAME' => "New Uber",
            'DESCRIPTION' => "New Uber Description",
            'SORT' => 300,
            'SETTINGS' => [
                'CALCULATE_URL' => "https://gateway.bx/calculate.php",
                'CREATE_DELIVERY_REQUEST_URL' => "https://gateway.bx/create_delivery_request.php",
                'CANCEL_DELIVERY_REQUEST_URL' => "https://gateway.bx/cancel_delivery_request.php",
                'HAS_CALLBACK_TRACKING_SUPPORT' => "N",
                'CONFIG' => [
                    ['TYPE' => "STRING", 'CODE' => "SETTING_1", 'NAME' => "String Example"],
                    ['TYPE' => "Y/N", 'CODE' => "SETTING_2", 'NAME' => "Checkbox Example"],
                    ['TYPE' => "NUMBER", 'CODE' => "SETTING_3", 'NAME' => "Number Example"],
                    [
                        'TYPE' => "ENUM",
                        'CODE' => "SETTING_4",
                        'NAME' => "Enum Example",
                        'OPTIONS' => [
                            "Option1Code" => "Option1Value",
                            "Option2Code" => "Option2Value",
                            "Option3Code" => "Option3Value",
                            "Option4Code" => "Option4Value",
                            "Option5Code" => "Option5Value",
                        ],
                    ],
                    ['TYPE' => "DATE", 'CODE' => "SETTING_5", 'NAME' => "Date Example"],
                    ['TYPE' => "LOCATION", 'CODE' => "SETTING_6", 'NAME' => "Location Example"],
                ],
            ],
            'PROFILES' => [
                ['NAME' => "New Taxi", 'CODE' => "TAXI", 'DESCRIPTION' => "New Taxi Delivery"],
                ['NAME' => "New Cargo", 'CODE' => "CARGO", 'DESCRIPTION' => "New Cargo Delivery"],
            ],
        ]
    );

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

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

HTTP-статус: 200

{
   "result":true,
   "time":{
      "start":1713857588.711742,
      "finish":1713857589.121912,
      "duration":0.4101700782775879,
      "processing":0.02155303955078125,
      "date_start":"2024-04-23T10:33:08+03:00",
      "date_finish":"2024-04-23T10:33:09+03:00"
   }
}

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

Название
тип
Описание
result
boolean
Результат обновления обработчика службы доставки
time
time
Информация о времени выполнения запроса

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

HTTP-статус: 400, 403

{
   "error":"ERROR_HANDLER_NOT_FOUND",
   "error_description":"Handler not found"
}

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

КодОписаниеСтатус
ERROR_HANDLER_NOT_FOUNDОбработчик службы доставки с указанным идентификатором не найден400
ERROR_CHECK_FAILUREОшибка валидации входящих параметров (детали в описании ошибки)400
ERROR_HANDLER_UPDATEОшибка при попытке обновления обработчика службы доставки400
ERROR_HANDLER_ALREADY_EXISTОбработчик службы доставки с указанным кодом уже существует400
ACCESS_DENIEDНедостаточно прав для обновления обработчика службы доставки403
  • [](./sale-delivery-handler-add)
  • [](./sale-delivery-handler-delete)
  • [](./sale-delivery-handler-list)

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

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

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

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

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

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

Related Post

Получить воронку по Id crm.category.getПолучить воронку по Id crm.category.get

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

Получить список задач task.item.listПолучить список задач task.item.list

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

Разработка интернет-магазина ковров, ламината и напольных покрытий на 1С-БитриксРазработка интернет-магазина ковров, ламината и напольных покрытий на 1С-Битрикс

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