...

Интеграция ELMA365 c Wordpress

Тема в разделе "Примеры решений и дополнительных модулей", создана пользователем kamyshev, 7 дек 2021.

  1. kamyshev

    kamyshev Активный участник

    Статья больше пример как подружить веб-системы, если в одной из них нет возможности построить запрос как удобно ELMA, нежели решение для production-среды. Вместо приведенного middleware-скрипта на PHP, можно использовать абсолютно любое решение на любом стеке.

    Несмотря на имеющийся функционал Web-форм в ELMA365, по различным причинам, может появится необходимость отправлять данные из форм стороннего сайта. В данной статье приводится пример по отправке данных из форм с сайта на "движке" Wordpress.

    Через админ-панель WordPress необходимо установить два плагина:
    • Contact Form 7 (используется для генерации и работы с формами, довольно гибкий популярный плагин)
    • WP Webhooks (этот плагин позволяет отправлять свои запросы по событиям из WordPress, в наличии преднастроенная интеграция с плагином выше)
    Далее переходим в настройки WP Webhooks, вкладка Send Data. Выбираем в самом низу наш плагин для форм. Далее нажимаем кнопку Add Webhook URL. Указываем название хука и адрес до скрипта, который будет backend'ом для запросов с WordPress. После создания хука, нажимаем на меню и выбираем Settings:

    Выполнить следующие настройки:
    • Change the data request type - JSON
    • Change the data request method - POST
    • Don't send mail as usually - Включить (в этом случае письмо НЕ будет уходить на настроенный почтовый ящик, будет выполняться только сам хук)
    • Trigger on selected forms - Выбрать непосредственно форму, которую будем отправлять этим конкретным хуком. Таким образом для каждой формы можно настроить свой хук.
    • Cutomize your Payload - Выбрать Form ID и Form Submit Data
    • Нажать Save Settings
    Сам запрос, который будет отсылаться на наш backend-скрипт приобретает такой вид:
    Код:
    
    {
        
    "form_id":6,
        
    "form_submit_data": {
            
    "your-name":"xxxxxxx",
            
    "your-email":"mail@mail.com",
            
    "your-subject":"xxxxxx",
            
    "your-message":"xxxxx"
        
    }
    }
    В form_id хранится идентификатор формы, который генерируется в плагине Contact Form 7. Исходя из этого номера мы сможем реализовывать различные запросы в сторону ELMA365 через один backend-скрипт. Каждый атрибут в form_submit_data соответствует полю из формы, синтаксис можно посмотреть в плагине Contact Form 7.

    Далее, на хостинге (можно рядом с WordPress) разместим PHP скрипт (путь должен соответствовать адресу в хуке в плагине WP Webhooks) со следующим листингом:
    PHP:
    <?php
    // Идентификатор площадки
    define('_COMPANY''aeqlmfdghrewee');
    // Неймспейс, где лежит приложение, которое будет получать запрос
    define('_NAMESPACE''_clients');
    // Код приложения, которое будет получать запрос
    define('_CODE''_leads');
    // Токен авторизации
    define('_TOKEN''2f3cf8e6-d375-4c90-a5c2-55090eda587d');
    $inputData file_get_contents('php://input');
    if(!empty(
    $inputData)) {
       
        
    // После этого наш запрос превращается в массив и работаем с ним как с массивом
        
    $form json_decode($inpuDatat1);
       
        
    $formID $form['form_id'];
        
    $data $form['form_submit_data'];

        
    //Данная конструкция как раз позволяет обрабатывать несколько форм в одном скрипте
        
    switch ($formID) {
            case 
    '6':
                
    $yourName $data['your-name'];
                
    $yourEmail $data['your-email'];
                
    $yourSubject $data['your-subject'];
                
    $yourMessage $data['your-message'];
               
                
    // В качестве примера склеиваем полученные данные и кладем в поле "__name"
                
    $newString $yourName.' '.$yourEmail.' '.$yourSubject.' '.$yourMessage;
                
    $context = [
                    
    '__name' => $newString
                
    ];
               
                break;
           
            default:
                die(
    'form_id is undefined');
                break;
        }
        
    $postOutput = [
            
    'context' => $context
        
    ];
        
    $postOutput json_encode($postOutput);
        
    $elmaUrl 'https://'._COMPANY.'.elma365.ru/pub/v1/app/'._NAMESPACE.'/'._CODE.'/create';
        
    $res curl_init();
        
    curl_setopt($resCURLOPT_RETURNTRANSFERtrue);
        
    curl_setopt($resCURLOPT_URL$elmaUrl);
        
    curl_setopt($resCURLOPT_HTTPHEADER, ['X-Token: '._TOKEN'Content-Type: application/json']);
        
    curl_setopt($resCURLOPT_POSTtrue);
        
    curl_setopt($resCURLOPT_POSTFIELDS$postOutput);
        
    $response curl_exec($res);
        
    print_r($response);
    }
    ?>
    Всё готово, можно попробовать отправить данные из формы Wordpress и в результате создастся новая Сделка, в качестве имени сделки будет "склейка" из полей формы. При необходимости, backend-скрипт можно переписать под своё решение.
  2. Leni

    Leni Участник

    Возможно ли таким образом передавать прикрепленные файлы из Contactform7?
  3. kamyshev

    kamyshev Активный участник

    Надо проверять, под рукой уже к сожалению нет wordpress'а для тестов. Как будто бы можно, но midleware-скрипт придется серьезно доработать: сделать получение ответа с айди элемента и отдельный вызов "ручки" загрузки файла.