2025-10-30 19:21:34 +03:00
|
|
|
|
<?php
|
|
|
|
|
|
/*********************************************************************************
|
|
|
|
|
|
* API-интерфейс для создания Контакта из Web-формы (упрощённый)
|
|
|
|
|
|
* Обязательное поле: только mobile
|
|
|
|
|
|
* Логика: если контакт существует - возвращаем ID БЕЗ обновления
|
|
|
|
|
|
* Автор: Фёдор, 2025-10-30
|
|
|
|
|
|
********************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
include_once 'include/Webservices/Query.php';
|
|
|
|
|
|
include_once 'modules/Users/Users.php';
|
|
|
|
|
|
require_once('include/Webservices/Utils.php');
|
|
|
|
|
|
require_once 'include/Webservices/Create.php';
|
|
|
|
|
|
require_once 'includes/Loader.php';
|
|
|
|
|
|
vimport ('includes.runtime.Globals');
|
|
|
|
|
|
vimport ('includes.runtime.BaseModel');
|
|
|
|
|
|
vimport ('includes.runtime.LanguageHandler');
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Создание контакта из web-формы
|
|
|
|
|
|
* Если контакт с таким mobile уже существует - просто возвращаем его ID
|
|
|
|
|
|
* @param string $mobile - номер телефона (обязательное поле)
|
|
|
|
|
|
* @param string $firstname - имя (опционально)
|
|
|
|
|
|
* @param string $lastname - фамилия (опционально)
|
|
|
|
|
|
* @param string $email - email (опционально)
|
2025-12-03 16:04:25 +03:00
|
|
|
|
* @return string - JSON строка с contact_id, is_new и cf_2624 (Данные подтверждены)
|
2025-10-30 19:21:34 +03:00
|
|
|
|
*/
|
|
|
|
|
|
function vtws_createwebcontact($mobile, $firstname = '', $lastname = '', $email = '', $user = false) {
|
|
|
|
|
|
|
|
|
|
|
|
$logstring = date("Y-m-d H:i:s").' '.json_encode($_REQUEST);
|
|
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring.PHP_EOL, FILE_APPEND);
|
|
|
|
|
|
|
|
|
|
|
|
// Проверка обязательного поля
|
|
|
|
|
|
if(empty($mobile)){
|
|
|
|
|
|
$logstring = date("Y-m-d H:i:s").' Не указано обязательное поле: mobile';
|
|
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring.PHP_EOL, FILE_APPEND);
|
|
|
|
|
|
throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Не указан номер телефона (mobile)");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Форматирование телефона: убираем всё кроме цифр
|
|
|
|
|
|
$mobile = preg_replace('/[^0-9]/', '', $mobile);
|
|
|
|
|
|
if (strlen($mobile) == 11 && $mobile[0] == '8') {
|
|
|
|
|
|
$mobile = "7".substr($mobile, 1);
|
|
|
|
|
|
} else if (strlen($mobile) == 10) {
|
|
|
|
|
|
$mobile = "7".$mobile;
|
|
|
|
|
|
} else if (strlen($mobile) != 11 || $mobile[0] != '7') {
|
|
|
|
|
|
$logstring = date("Y-m-d H:i:s").' Некорректный номер телефона: '.$mobile;
|
|
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring.PHP_EOL, FILE_APPEND);
|
|
|
|
|
|
throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Некорректный номер телефона");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$logstring = date('Y-m-d H:i:s').' Ищем контакт по mobile='.$mobile.PHP_EOL;
|
|
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring, FILE_APPEND);
|
|
|
|
|
|
|
|
|
|
|
|
global $adb, $current_user;
|
|
|
|
|
|
|
2025-10-30 19:49:42 +03:00
|
|
|
|
$isNew = false; // Флаг: создан ли контакт сейчас
|
|
|
|
|
|
|
2025-10-30 19:21:34 +03:00
|
|
|
|
// Проверяем существование контакта по номеру телефона
|
2025-12-03 16:04:25 +03:00
|
|
|
|
// ✅ Добавляем выборку поля cf_2624 (Данные подтверждены)
|
|
|
|
|
|
$query = "select c.contactid, cf.cf_2624
|
2025-10-30 19:21:34 +03:00
|
|
|
|
from vtiger_contactdetails c
|
2025-12-03 16:04:25 +03:00
|
|
|
|
left join vtiger_crmentity e on e.crmid = c.contactid
|
|
|
|
|
|
left join vtiger_contactscf cf on cf.contactid = c.contactid
|
2025-10-30 19:21:34 +03:00
|
|
|
|
where e.deleted = 0 and c.mobile = ?
|
|
|
|
|
|
limit 1";
|
|
|
|
|
|
$result = $adb->pquery($query, array($mobile));
|
|
|
|
|
|
|
2025-12-03 16:04:25 +03:00
|
|
|
|
$cf_2624_value = "0"; // По умолчанию "Нет" (данные не подтверждены)
|
|
|
|
|
|
|
2025-10-30 19:21:34 +03:00
|
|
|
|
if ($adb->num_rows($result) > 0) {
|
|
|
|
|
|
// Контакт существует - ПРОСТО ВОЗВРАЩАЕМ ID (НЕ обновляем!)
|
|
|
|
|
|
$output = $adb->query_result($result, 0, 'contactid');
|
2025-10-30 19:49:42 +03:00
|
|
|
|
$isNew = false;
|
2025-12-03 16:04:25 +03:00
|
|
|
|
|
|
|
|
|
|
// ✅ Получаем значение поля cf_2624 (Данные подтверждены)
|
|
|
|
|
|
$cf_2624_value = $adb->query_result($result, 0, 'cf_2624');
|
|
|
|
|
|
if (empty($cf_2624_value)) {
|
|
|
|
|
|
$cf_2624_value = "0"; // По умолчанию "Нет"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$logstring = date('Y-m-d H:i:s').' ✅ Контакт найден с id '.$output.', cf_2624='.$cf_2624_value.' (БЕЗ обновления)'.PHP_EOL;
|
2025-10-30 19:21:34 +03:00
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring, FILE_APPEND);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// Контакт НЕ существует - создаём новый
|
|
|
|
|
|
|
|
|
|
|
|
// Дефолтные значения если не указаны
|
|
|
|
|
|
if (empty($firstname)) {
|
|
|
|
|
|
$firstname = 'Клиент';
|
|
|
|
|
|
}
|
|
|
|
|
|
if (empty($lastname)) {
|
|
|
|
|
|
$lastname = 'ERV_' . substr($mobile, -4); // ERV_4567
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$params = array (
|
|
|
|
|
|
'firstname' => $firstname,
|
|
|
|
|
|
'lastname' => $lastname,
|
|
|
|
|
|
'mobile' => $mobile,
|
|
|
|
|
|
'email' => $email,
|
|
|
|
|
|
'birthday' => '01-01-1990', // Дефолтная дата
|
|
|
|
|
|
'cf_1257' => '', // ИНН пустой
|
|
|
|
|
|
'cf_1157' => '', // Отчество пустое
|
|
|
|
|
|
'cf_1263' => '', // Место рождения пустое
|
|
|
|
|
|
'mailingstreet' => '', // Адрес пустой
|
|
|
|
|
|
'cf_1849' => '', // Реквизиты пустые
|
|
|
|
|
|
'cf_1580' => '', // Код пустой
|
2025-12-03 16:04:25 +03:00
|
|
|
|
'cf_2624' => '0', // ✅ Данные подтверждены = "Нет" (по умолчанию для новых контактов)
|
2025-10-30 19:21:34 +03:00
|
|
|
|
'assigned_user_id' => vtws_getWebserviceEntityId('Users', $current_user->id)
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
$logstring = date('Y-m-d H:i:s').' Массив для создания Web Контакта: '.json_encode($params).PHP_EOL;
|
|
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring, FILE_APPEND);
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
$contact = vtws_create('Contacts', $params, $current_user);
|
|
|
|
|
|
$output = substr($contact['id'], 3);
|
2025-10-30 19:49:42 +03:00
|
|
|
|
$isNew = true; // Контакт только что создан!
|
2025-12-03 16:04:25 +03:00
|
|
|
|
$cf_2624_value = "0"; // Новый контакт - данные не подтверждены
|
|
|
|
|
|
$logstring = date('Y-m-d H:i:s').' ✅ Создан новый Web Контакт с id '.$output.', cf_2624=0'.PHP_EOL;
|
2025-10-30 19:21:34 +03:00
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring, FILE_APPEND);
|
|
|
|
|
|
} catch (WebServiceException $ex) {
|
|
|
|
|
|
$logstring = date('Y-m-d H:i:s').' ❌ Ошибка создания: '.$ex->getMessage().PHP_EOL;
|
|
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring, FILE_APPEND);
|
|
|
|
|
|
throw $ex;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 16:04:25 +03:00
|
|
|
|
// Возвращаем JSON с флагом is_new и значением cf_2624
|
2025-10-30 19:49:42 +03:00
|
|
|
|
$result = array(
|
|
|
|
|
|
'contact_id' => $output,
|
2025-12-03 16:04:25 +03:00
|
|
|
|
'is_new' => $isNew,
|
|
|
|
|
|
'cf_2624' => $cf_2624_value // ✅ "1" = данные подтверждены, "0" = не подтверждены
|
2025-10-30 19:49:42 +03:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
$logstring = date('Y-m-d H:i:s').' Return: '.json_encode($result).PHP_EOL;
|
|
|
|
|
|
file_put_contents('logs/CreateWebContact.log', $logstring, FILE_APPEND);
|
|
|
|
|
|
|
|
|
|
|
|
return json_encode($result);
|
2025-10-30 19:21:34 +03:00
|
|
|
|
}
|
|
|
|
|
|
?>
|
|
|
|
|
|
|