Hook Formit. enKod + MODX

Всем привет!

Поступила задача на интеграцию форм с enkod.io/. Меньше слов — делаем.

У нас есть:
— Ссылка на документацию: openapi.enkod.io/
— API ключ от клиента
— API POST запрос для передачи/обновления данных о контакте в enKod — api.enkod.ru/v1/person/

{
  "firstName": "Иван",
  "email": "example@email.com",
  "phone": "79009009090",
  "mainChannel": "email",
  "method": "addAndUpdate",
  "groups": [
	"contacts"
	 ]
}

1) Создаем сниппет sendEnKode
2) В него вставляем код:
<?php
$url = "https://api.enkod.ru/v1/person/";

$values = $hook->getValues();

// Проставляем соответствие полей Formit с названиями полей в enKod
$fields = [
    "firstName" => $values["name"],
    "email" => $values["email"],
    "phone" => $values["phone"],
    "mainChannel" => "email",
    "method" => "addAndUpdate",
    "groups" => ["contacts"],
];

$modx->log(modX::LOG_LEVEL_ERROR, print_r($fields, 1)); // Для дебага

try {
    $curl = curl_init();

    curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 5,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => $modx->toJSON($fields),
        CURLOPT_HTTPHEADER => [
            "cache-control: false",
            "Content-Type: application/json",
            "apiKey: XXXXXXXXXXXXX", // Указываем API key от клиента
        ],
    ]);

    $response = curl_exec($curl);
    $modx->log(modX::LOG_LEVEL_INFO, $response); //Для дебага
} catch (Exception $e) {
    $modx->log(modX::LOG_LEVEL_ERROR, $e); // Для дебага
}

return true;
3. Сохраняем
4. Переходим к форме, которую будем интегрировать. В поле с указанием хуков добавляем наш новый хук:

{'!AjaxForm' | snippet:[
    'form' => '@FILE chunks/forms/lead_form.tpl',
    'snippet' => 'FormIt',
    'hooks' => 'rcv3,sendEnKode,email,sendlead',
    .....
]}
5. Тестируем
6. Сообщаем клиенту о готовности

Возможно, кому-то пригодится и сэкономит время!

Спасибо за внимание!
Иван Бочкарев
03 февраля 2023, 06:57
modx.pro
2
718
+14
Поблагодарить автора Отправить деньги

Комментарии: 4

Артур Шевченко
03 февраля 2023, 09:49
+2
Может всё же стоило парой слов описать что же такое enKod? Ведь клиент не всегда формулирует задачу, используя название конкретного сервиса, а так хоть будет понятно для чего такая интеграция нужна.
    Дима Касаткин
    03 февраля 2023, 18:41
    +2
    По их промо-сайту еле-еле можно разобрать что такое это enKod вообще, но кажется я смог:

    Короче enKod это сервис работы с клиентской базой для сайтов и магазинов из двух частей:
    1. Подписчики и рассылки
    1.1 Функционал Email и Push/SMS сообщений (типа SendPulse и аналогов) для рассылок.
    1.2 Ну и инструментарий для пополнения и сегментации баз, включая JS-трекер активности вроде Яндекс.Метрики

    2. Виджеты для сайта
    2.1 Всплывающие окна подпишись и получи нечто, для пополнения базы клиентов из п.1.1
    2.2 Товарные рекомендации типа расстановка ссылок для блока «вам также может быть интересно» в корзине интернет-магазина или где-то ещё на сайте, видимо на основе данных, собираемых функционалом из п.1.2

    P.S. Я там не работаю, просто сам недолюбливаю мутные лендинго-подобные сайты (как у enKod) где вместо подробностей вам предлагают записаться на демонстрацию к продажнику от которого наверняка потом придется телефон в реку выбрасывать чтобы не доставал ;-)

    Так-то в кейсах у них вся инфа есть, но чтобы её добыть надо прям изучать их несколько… Прямо чувствуешь на этом сайте себя тунцом каким-то, который заглатывает наживку, маркетологи сказали бы что очень такой «цепкий сайтец» с хорошей грубиной просмотра… но мне от пребывания на таких как-то не по себе ¯\_(ツ)_/¯ Хоть сервис по итогу для своей ЦА интересный… но какие тарифы вам на сайте даже примерно не намекнут, запишитесь на демо… ага...
Павел Бигель
04 февраля 2023, 22:38
+2
Вместо портянки курла с которой еще и запросто можно ошибиться лучше использовать встроенный http client в MODX
modx.pro/howto/18715
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4