Files
crm.clientright.ru/include/Webservices/CreateWebContact.php
Fedor d7941ac862 feat: CreateWebContact возвращает is_new флаг
- Return: {"contact_id": "123", "is_new": true/false}
- is_new = true: контакт создан сейчас
- is_new = false: контакт уже существовал
- Логируется в CreateWebContact.log
- Протестировано:
  * Новый 79194927999 → {contact_id: 396636, is_new: true}
  * Существующий 79001234567 → {contact_id: 396625, is_new: false}
2025-10-30 19:49:42 +03:00

127 lines
5.6 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;
$isNew = false; // Флаг: создан ли контакт сейчас
// Проверяем существование контакта по номеру телефона
$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');
$isNew = false;
$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);
$isNew = true; // Контакт только что создан!
$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;
}
}
// Возвращаем JSON с флагом is_new
$result = array(
'contact_id' => $output,
'is_new' => $isNew
);
$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);
}
?>