FormIT. Собираем заявки(лиды) в Битрикс 24
1. В вашей форме необходимо указать хук на приложеный файл. В моём примере он в корне.
&hooks=`rest.php`
2. Имена полей(name) должны соответствовать требованиям Битрикс API. При этом, поле TITLE обязательное!3. Если всё хорошо, то будет созда лид. CRM=> Ещё=> Лиды
Файл rest.php не забудьте указать ваш адрес в Битрикс24, email и пароль
<?php
// CRM server connection data
define('CRM_HOST', 'domain.bitrix24.ru'); // your CRM domain name
define('CRM_PORT', '443'); // CRM server port
define('CRM_PATH', '/crm/configs/import/lead.php'); // CRM server REST service path
// CRM server authorization data
define('CRM_LOGIN', 'e@mail.ltd'); // login of a CRM user able to manage leads
define('CRM_PASSWORD', 'yourpassword'); // password of a CRM user
// OR you can send special authorization hash which is sent by server after first successful connection with login and password
//define('CRM_AUTH', 'e54ec19f0c5f092ea11145b80f465e1a'); // authorization hash
/********************************************************************************************/
// POST processing
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$leadData = $_POST;
// get lead data from the form
$postData = array(
'TITLE' => $leadData['TITLE'],
'NAME' => $leadData['NAME'],
'EMAIL_HOME' => $leadData['EMAIL_HOME'],
'COMMENTS' => $leadData['COMMENTS'],
);
// append authorization data
if (defined('CRM_AUTH'))
{
$postData['AUTH'] = CRM_AUTH;
}
else
{
$postData['LOGIN'] = CRM_LOGIN;
$postData['PASSWORD'] = CRM_PASSWORD;
}
// open socket to CRM
$fp = fsockopen("ssl://".CRM_HOST, CRM_PORT, $errno, $errstr, 30);
if ($fp)
{
// prepare POST data
$strPostData = '';
foreach ($postData as $key => $value)
$strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value);
// prepare POST headers
$str = "POST ".CRM_PATH." HTTP/1.0\r\n";
$str .= "Host: ".CRM_HOST."\r\n";
$str .= "Content-Type: application/x-www-form-urlencoded\r\n";
$str .= "Content-Length: ".strlen($strPostData)."\r\n";
$str .= "Connection: close\r\n\r\n";
$str .= $strPostData;
// send POST to CRM
fwrite($fp, $str);
// get CRM headers
$result = '';
while (!feof($fp))
{
$result .= fgets($fp, 128);
}
fclose($fp);
// cut response headers
$response = explode("\r\n\r\n", $result);
$output = '<pre>'.print_r($response[1], 1).'</pre>';
}
else
{
echo 'Connection Failed! '.$errstr.' ('.$errno.')';
}
}
else
{
$output = '';
}
// HTML form
?>
Это небольшая адаптация под Modх. Оригинал решения смотрите здесь.Пример вызова
[[!FormIt?
&hooks=`rest.php`
&validate=`NAME:required:minLength=^2^,EMAIL_HOME:required:email,COMMENTS:required:minLength=^10^`
&FormFields=`TITLE,NAME,EMAIL_HOME,COMMENTS`
&successMessage=`<div class="uk-alert uk-alert-large">Ваша заявка принята!</div>`
&submitVar=`submit`
]]
[[!+fi.successMessage]]
<form class="uk-form uk-form-horizontal" id="contactForm" method="post" action="[[~[[*id]]]]">
<input type="hidden" name="TITLE" id="" value="Заявка">
<fieldset>
<legend>Отправить сообщение</legend>
<div class="uk-form-row">
<input type="text" name="NAME" placeholder="Имя" class=" uk-width-1-1 uk-form-large[[!+fi.error.NAME:notempty=` uk-form-danger`]]" value="[[!+fi.NAME]]" required>
[[!+fi.error.NAME:notempty=`<p class="uk-text-danger uk-text-bold">Поле должно содержать не менее 2 символов</p>`]]
</div>
<div class="uk-form-row">
<input type="email" name="EMAIL_HOME" placeholder="Email" class=" uk-width-1-1 uk-form-large[[!+fi.error.EMAIL_HOME:notempty=` uk-form-danger`]]" value="[[!+fi.EMAIL_HOME]]" required>
</div>
[[!+fi.error.EMAIL_HOME:notempty=`<p class="uk-text-danger uk-text-bold">Укажите ваш Email</p>`]]
<div class="uk-form-row">
<textarea name="COMMENTS" cols="30" rows="6" placeholder="Сообщение" class=" uk-width-1-1 uk-form-large[[!+fi.error.COMMENTS:notempty=` uk-form-danger`]]" required>[[!+fi.COMMENTS]]</textarea>
[[!+fi.error.COMMENTS:notempty=`<p class="uk-text-danger uk-text-bold">Поле должно содержать не менее 10 символов</p>`]]
</div>
<div class="uk-form-row"><input class="uk-button uk-button-large uk-button-primary" name="submit" type="submit" value="Отправить сообщение »"></div>
</fieldset>
</form>
Комментарии: 23
Интересно, мне одному не понятно, что это и зачем?
Да, не совсем всё это освещено в статье…
Как я понимаю, тут ситуация, когда разные сайты-лэндинги разбросаны по сети и сделаны на MODX, а заявки с их форм собираются в одну битрикс-админку для их обработки менеджерами…
Как я понимаю, тут ситуация, когда разные сайты-лэндинги разбросаны по сети и сделаны на MODX, а заявки с их форм собираются в одну битрикс-админку для их обработки менеджерами…
Совершенно верно. Есть SaveForm и даже работает, после обработки напильником, но это не то.
Здесь мы сразу собираем заявки в CRM. К тому же Битрикс24 для компании до 12 сотрудников бесплатный.
Здесь мы сразу собираем заявки в CRM. К тому же Битрикс24 для компании до 12 сотрудников бесплатный.
Мне больше интересно как с разных других php-сайтов собирать заявки (например в как ресурсы в виде тикетов) в одну админку MODX. То есть сайты разбросаны по другим серверам, но посылать данные формы они должны в базу MODX.
Какие тут должны быть этапы?
Какие тут должны быть этапы?
Добавил пример вызова FormIT
А есть пример с AjaxForm?
FormIT глючит по страшному, несколько лидов скидывает при перезагрузке, да и вообще страницу перезагружать не вижу смысла.
Вот такой вызов не работает.
Вот такой вызов битрикс отлично ловил и не по одному разу.
FormIT глючит по страшному, несколько лидов скидывает при перезагрузке, да и вообще страницу перезагружать не вижу смысла.
Вот такой вызов не работает.
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.AjaxForm.example`
&hooks=`rest.php`
&FormFields=`TITLE,NAME,EMAIL_HOME,COMMENTS,OPPORTUNITY`
&validate=`NAME:required:minLength=^2^,EMAIL_HOME:required:email`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено`
&submitVar=`submit`
]]
Зеленое окошко с сообщением об успешной отправке вылазит, а до битрикса не доходит.Вот такой вызов битрикс отлично ловил и не по одному разу.
[[!FormIt?
&hooks=`rest.php`
&validate=`NAME:required:minLength=^2^,EMAIL_HOME:required:email`
&FormFields=`TITLE,NAME,EMAIL_HOME,COMMENTS,OPPORTUNITY`
&successMessage=`<div class="uk-alert uk-alert-large">Ваша заявка принята!</div>`
&submitVar=`submit`
]]
Вот только вчера хотел спросить как переделать под Modx…
А можете адаптировать под formConstruct, точнее наверно как вывод под него сделать?
А можете адаптировать под formConstruct, точнее наверно как вывод под него сделать?
И совершенный для меня вариант это еще и заказы с минишопа гнать в битрикс24…
Поможете?
Поможете?
По-хорошему надо плагин оформить. Тут я к сожалению не помощник.
Плагин это да, круто было бы.
Вопрос:
Я вставил код rest.php в снипет и сделал вывод &hooks=`[[import.b24]],redirect` редирект срабатывает что говорит что hooks выполняется… но лид в битриксе не заполняется…
Что я не правильно сделал?
Вопрос:
Я вставил код rest.php в снипет и сделал вывод &hooks=`[[import.b24]],redirect` редирект срабатывает что говорит что hooks выполняется… но лид в битриксе не заполняется…
Что я не правильно сделал?
Я так не пробовал. Из оригинала я удалил вывод ответа сервера. Добавьте ответ и уберите редирект, он появится перед формой после отправки.
Чтоб я еще знал как… Слаб я в этом.
Допишите последней строкой
<?=$output;?>
В вывод или в снипет?
Я не делал снипет. Прочитайте заметку внималельней. Это последняя строка rest.php, она покажет ответ сервера
Вот писал на скорую руку для себя, лучше подредактировать ибо криво)
на событие msOnCreateOrder
на событие msOnCreateOrder
<?php
switch($modx->event->name) {
case 'msOnCreateOrder':
// CRM server conection data
define('CRM_HOST', ''); // your CRM domain name
define('CRM_PORT', '443'); // CRM server port
define('CRM_PATH', '/crm/configs/import/lead.php'); // CRM server REST service path
// CRM server authorization data
define('CRM_LOGIN', ''); // login of a CRM user able to manage leads
define('CRM_PASSWORD', ''); // password of a CRM user
// OR you can send special authorization hash which is sent by server after first successful connection with login and password
//define('CRM_AUTH', ''); // authorization hash
/********************************************************************************************/
// POST processing
//$leadData = $_POST['DATA'];
$leadData=$order->get();
$leadCost=$order->getcost(true,true);
$leadNum='имя сайта-'.$order->getnumer();
$ledContact=explode(" ", $leadData['receiver']);
// get lead data from the form
$postData = array(
'TITLE' => $leadNum,
'COMPANY_TITLE' => 'Сайт',
'NAME' => $ledContact[0],
'LAST_NAME' => $ledContact[1],
'COMMENTS' => $leadData['comment'],
'OPPORTUNITY' => $leadCost,
'CURRENCY_ID' => 'RUR',
'ADDRESS' => 'дом 18 к5',
'PHONE_WORK' => $leadData['phone'],
'WEB_WORK' => 'сайт',
'SOURCE_ID' => 'WEB',
'EMAIL_WORK' => $leadData['email']
);
// append authorization data
if (defined('CRM_AUTH'))
{
$postData['AUTH'] = CRM_AUTH;
}
else
{
$postData['LOGIN'] = CRM_LOGIN;
$postData['PASSWORD'] = CRM_PASSWORD;
}
// open socket to CRM
$fp = fsockopen("ssl://".CRM_HOST, CRM_PORT, $errno, $errstr, 30);
if ($fp)
{
// prepare POST data
$strPostData = '';
foreach ($postData as $key => $value)
$strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value);
// prepare POST headers
$str = "POST ".CRM_PATH." HTTP/1.0\r\n";
$str .= "Host: ".CRM_HOST."\r\n";
$str .= "Content-Type: application/x-www-form-urlencoded\r\n";
$str .= "Content-Length: ".strlen($strPostData)."\r\n";
$str .= "Connection: close\r\n\r\n";
$str .= $strPostData;
// send POST to CRM
fwrite($fp, $str);
/*
// get CRM headers
$result = '';
while (!feof($fp))
{
$result .= fgets($fp, 128);
}
fclose($fp);
// cut response headers
$response = explode("\r\n\r\n", $result);
$output = '<pre>'.print_r($response[1], 1).'</pre>';
*/
}
else
{
//echo 'Connection Failed! '.$errstr.' ('.$errno.')';
$modx->log(modX::LOG_LEVEL_INFO, print_r('Ошибка передачи в битрикс', 1));
}
}
formConstruct использует FormIt насколько я знаю. Точно так же и оформить, как в примере. Главное соблюдайте имена полей и вызов хука из файла.
Кто-то с передачей OPPORTINUTY (Возможная сумма сделки) работал? Почему-то цена не передается, как только не пробовал. Есть мысль что это из-за типа double. Если пихнуть ее в поле с типом string, то все гуд. Но в Отчестве она мне не надо )) Подскажите, плз, кто решил такой вопрос.
Все разобрался, ошибка в мануале самого битрикса
OPPORTINUTY — не правильно!!!
Ставьте значение — OPPORTUNITY
OPPORTINUTY — не правильно!!!
Ставьте значение — OPPORTUNITY
А если нужно указать 2 поля с email как быть в таком случае?
'EMAIL_HOME' => $leadData['EMAIL_HOME1'],
EMAIL_HOME1 и EMAIL_HOME2
'EMAIL_HOME' => $leadData['EMAIL_HOME1'],
EMAIL_HOME1 и EMAIL_HOME2
Ребят, а можно каким-то макаром передавать файлик прикрепленный к форме?
Здравствуйте ) Никто не пробовал прицепить к Лиду товары этим методом? PRODUCT_ID не работает ( Может есть какой-то иной способ…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.