false, 'message' => 'Método no permitido. Use POST.' ]); exit(); } // Obtener datos del body (JSON) $input = json_decode(file_get_contents('php://input'), true); // Validar campos obligatorios $campos_requeridos = ['dni', 'email', 'codigo_seguridad', 'nombre']; foreach ($campos_requeridos as $campo) { if (!isset($input[$campo]) || empty(trim($input[$campo]))) { http_response_code(400); echo json_encode([ 'success' => false, 'message' => "Faltan campos obligatorios: " . implode(', ', $campos_requeridos) ]); exit(); } } // Sanitizar entradas $dni = strtoupper(trim($input['dni'])); $email = filter_var(trim($input['email']), FILTER_SANITIZE_EMAIL); $codigo_seguridad = trim($input['codigo_seguridad']); $nombre = trim($input['nombre']); $apellidos = isset($input['apellidos']) ? trim($input['apellidos']) : ''; $telefono = isset($input['telefono']) ? trim($input['telefono']) : ''; // Validar formato de email if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Formato de email no válido']); exit(); } // Validar longitud de contraseña if (strlen($codigo_seguridad) < 6) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'La contraseña debe tener al menos 6 caracteres']); exit(); } try { // Verificar si el DNI ya existe $stmtCheck = $pdo->prepare("SELECT id FROM usuarios WHERE dni = :dni LIMIT 1"); $stmtCheck->execute([':dni' => $dni]); if ($stmtCheck->fetch()) { http_response_code(409); echo json_encode(['success' => false, 'message' => 'Ya existe un usuario con ese DNI']); exit(); } // Verificar si el email ya existe $stmtCheck = $pdo->prepare("SELECT id FROM usuarios WHERE email = :email LIMIT 1"); $stmtCheck->execute([':email' => $email]); if ($stmtCheck->fetch()) { http_response_code(409); echo json_encode(['success' => false, 'message' => 'Ya existe un usuario con ese email']); exit(); } // Hashear la contraseña con bcrypt $passwordHash = password_hash($codigo_seguridad, PASSWORD_BCRYPT); // Insertar el nuevo usuario $stmt = $pdo->prepare(" INSERT INTO usuarios (dni, nombre, apellidos, email, telefono, codigo_seguridad, rol, estado, fecha_registro) VALUES (:dni, :nombre, :apellidos, :email, :telefono, :codigo_seguridad, 'cliente', 'activo', NOW()) "); $stmt->execute([ ':dni' => $dni, ':nombre' => $nombre, ':apellidos' => $apellidos, ':email' => $email, ':telefono' => $telefono, ':codigo_seguridad' => $passwordHash ]); $nuevo_id = (int)$pdo->lastInsertId(); echo json_encode([ 'success' => true, 'message' => 'Usuario creado correctamente', 'id' => $nuevo_id, 'data' => [ 'id' => $nuevo_id, 'dni' => $dni, 'nombre' => $nombre, 'apellidos' => $apellidos, 'email' => $email, 'telefono' => $telefono, 'rol' => 'cliente', 'estado' => 'activo' ] ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); } catch (PDOException $e) { http_response_code(500); echo json_encode([ 'success' => false, 'message' => 'Error en el servidor', 'error' => $e->getMessage() ]); } ?>