Генератор паролей

Форма обратной связи php + js и создание лида в Б24

index.php
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Форма обратной связи</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="js/main.js"></script>
    
</head>
<body>
    <form id="contactForm">
        <label for="name">Имя:</label>
        <input type="text" id="name" name="name" required><br><br>

        <label for="phone">Телефон:</label>
        <input type="text" id="phone" name="phone" required><br><br>

        <label for="question">Ваш вопрос:</label>
        <textarea id="question" name="question"></textarea><br><br>

        <input type="submit" value="Отправить">
    </form>
</body>
</html>
main.js
$(document).ready(function() {
    function validateForm() {
        var name = $("#name").val().trim();
        var phone = $("#phone").val().trim();
        var question = $("#question").val().trim();
        var errorMsg = "";

        // Проверка имени
        if (name.length < 2) {
            errorMsg += "Имя должно содержать не менее 2 символов.\n";
        }

        // Проверка телефона
        var phonePattern = /^\+7\s?\d{3}\s?\d{3}\s?\d{2}\s?\d{2}$/;
        if (!phonePattern.test(phone)) {
            errorMsg += "Телефон должен быть в формате +7 999 999 9999.\n";
        }

        // Если есть ошибки, показать их
        if (errorMsg != "") {
            alert(errorMsg);
            return false;
        }

        return true;
    }

    $("#contactForm").on("submit", function(event) {
        event.preventDefault();

        if (!validateForm()) {
            return;
        }

        var formData = {
            name: $("#name").val().trim(),
            phone: $("#phone").val().trim(),
            question: $("#question").val().trim()
        };

        $.ajax({
            type: "POST",
            url: "submit_form.php",
            data: formData,
            success: function(response) {
                alert(response);
            },
            error: function() {
                alert("Произошла ошибка при отправке формы.");
            }
        });
    });
});
submit_form.php
как создать лид через вебхук - более подробная статья.
CurlBitrix24 - функция, которая отправляет запросы в Б24
function CurlBitrix24($method, $arData=array()){ 
   $queryUrl = "https://testnikaverro.bitrix24.ru/rest/[юзер]/[код]/".$method;   
   
    $curl = curl_init();
    curl_setopt_array($curl, array(
      CURLOPT_URL => $queryUrl,
      CURLOPT_SSL_VERIFYPEER => 0,
      CURLOPT_POST => 1,
      CURLOPT_HEADER => 0,
      CURLOPT_RETURNTRANSFER => 1,      
   ));

   if(!empty($arData)){
      curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($arData));
   }

   $result = curl_exec($curl);         
   curl_close($curl);
   
   return json_decode($result,true);
}



if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = trim($_POST['name']);
    $phone = trim($_POST['phone']);
    $question = trim($_POST['question']);
    $errors = [];

    // Валидация имени
    if (strlen($name) < 2) {
        $errors[] = "Имя должно содержать не менее 2 символов.";
    }

    // Валидация телефона
    $phonePattern = '/^\+7\s?\d{3}\s?\d{3}\s?\d{2}\s?\d{2}$/';
    if (!preg_match($phonePattern, $phone)) {
        $errors[] = "Телефон должен быть в формате +7 953 585 1309.";
    }

    // Если есть ошибки, вернуть их
    if (!empty($errors)) {
        echo implode("\n", $errors);
        exit;
    }

    // Запись данных в файл
    $file = 'submissions.txt';
    $current = file_get_contents($file);
    $current .= "Имя: $name\nТелефон: $phone\nВопрос: $question\n\n";
    file_put_contents($file, $current);

    // Отправка письма менеджеру
    $to = 'hello@nikaverro.ru';  
    $subject = 'Новая заявка с сайта';
    $message = "Имя: $name\nТелефон: $phone\nВопрос: $question";
    
    if (mail($to, $subject, $message)) {
        echo "Форма успешно отправлена.";
    } else {
        echo "Произошла ошибка при отправке письма.";
    }
    
    //для отправки в Б24
    $arFields = [
        "TITLE" => $name,
        "ADDRESS" => "Адрес",
        "PHONE" => [
            ["VALUE"=>$phone, "VALUE_TYPE"=>"WORK" ],           
        ],        
        "COMMENTS" => $question,   
        "UF_CRM_1717508297392"=> 47,//свойство типа список ид значения для примера
        "UF_CRM_1717508545248" => [ //свойство типа файл для примера
            'fileData'=>[
                0 =>"my_file.txt",
                1 =>base64_encode($current)
            ]
        ]    
    ];
    
    $result = CurlBitrix24('crm.lead.add.json', array(
       'fields' => $arFields, 
       'params' => array("REGISTER_SONET_EVENT" => "Y")
    ));   

    $leadId = (is_array($result) && !empty($result["result"])) ? $result["result"]: false;   
    if(!empty($leadId)){
        echo "\nДобавлен лид: ".$leadId;
    }
    
}