Задать вопрос

Сайт на WP + Contact Form 7 + Битрикс24 — не передаётся поле тип «список»?

Друзья, всем привет!

Не передаётся значение поля типа "список" с сайта в Битрикс24.
Поле типа "список" передаю в поле комментарий Битрикс24.
С остальными полями проблем нет...

Подскажите, что не так?

Вот код с комментами:
//Начало кода интеграции Contact Form 7 с Битрикс24
//вызываем функцию для перехвата данных
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {

//подключение к серверу CRM
define('CRM_HOST', '***.bitrix24.ru'); // Ваш домен CRM системы
define('CRM_PORT', '443'); // Порт сервера CRM. Установлен по умолчанию
define('CRM_PATH', '/crm/configs/import/lead.php'); // Путь к компоненту lead.rest

//авторизация в CRM
define('CRM_LOGIN', '***@yandex.ru'); // Логин пользователя Вашей CRM по управлению лидами
define('CRM_PASSWORD', '*******'); // Пароль пользователя Вашей CRM по управлению лидами

//перехват данных из Contact Form 7
$title = $contact_form->title;
$posted_data = $contact_form->posted_data;
if ('Контактная форма 1' == $title ): { //Вместо "Контактная форма 1" необходимо указать название Вашей контактной формы
$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();

//далее мы перехватывает введенные данные в Contact Form 7
$firstName = $posted_data['name']; //перехватываем поле Имя
$myphone = $posted_data['tel-780']; //перехватываем поле Телефон
$vidpomeshenia = $posted_data['vidpom']; //перехватываем поле Вид помещения

//сопостановление полей Битрикс24 с полученными данными из Contact Form 7
$postData = array(
'TITLE' => 'Заявка с сайта', // Установить значение свое значение
'NAME' => $firstName,
'PHONE_WORK' => $myphone,
'COMMENTS' => $vidpomeshenia

);

//передача данных из Contact Form 7 в Битрикс24
if (defined('CRM_AUTH')) {
$postData['AUTH'] = CRM_AUTH;
} else {
$postData['LOGIN'] = CRM_LOGIN;
$postData['PASSWORD'] = CRM_PASSWORD;
}

$fp = fsockopen("ssl://".CRM_HOST, CRM_PORT, $errno, $errstr, 30);
if ($fp) {
$strPostData = '';
foreach ($postData as $key => $value)
$strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value);

$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;

fwrite($fp, $str);

$result = '';
while (!feof($fp))
{
$result .= fgets($fp, 128);
}
fclose($fp);

$response = explode("\r\n\r\n", $result);

$output = '
.print_r($response[1], 1).
';
} else {
echo 'Connection Failed! '.$errstr.' ('.$errno.')';}
};
  • Вопрос задан
  • 715 просмотров
Подписаться 1 Сложный Комментировать
Решения вопроса 1
dzhazzz
@dzhazzz Автор вопроса
Всё оказалось куда проще, надо было использовать $_POST, пример:
//далее мы перехватывает введенные данные в Contact Form 7
$firstName = $posted_data['name']; //перехватываем поле Имя
$myphone = $posted_data['tel-780']; //перехватываем поле Телефон
$vidpomeshenia = $_POST['vidpom']; //перехватываем поле Вид помещения
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ramapriya
@Ramapriya
Добрый день.

  1. Используйте вебхуки - если кто-то перехватит ваши авторизационные данные, то сможет попасть на портал. Вебхук такой возможности не даст - он вернёт в json-формате только ту информацию, на которую ему дали права + права пользователя на портале (т.е. через вебхук нельзя будет удалить все лиды, если у пользователя нет прав на удаление).
  2. Используйте класс CRest - он существенно упрощает передачу данных в Б24
  3. Для записи значения в списочное поле вам нужно получить id значения (посмотреть список полей и значений лида можно с помощью метода crm.lead.userfield.list) и передавать в параметрах этот id


Примерный код:

// settings.php
define('C_REST_WEB_HOOK_URL','https://rest-api.bitrix24.com/rest/1/doutwqkjxgc3mgc1/');//url on creat Webhook

//ваш код
$postData = [
'TITLE' => 'Заявка с сайта', // Установить значение свое значение
'NAME' => $firstName,
'PHONE_WORK' => $myphone,
'COMMENTS' => $userFieldEnumValueId // id значения списочного поля
];

$lead = CRest::call('crm.lead.add', ['fields' => $postData]);

return $lead['result'] ?? [$lead['error'], $lead['error_description'];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы