Files
crm.clientright.ru/include/Webservices/CreateWebContact.php
Fedor 09c1fbd1db feat: Добавлена операция CreateWebContact для vTiger webservice
- Упрощённая операция создания контакта: обязательно только mobile
- Логика: если контакт существует - возвращает ID БЕЗ обновления
- Если не существует - создаёт с дефолтами (Клиент ERV_XXXX)
- Формат телефона: 79001234567 (без +)
- Зарегистрировано в БД:
  * vtiger_ws_operation (id: 50)
  * vtiger_ws_operation_parameters (mobile, firstname, lastname, email)
- Логи: logs/CreateWebContact.log
- Протестировано: контакт 396625 найден и возвращён без изменений
2025-10-30 19:21:34 +03:00

114 lines
5.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 (опционально)
* @return int - ID контакта
*/
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;
// Проверяем существование контакта по номеру телефона
$query = "select c.contactid
from vtiger_contactdetails c
left join vtiger_crmentity e on e.crmid = c.contactid
where e.deleted = 0 and c.mobile = ?
limit 1";
$result = $adb->pquery($query, array($mobile));
if ($adb->num_rows($result) > 0) {
// Контакт существует - ПРОСТО ВОЗВРАЩАЕМ ID (НЕ обновляем!)
$output = $adb->query_result($result, 0, 'contactid');
$logstring = date('Y-m-d H:i:s').' ✅ Контакт найден с id '.$output.' (БЕЗ обновления)'.PHP_EOL;
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' => '', // Код пустой
'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);
$logstring = date('Y-m-d H:i:s').' ✅ Создан новый Web Контакт с id '.$output.PHP_EOL;
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;
}
}
return $output;
}
?>