Как связать 1С-Битрикс и retailCrm

14.02.2020

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

Именно поэтому многие интернет-магазины уже связаны с crm-системами, которые в свою очередь стараются дать все большие возможности, как в плане функций, так и для обмена с сайтами.

RetailCrm - облачная crm, для управления продажами и не только. Одна из лидирующих систем в онлайн-торговле.


Интеграция с помощью модуля

Интеграцию между сайтом на Битрикс и retailCrm проще всего настроить используя готовый модуль - официальное и бесплатное решение.

Это решение с открытым исходным кодом . Обычно, в маркетплейс обновления попадают реже, чем на github.

Как быстро внедрить данный модуль, инструкция есть на сайте retailCrm.

Модуль может:

  • производить выгрузку новых заказов из 1С-Битрикс в систему;

  • производить обновление данных по существующим заказам с учетом изменений, внесенных в 1С-Битрикс;

  • производить выгрузку новых заказов и клиентов из системы в 1С-Битрикс;

  • производить обновление данных по существующим заказам с учетом изменений, внесенных в систему (например, в системе был изменен статус заказа, количество товаров в заказе и др., в 1С-Битрикс эти изменения также будут отражены);

  • отправлять в систему информацию об онлайн-оплате заказа пользователем.

Для базовых процессов все «из коробки».


Способы кастомизации

Все для разработчиков собрано на одной странице .

При использовании модуля есть несколько путей для кастомизации без потери кода при обновлениях: 

  • Вызываемые функции - в методах модуля встроен вызов нескольких функций, в которых можно модифицировать отправленные или полученные из crm данные

  • Копирование файлов с классами из модуля в bitrix/php_interface/retailcrm, таким образом получаем возможность модифицировать код файла целиком.

  • Использовать методы модуля в своих компонентах / контроллерах

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


Мини-кейс по доработке интеграции 1С-Битрикс и RetailCrm из реального проекта


Проблема

В случае нашего клиента, товары на сайте могут дополняться опциями, которые транслируются в заказ как свойства товаров.

В crm же товары уходили без свойств, что вызывало сложности с отгрузкой, в том числе случаи, когда товар уходил покупателю не в той комплектации.




Решение

В retailCrm было решено использовать свойства товара в заказе.

Эти свойства хранятся только в заказе и не добавляются в объект самого товара Crm (номенклатура товара остается не измененной).



Отправка заказа на сайте, в установленной версии модуля, осуществляется на событие OnSaleOrderEntitySaved, но в этот момент еще нет свойств товаров в корзине. Именно поэтому не удалось использовать наиболее подходящий на первый взгляд, способ кастомизации с помощью Вызываемых функций .

Следующим вариантом решения, стало подключиться к событию сохранения заказа OnSaleOrderSaved:

use Bitrix\Main; 
use Bitrix\Main\Loader;

Loader::includeModule("sale");
Loader::includeModule("intaro.retailcrm");
	
Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderSaved',
    'updateCrmOrder'
);	

function updateCrmOrder($event)
{
    $customRetailCrm = new customRetailCrm();
    $customRetailCrm->updateCrmOrder($event);
}

В кастомном классе, сформированы функции для:

  • получения данных по заказу из crm;
  • получения данных заказа в магазине;
  • формирования новой корзины и отправки ее в crm.

При создании объекта класса, происходит авторизация в crm, для получения данных:

protected static $MODULE_ID = 'intaro.retailcrm';
protected static $CRM_API_HOST_OPTION = 'api_host';
protected static $CRM_API_KEY_OPTION = 'api_key';
	
public $client;
public function __construct()
{
    $api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0);
    $api_key = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0);		
		
    $client = new \RetailCrm\ApiClient(
        $api_host,
        $api_key
    );
    
   $this->client = $client;
}

Данные заказа из retailCrm:

try {
    $response = $client->ordersGet($orderId);
} catch (\RetailCrm\Exception\CurlException $e) {
    echo "Connection error: " . $e->getMessage();
}

if ($response->isSuccessful()) {
    $orderData = $response->getOrder();
}

Таким образом мы получили данные из заказа и сформировали новую корзину для crm.

Затем обновили уже созданный к этому времени заказ в crm, c помощью методов модуля:

try {
    $response = $client->ordersEdit($order);
} catch (\RetailCrm\Exception\CurlException $e) {
    echo "Connection error: " . $e->getMessage();
}

if ($response->isSuccessful()) {
    $orderData = $response->getOrder();
}

Кроме этого, на сайте был обработчик для заказа в 1-клик, его также дополнили, для отправки выбранной комплектации в retailCrm.

Требуется интеграция интернет-магазина с retailCRM или другой CRM системой или внешним сервисом? Отправьте вашу задачу на почту info@artwot.ru или позвоните нам по телефону +7 (495) 055-15-23. Менеджер проконсультирует вас и предложит варианты решения вашей задачи.


Другие публикации