/ Bitrix24 создание сделки на основе нового заказа на сайте под управлением Bitrix

Bitrix24 создание сделки на основе нового заказа на сайте под управлением Bitrix

12 ноя 2022
Дмитрий М.
1263

Пусть стоит задача - создавать в Битрикс24 новую сделку на основании заказа на сайте, под управлением 1C-Bitrix.

Для этого нам требуется зарегистрировать обработчик события, на основании сохранения заказа: событие OnSaleOrderSaved.

Для этого нужно добавить в файл init.php следующий код:

//Обработчик события после сохранения заказа
Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnSaleOrderSaved', 'newOrderInB24');

// Функция которая отправляет запрос на Веб-хук в Битрикс 24
function sendB24(string $method, array $params) {
    $webhookUrl = 'https://#адрес_портала#/rest/1/fsdfasdfasdfadfs/'; //Адрес веб-хука портала
    $httpClient = new HttpClient();
    $response = $httpClient->post($webhookUrl.$method, $params);
    return json_decode($response, true);
}


function newOrderInB24(Bitrix\Main\Event $event)
{

    $order = $event->getParameter("ENTITY");
    // Проверяем проверяем новый ли заказ, в Б24 мы будем отправлять только поступающие заказы.
    if ($event->getParameter("IS_NEW")){

        $basket = $order->getBasket(); // Получаем корзину привязанную к заказу
        $order_props = $order->getPropertyCollection(); // Получаем свойства заказа

        $name = $order_props->getPayerName()->getValue(); // Получаем Имя клиента из св-ва заказа
        $phone = $order_props->getPhone()->getValue(); // Получаем Номер телефона из св-ва заказа
        $email = $order_props->getUserEmail()->getValue(); // Получаем Email из св-ва заказа

        // Если заполнен номер телефона, пробуем найти контакт клиента по номеру телефона в Б24
        if ($phone){
            $params = [
                'filter' => [ "PHONE" => $phone],
                'select' => [ "ID", "NAME"]
            ];
            $contactId = sendB24('crm.contact.list.json', $params)['result'][0]['ID'];
        }
        elseif ($email) {
        // Если номер телефона не заполнен, ищем клиента по указанному Email
            $params = [
                'filter' => [ "EMAIL" => $email ],
                'select' => [ "ID", "NAME" ]
            ];
            $contactId = sendB24('crm.contact.list.json', $params)['result'][0]['ID'];
        }
        // Если контакт не найден в Б24, тогда создаём новый Контакт.
        if (!$contactId){
            $arContactFields = [
                'fields' => [
                    "NAME" => $name,
                    "OPENED" => "Y", 
                    "ASSIGNED_BY_ID" => 1,
                    "TYPE_ID" => "CLIENT",
                    "SOURCE_ID" => "WEB",
                    'PHONE' => isset($phone) ? array(array('VALUE' => $phone, 'VALUE_TYPE' => 'WORK')) : array(),
                    'EMAIL' => isset($email) ? array(array('VALUE' => $email, 'VALUE_TYPE' => 'WORK')) : array(),
                ],
                'params' => array("REGISTER_SONET_EVENT" => "Y")
            ];
            $contactId = sendB24('crm.contact.add.json', $arContactFields)['result'];
        }
        // Заполняем параметры для новой Сделки
        $arDealFields = [
            'fields' => array(
                'TITLE'                 => 'Новый заказ товара: №'.$order->getId() , // Название сделки
                'CONTACT_ID'            => $contactId, // Клиент
                'ASSIGNED_BY_ID'        => '8', //ID ответственного сотрудника за Сделку
                'SOURCE_ID'             => 'WEB' // ID источника сделки
            ),
            'params' => array("REGISTER_SONET_EVENT" => "Y")
        ];
        // Создаём новую сделку для найденного или нового Клиента
        $deal = sendB24('crm.deal.add.json', $arDealFields)['result'];
        // Если у заказа есть привязанные товара, тогда привяжем эти товары для созданной сделки
        if (count($basket->getQuantityList()) > 0 && $deal) {
            $productParams = [ 
                'id' => $deal
            ];
            foreach ($basket as $basketItem){
                $productParams['rows'][] = [
                    'PRODUCT_NAME'  => $basketItem->getField('NAME'),
                    'PRICE'         => $basketItem->getPrice(),
                    'QUANTITY'      => $basketItem->getQuantity()
                ];
            }
            sendB24('crm.deal.productrows.set', $productParams);
        }

    }

}

Статья была полезна? Поблагодарите автора.

Самые читаемые
#1С Битрикс, #Bitrix CMS, #.htaccess, #настройка редиректов
4 авг 2019
#bitrix:news, #сортировка, #фильтрация, #bitrix:catalog, #catalog.section, #news.list
16 дек 2020
#Хлебные крошки, #1С Битрикс, #Bitrix CMS, #bitrix:breadcrumbs, #component_epilog, #кэширование
1 окт 2018
#bitrix, #свойства элементов, #обработчик событий, #OnBeforeIBlockElementUpdate, #OnIBlockElementSetPropertyValues
21 июл 2020
#Bitrix CMS, #breadcrumb, #bitrix:breadcrumbs, #хлебные крошки, #настройка
13 фев 2019
#ресайз изображений, #1С Битрикс, #Bitrix CMS
3 мар 2019
#bitrix, #robots.txt, #sitemap.xml, #поддомены, #мультисайтовость
16 окт 2018
#bitrix, #bitrix:catalog.section, #скидки, #товары со скидкой, #страница скидок, #страница со скидками
4 окт 2018
#bitrix, #пользовательские свойства, #тип свойств, #привязка к элементам
27 ноя 2019