getRequest(); // 1. Проверка прав клиента if(!self::checkClient($req->get("client_id"), $req->get("client_secret"))) { die(json_encode(['error'=>'forbidden'])); } $email = trim($req->getPost("email")); // 2. Валидация входных данных if(!check_email($email)) { die(json_encode(['status'=>'error','message'=>'Некорректный Email'])); } // Проверка на существование $by = "ID"; $order = "ASC"; if(\CUser::GetList($by, $order, ["=EMAIL" => $email])->Fetch()) { die(json_encode(['status'=>'error','message'=>'Пользователь с таким Email уже существует'])); } $pass = $req->getPost("password"); $v = self::validatePassword($pass); if($v !== true) { die(json_encode(['status'=>'error','message'=>$v])); } // 3. Подготовка групп (специальности) $arGroups = [2, 3, 4]; // Базовые группы $specCode = $req->getPost("specialty"); if (!empty($specCode)) { $rsGroup = \Bitrix\Main\GroupTable::getList([ 'filter' => ['=STRING_ID' => $specCode, '=ACTIVE' => 'Y'], 'select' => ['ID'] ])->fetch(); if ($rsGroup) { $arGroups[] = $rsGroup['ID']; } } // 4. Создание пользователя $user = new \CUser; $arFields = [ "LOGIN" => $email, "EMAIL" => $email, "NAME" => $req->getPost("name"), "LAST_NAME" => $req->getPost("last_name"), "SECOND_NAME" => $req->getPost("second_name"), //"PERSONAL_PHONE" => $req->getPost("phone"), // Записываем телефон "PERSONAL_MOBILE" => $req->getPost("phone"), // Записываем телефон "PERSONAL_CITY" => $req->getPost("city"), // Записываем город "PERSONAL_COUNTRY" => $req->getPost("country"), // ФИКС: Добавлена страна "PASSWORD" => $pass, "CONFIRM_PASSWORD" => $pass, "ACTIVE" => "Y", "GROUP_ID" => $arGroups ]; $uid = $user->Add($arFields); if($uid) { // Генерируем код для мгновенного входа после регистрации $code = bin2hex(random_bytes(16)); $dcCodes = self::getHlEntity('sso_codes'); $dcCodes::add([ 'UF_CODE' => $code, 'UF_CLIENT_ID' => $req->get("client_id"), 'UF_USER_ID' => $uid, 'UF_EXPIRES' => DateTime::createFromTimestamp(time() + 60) ]); self::audit("USER_REGISTERED", $req->get("client_id"), $uid, "Email: ".$email); //echo json_encode(['status' => 'success', 'code' => $code]); echo json_encode(['status' => 'success', 'code' => $code, 'user_id' => $uid]); } else { echo json_encode(['status' => 'error', 'message' => strip_tags($user->LAST_ERROR)]); } } }