'; foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); $mail_body .= $key . ' : ' . $item->field_val . '
'; } // Логируем тело письма log_message("Тело письма: $mail_body"); // Формируем данные для отправки почты $email_data = array( 'to' => 'kfv.advokat@gmail.com', 'subject' => 'Новая заявка из системы Клиентправ/ЛексПриорити', 'body' => 'Данные заявки: ' . $mail_body, 'attachments' => $upload_urls_real ); // Сохраняем данные для скрипта отправки почты $email_file = 'formlog/email_data.json'; file_put_contents($email_file, json_encode($email_data, JSON_UNESCAPED_UNICODE)); // Запускаем отправку почты в фоновом режиме exec('php send_email_2.php > /dev/null 2>/dev/null &'); // Логирование отправленных данных log_message("Отправленные данные на CRM: " . json_encode($upload_urls_real)); // Прочая логика (например, работа с API и т.д.) $endpointUrl = "https://crm.clientright.ru/webservice.php"; // 1) Вынимаем временный токен из ответа $ch = curl_init(); $url = $endpointUrl . "?operation=getchallenge&username=api"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Увеличенный таймаут $response = curl_exec($ch); $jsonResponse = json_decode($response, true); $challengeToken = $jsonResponse['result']['token']; $result['challengeToken'] = $challengeToken; $userAccessKey = '4r9ANex8PT2IuRV'; $generatedKey = md5($challengeToken.$userAccessKey); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => array( 'operation' => 'login', 'username' => 'api', 'accessKey' => $generatedKey ) )); $response = curl_exec($ch); $jsonResponse = json_decode($response, true); $sessionId = $jsonResponse['result']['sessionName']; log_message("Получен sessionId: " . $sessionId); // 2) Создание клиента-физлица $client_array = array( 'operation' => 'CreateContact', 'sessionName' => $sessionId, ); foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); if ($item->ws_type == "client") { $client_array[$item->ws_name] = $item->field_val; if ($item->ws_name == "code") $sms = $item->field_val; } } $maxAttempts = 3; // Максимальное количество попыток $attempts = 0; $client_id = null; do { $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $client_array )); $response = curl_exec($ch); // Логируем ответ от сервера log_message("Ответ от сервера: " . $response); // Удаляем лишние символы $response = trim($response); $response = preg_replace('/^\xEF\xBB\xBF/', '', $response); // Удаляем BOM $output = json_decode($response, true); // Убедитесь, что декодирование прошло успешно if (json_last_error() !== JSON_ERROR_NONE) { log_message("Ошибка декодирования JSON: " . json_last_error_msg()); break; // Выход из цикла в случае ошибки } // Проверяем успешность запроса if (isset($output['success']) && $output['success'] === true) { $client_id = $output['result'] ?? null; log_message("Создан клиент с ID: " . ($client_id ? $client_id : 'Ошибка получения ID')); } else { log_message("Ошибка при создании клиента, ответ сервера: " . json_encode($output)); } $attempts++; } while (!$client_id && $attempts < $maxAttempts); // Логируем ответ сервера при создании клиента log_message("Ответ сервера при создании клиента: " . json_encode($output)); // Дополнительная логика обработки (если требуется) // ... // 3) Создание/обновление Контрагента-исполнитель $contractor_array = array( 'operation' => 'CreateAccount', 'sessionName' => $sessionId, ); foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); if ($item->ws_type == "contractor" && $item->field_val != "") { $contractor_array[$item->ws_name] = $item->field_val; } } // Проверяем наличие ИНН и ОГРН, если их нет, генерируем if (empty($contractor_array['inn'])) { // Генерация случайного ИНН, начинающегося с "00" $contractor_array['inn'] = '00' . str_pad(mt_rand(0, 999999999), 9, '0', STR_PAD_LEFT); // Генерируем 9 цифр log_message("ИНН отсутствовал, сгенерирован: " . $contractor_array['inn']); } if (empty($contractor_array['ogrn'])) { // Генерация случайного ОГРН, начинающегося с "000" $contractor_array['ogrn'] = '000' . str_pad(mt_rand(0, 999999999), 9, '0', STR_PAD_LEFT); // Генерируем 9 цифр log_message("ОГРН отсутствовал, сгенерирован: " . $contractor_array['ogrn']); } $maxAttempts = 3; // Максимальное количество попыток $attempts = 0; $contractor_id = null; do { $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $contractor_array )); $response = curl_exec($ch); // Удаляем лишние символы и проверяем ответ $response = trim($response); $response = preg_replace('/^\xEF\xBB\xBF/', '', $response); // Удаляем BOM // Логируем ответ от сервера log_message("Ответ от сервера при создании контрагента: " . $response); // Декодируем JSON и проверяем на ошибки $output = json_decode($response, TRUE); if (json_last_error() !== JSON_ERROR_NONE) { log_message("Ошибка декодирования JSON: " . json_last_error_msg()); log_message("Неправильный JSON: " . $response); // Логируем неверный JSON break; // Выход из цикла в случае ошибки } // Проверяем успешность запроса $contractor_id = $output['result'] ?? null; log_message("Попытка создания контрагента, попытка: " . ($attempts + 1)); if ($contractor_id) { log_message("Создан контрагент с ID: " . $contractor_id); } else { log_message("Ошибка получения ID контрагента, ответ сервера: " . json_encode($output)); } $attempts++; } while (!$contractor_id && $attempts < $maxAttempts); // Логируем ответ сервера при создании контрагента log_message("Ответ сервера при создании контрагента: " . json_encode($output)); // 3.1) Агент if ($_POST['getservice'] == "agent") { $agent_array = array( 'operation' => 'CreateAccount', 'sessionName' => $sessionId, ); foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); if ($item->ws_type == "agent" && $item->field_val != "") { $agent_array[$item->ws_name] = $item->field_val; } } $attempts = 0; $agent_id = null; do { $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $agent_array )); $response = curl_exec($ch); // Удаляем лишние символы и проверяем ответ $response = trim($response); $response = preg_replace('/^\xEF\xBB\xBF/', '', $response); // Удаляем BOM // Логируем ответ от сервера log_message("Ответ от сервера при создании агента: " . $response); // Декодируем JSON и проверяем на ошибки $output = json_decode($response, TRUE); if (json_last_error() !== JSON_ERROR_NONE) { log_message("Ошибка декодирования JSON: " . json_last_error_msg()); log_message("Неправильный JSON: " . $response); // Логируем неверный JSON break; // Выход из цикла в случае ошибки } // Проверяем успешность запроса $agent_id = $output['result'] ?? null; log_message("Попытка создания агента, попытка: " . ($attempts + 1)); if ($agent_id) { log_message("Создан Агент с ID: " . $agent_id); } else { log_message("Ошибка получения ID агента, ответ сервера: " . json_encode($output)); } $attempts++; } while (!$agent_id && $attempts < $maxAttempts); } // Логируем ответ сервера при создании контрагента log_message("Ответ сервера при создании агента: " . json_encode($output)); // 4) Проект $project_array = array( 'operation' => 'CreateProject', 'sessionName' => $sessionId, 'contactid' => $client_id, 'offenderid' => $contractor_id, 'agentid' => $agent_id, 'sms' => $sms ); // Пушим в массив остальные поля foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); if ($item->ws_type != "contractor" && $item->ws_type != "client" && $item->ws_type != "agent" && $item->ws_type != "other") { $project_array[$item->ws_name] = $item->field_val; } } $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $project_array )); $response = curl_exec($ch); $project_id = preg_replace('/[^0-9]/', '', $response); log_message("Создан проект с ID: " . $project_id); // 5) Прикрепление файлов к проекту if ($upload_urls_real) { foreach ($upload_urls_real as $index => $upload_url) { if ($docs_ticket_files_ids && $docs_ticket_files_ids[$index] != "simple") continue; if ($upload_url) { $params = array( 'operation' => 'AddPDF', 'sessionName' => $sessionId, 'crmid' => $project_id, 'file' => $upload_url, 'description' => $docs_names[$index] ); $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $params )); $response = curl_exec($ch); $output = json_decode($response, TRUE); log_message("Прикреплен файл к проекту: " . $response); } } } // 6) Остальные поля $other_array = array(); foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); if ($item->ws_type == "other") { $other_array[$item->ws_name] = $item->field_val; } } $params = array( 'operation' => 'UpdateEntity', 'sessionName' => $sessionId, //'crmid' => $project_id, 'crmid' => $client_id, 'element' => json_encode($other_array) ); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $params )); $response = curl_exec($ch); $output = json_decode($response, TRUE); // Логирование обновленных полей и ответа сервера log_message("Обновлены остальные поля: " . json_encode($other_array)); log_message("Ответ сервера при обновлении полей: " . json_encode($output)); // 6.1) Остальные поля $other_array = array(); foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); if ($item->ws_type == "other") { $other_array[$item->ws_name] = $item->field_val; } } $params = array( 'operation' => 'UpdateEntity', 'sessionName' => $sessionId, 'crmid' => $project_id, // 'crmid' => $client_id, 'element' => json_encode($other_array) ); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $params )); $response = curl_exec($ch); $output = json_decode($response, TRUE); // Логирование обновленных полей и ответа сервера log_message("Обновлены остальные поля: " . json_encode($other_array)); log_message("Ответ сервера при обновлении полей: " . json_encode($output)); // 7 Создание заявок $ticket_id_array = array(); foreach ($appends as $key => $itemjson) { $item = json_decode($itemjson); if ($item->ws_type == "ticket") { $params = array( 'operation' => 'CreateERVTicket', 'sessionName' => $sessionId, 'title' => $item->field_val, 'contactid' => $client_id, 'projectid' => $project_id ); $ch = curl_init(); // Создаем новое соединение cURL для каждой заявки curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $params )); $response = curl_exec($ch); if (curl_errno($ch)) { log_message("Ошибка cURL при создании заявки: " . curl_error($ch)); continue; // Переходим к следующей заявке в случае ошибки } // Удаляем лишние символы и проверяем ответ $response = trim($response); $response = preg_replace('/^\xEF\xBB\xBF/', '', $response); // Удаляем BOM // Логируем обработанный ответ log_message("Ответ от сервера после удаления BOM: " . $response); // Декодируем JSON и проверяем на ошибки $output = json_decode($response, true, 512, JSON_UNESCAPED_UNICODE); if (json_last_error() !== JSON_ERROR_NONE) { log_message("Ошибка декодирования JSON: " . json_last_error_msg()); log_message("Неправильный JSON: " . $response); // Логируем неверный JSON curl_close($ch); continue; // Переходим к следующей заявке в случае ошибки } // Логируем ответ log_message("Создана заявка: " . json_encode($output)); if (isset($output['result'])) { $ticket_id_array[$item->ws_name] = $output['result']; // Прямое использование результата } else { log_message("Ошибка создания заявки: " . json_encode($output)); } curl_close($ch); // Закрываем cURL соединение } } // Логируем массив заявок log_message("Массив ID заявок: " . json_encode($ticket_id_array)); // Удаляем из массива simple $valueToRemove = "simple"; $docs_ticket_files_ids = array_filter($docs_ticket_files_ids, function($element) use ($valueToRemove) { return $element !== $valueToRemove; }); $docs_ticket_files_ids = array_values($docs_ticket_files_ids); // Логируем обновленный массив файлов log_message("Обновленный массив файлов после удаления 'simple': " . json_encode($docs_ticket_files_ids)); // Прикрепление файлов к заявкам $index = 0; foreach ($ticket_id_array as $key => $item) { // Массив ID заявок $upload_url = $upload_urls_real[$docs_ticket_files_ids[$index]]; if ($upload_url) { $params = array( 'operation' => 'AddPDF', 'sessionName' => $sessionId, 'crmid' => $item, // ID заявки 'file' => $upload_url, 'description' => $docs_names[$docs_ticket_files_ids[$index]] ); // Логируем отправляемые параметры log_message("Отправляемые параметры для прикрепления файла к заявке $item: " . json_encode($params)); $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_URL => $endpointUrl, CURLOPT_POSTFIELDS => $params )); $response = curl_exec($ch); if (curl_errno($ch)) { log_message("Ошибка cURL при прикреплении файла: " . curl_error($ch)); } else { log_message("Ответ от сервера при прикреплении файла к заявке $item: " . $response); } curl_close($ch); $index++; } } //log_message("Массив ID заявок: " . json_encode($ticket_id_array)); // Логируем ответ клиенту $response = ['status' => 'success', 'message' => 'Данные успешно обработаны.']; log_message("Ответ клиенту: " . json_encode($response)); echo json_encode($response); ?>