Во время решения задачи интеграции форм обратной связи компонента RS Form PRO на Joomla 4 родился следующий код, который оставлю в блоге на правах заметки. Однако, он может помочь для быстрого решения задачи отправки форм из Joomla в Битрикс 24 "на коленке". В идеале нужно создавать плагин интеграции. Но на первое время данный способ также подойдёт.

Это код для Joomla 4. Для Joomla 3 нужно изменить вызов HTTPFactory. Подробнее об этом в статье Создание внешних запросов с использованием HttpFactory (Joomla). Далее смотрим комментарии в коде.



$app   = \Joomla\CMS\Factory::getApplication();

// Данные формы RS Form
// 3-й параметр 'raw' отключает фильтрацию данных, 
// например чтобы не удалялись символы @ из e-mail
$form_for_b24= $app->getInput()->get('form', [], 'raw');

// Тут меняем названия полей RS FORM для каждой формы
$email = $form_for_b24['email6']; // email6 - это  название поля в RS Form
$phone = $form_for_b24['phone6']; // phone6- это название поля в RS Form

// !!! Также в комментарии к сделке смотрим детали // Endpoint Битрикс 24

// Здесь указываем адрес веб-хука с правами доступа CRM
$b24_base_uri = 'https://YOUR_DOMAIN.bitrix24.ru/rest/1/cy008qj7ty0bqv8j/';
// Joomla HTTP Client
$http = (new \Joomla\Http\HttpFactory)->getHttp([], ['curl', 'stream']); // Процесс создания сделки:
// 1. Создаем контакт
// 2. Создаем сделку с id контакта
// 3. Если контакт не создан по какой-то причине - все данные пишем в комментарий к сделке
// Для ручной сборки массивов смотрим
// документацию https://dev.1c-bitrix.ru/rest_help/crm/cdeals/crm_deal_fields.php
$qr = [
    'fields' => 
        [
            'NAME' => 'Контакт с сайта', // Имя контакта
            'PHONE' => [
                [
                    'VALUE' => $phone, 
                    'TYPE' => 'work']
                ], 
            'EMAIL' => [
                [
                    'VALUE' => $email, 
                    'TYPE' => 'WORK']
            ]
        ], 
    'params' => [
        "REGISTER_SONET_EVENT" => "Y"
    ]
];
$add_contact_uri = \Joomla\CMS\Uri\Uri::getInstance($b24_base_uri . 'crm.contact.add');
// Запрос на создание контакта в Битрикс 24
$add_contact_result = $http->post($add_contact_uri->toString(), $qr);
// Ответ Битрикс 24
$add_contact_result = json_decode($add_contact_result->body); 
// Получаем ID созданного контакта
$contact_id = $add_contact_result->result; 
// Теперь создаём сделку
$add_deal_uri = \Joomla\CMS\Uri\Uri::getInstance($b24_base_uri . 'crm.deal.add');
$qr = [
    'fields' => [
            'TITLE' => 'Калькулятор заказа основной (форма на сайте)', // сюда название формы
        ], 
    'params' => [
        "REGISTER_SONET_EVENT" => "Y"
    ]
];
// Это комментарий к сделке.
$qr['fields']['COMMENTS'] = 'ТИРАЖ: ' . $form_for_b24['circulation6'] . ' ОПИСАНИЕ ЗАКАЗА: ' . $form_for_b24['description6'] . ' ТИП ПАКЕТА: ' . $form_for_b24['type6'];
if (empty($contact_id)) {
    // не получили contact_id, пишем всё в комментарий к сделке
    // для ручного разруливания
    $qr['fields']['COMMENTS'] .= ' ' . $email . ' ' . $phone;

} else {
    $qr['fields']['CONTACT_IDS'] = [$contact_id];
}
// Создаём сделку в Битрикс 24.
$result_deal = $http->post($add_deal_uri, $qr);

Обратите внимание!

Компонент RS Form для выполнения стороннего PHP-кода использует не самый лучший подход - функцию PHP eval(). В связи с этим в своём коде нужно учитывать следующие факторы (обратимся к документации PHP функции eval()):

Выполняемый код наследует ту же область видимости переменной, что и строка, на которой языковая конструкция eval() была вызвана. Любые доступные на этой строке переменные будут доступны для чтения и изменения в выполняемом коде. Однако все объявленные в этом коде функции и классы получат глобальную область видимости. Говоря по-другому, компилятор расценит выполняемый код так, как если бы это был подключённый файл.

Это означает, что Вы должны знать какие имена переменных используются ДО включения Вашего кода, иначе Ваша переменная просто заменит значение переменной RS Form и отправка и/или валидация формы будет нарушена. Основная работа компонента при отправке формы идёт в файле administrator/components/com_rsform/helpers/rsform.php, в функции processForm(). Как минимум не используйте для названия переменных имя $form, так как оно уже используется хелпером компонента.

Так же я бы рекомендовал использовать имена классов Joomla API с полным namespace и без использования use в начале кода. Например, \Joomla\CMS\Uri\Uri::getInstance('https://your-domain.ru'); вместо use \Joomla\CMS\Uri\Uri; в начале и Uri::getInstance('https://your-domain.ru'); потом.

 

Куда вставлять этот код?

В компоненте RS Form PRO есть возможность вставлять PHP код в настройках самой формы. Для этого перейдите во вкладку "Свойства" и найдите поле для кода, которое называется: "Скрипт, вызываемый после обработки формы". Туда нужно вставить (с вашими изменениями) код, приведенный выше. Также обратите внимание, что в RS Form "скрипт, вызываемый при обработке формы" на самом деле вызывается перед обработкой. Таким образом, если Вы используете Google Recapcha, то сначала исполнится ваш скрипт, а потом уже будет проверка Recapcha, следовательно весь спам будет попадать в Ваш Битрикс 24. Чтобы этого не происходило - размещаем наш код в поле "скрипт, вызываемый после обработки формы".

rs from screen joomla 4 1

А здесь уже вставляем код. Обратите внимание на то, что открывающий и закрывающий теги php <?php не нужно использовать.

 rs from joomla 4 выполнение php кода после отправки формы

После этого сделки должны появляться на воронке продаж по умолчанию (оно же "направление сделок").

Расширения Joomla WebTolk

78 Всего расширений
11 Категорий
333 Выпущено версий
316336 Всего скачиваний
Корзина
Корзина пуста