This commit is contained in:
2025-10-21 11:41:30 -06:00
parent ed2ef4e01b
commit b1b9e4a77c
49 changed files with 14632 additions and 1736 deletions

View File

@@ -342,4 +342,281 @@ function obtenerCorreos($conn, $id_usuario)
}
return $correos;
}
function ventanillaUnica()
{
$conn = getConnection();
$id_usuario = $_SESSION['usuario_id'] ?? null;
// Asegúrate de que el usuario está autenticado
if (!$id_usuario || ($_SESSION['pendiente_confirmacion'] ?? false)) {
die("Usuario no autenticado.");
}
// Obtener configuración actual de ventanilla única
$configuracion_vu = obtenerConfiguracionVU($conn, $id_usuario);
include __DIR__ . '/../../views/seguridad/ventanilla_unica.php';
}
function guardarConfiguracionVU()
{
// Solo ejecutar si es una petición POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
$conn = getConnection();
$id_usuario = $_SESSION['usuario_id'] ?? null;
if (!$id_usuario || ($_SESSION['pendiente_confirmacion'] ?? false)) {
die("No autorizado - Sesión inválida");
}
// Obtener datos del formulario (sin ruta_ejecutable)
$clave_fiel = trim($_POST['clave_fiel'] ?? '');
$rfc_usuario_vu = trim($_POST['rfc_usuario_vu'] ?? '');
$clave_webservice = trim($_POST['clave_webservice'] ?? '');
// Validar campos obligatorios (sin ruta_ejecutable)
if (empty($clave_fiel) || empty($rfc_usuario_vu)) {
$_SESSION['config_error'] = 'Los campos Clave FIEL y RFC Usuario VU son obligatorios.';
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
// Obtener configuración actual para conservar archivos existentes
$configuracion_actual = obtenerConfiguracionVU($conn, $id_usuario);
$ruta_archivo_key = $configuracion_actual['ruta_archivo_key'];
$ruta_archivo_cer = $configuracion_actual['ruta_archivo_cer'];
// Directorio para archivos de certificados
$upload_dir = __DIR__ . '/../../storage/certificados/';
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0755, true);
}
// Procesar archivo KEY
if (!empty($_FILES['archivo_key']['tmp_name']) && $_FILES['archivo_key']['error'] === UPLOAD_ERR_OK) {
$key_extension = pathinfo($_FILES['archivo_key']['name'], PATHINFO_EXTENSION);
if (strtolower($key_extension) !== 'key') {
$_SESSION['config_error'] = 'El archivo KEY debe tener extensión .key';
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
$key_filename = 'key_' . $id_usuario . '_' . time() . '.key';
$key_destination = $upload_dir . $key_filename;
if (move_uploaded_file($_FILES['archivo_key']['tmp_name'], $key_destination)) {
// Eliminar archivo anterior si existe
if ($ruta_archivo_key && file_exists($ruta_archivo_key)) {
unlink($ruta_archivo_key);
}
$ruta_archivo_key = $key_destination;
} else {
$_SESSION['config_error'] = 'Error al subir el archivo KEY.';
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
}
// Procesar archivo CER
if (!empty($_FILES['archivo_cer']['tmp_name']) && $_FILES['archivo_cer']['error'] === UPLOAD_ERR_OK) {
$cer_extension = pathinfo($_FILES['archivo_cer']['name'], PATHINFO_EXTENSION);
if (strtolower($cer_extension) !== 'cer') {
$_SESSION['config_error'] = 'El archivo CER debe tener extensión .cer';
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
$cer_filename = 'cer_' . $id_usuario . '_' . time() . '.cer';
$cer_destination = $upload_dir . $cer_filename;
if (move_uploaded_file($_FILES['archivo_cer']['tmp_name'], $cer_destination)) {
// Eliminar archivo anterior si existe
if ($ruta_archivo_cer && file_exists($ruta_archivo_cer)) {
unlink($ruta_archivo_cer);
}
$ruta_archivo_cer = $cer_destination;
} else {
$_SESSION['config_error'] = 'Error al subir el archivo CER.';
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
}
// Validar que se hayan subido los certificados (obligatorios para nueva configuración)
if (empty($ruta_archivo_key) || empty($ruta_archivo_cer)) {
$_SESSION['config_error'] = 'Los archivos CER y KEY son obligatorios.';
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
// Encriptar las contraseñas sensibles
$clave_fiel_encrypted = encrypt($clave_fiel);
$clave_webservice_encrypted = !empty($clave_webservice) ? encrypt($clave_webservice) : '';
// Verificar si ya existe configuración - CORREGIR ERROR SQL
$sql_check = "SELECT COUNT(*) as total FROM configuracion_ventanilla_unica WHERE id_usuario = ?";
$stmt_check = sqlsrv_query($conn, $sql_check, [$id_usuario]);
if ($stmt_check === false) {
$_SESSION['config_error'] = 'Error en la consulta de configuración: ' . print_r(sqlsrv_errors(), true);
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
$row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);
if ($row['total'] > 0) {
// Actualizar configuración existente (sin ruta_ejecutable)
$sql = "UPDATE configuracion_ventanilla_unica SET
ruta_archivo_key = ?,
ruta_archivo_cer = ?,
clave_fiel = ?,
rfc_usuario_vu = ?,
clave_webservice = ?,
fecha_actualizacion = GETDATE()
WHERE id_usuario = ?";
$params = [
$ruta_archivo_key,
$ruta_archivo_cer,
$clave_fiel_encrypted,
$rfc_usuario_vu,
$clave_webservice_encrypted,
$id_usuario
];
} else {
// Insertar nueva configuración (sin ruta_ejecutable)
$sql = "INSERT INTO configuracion_ventanilla_unica
(id_usuario, ruta_archivo_key, ruta_archivo_cer,
clave_fiel, rfc_usuario_vu, clave_webservice, fecha_creacion)
VALUES (?, ?, ?, ?, ?, ?, GETDATE())";
$params = [
$id_usuario,
$ruta_archivo_key,
$ruta_archivo_cer,
$clave_fiel_encrypted,
$rfc_usuario_vu,
$clave_webservice_encrypted
];
}
$stmt = sqlsrv_prepare($conn, $sql, $params);
if (!$stmt) {
$_SESSION['config_error'] = "Error en la preparación: " . print_r(sqlsrv_errors(), true);
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
$result = sqlsrv_execute($stmt);
if ($result === false) {
$_SESSION['config_error'] = "Error al guardar configuración: " . print_r(sqlsrv_errors(), true);
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
$_SESSION['config_success'] = 'Configuración de Ventanilla Única guardada correctamente.';
header('Location: /IMPORTADORES/seguridad/ventanillaUnica');
exit;
}
function probarConexionVU()
{
header('Content-Type: application/json');
$id_usuario = $_SESSION['usuario_id'] ?? null;
if (!$id_usuario || ($_SESSION['pendiente_confirmacion'] ?? false)) {
echo json_encode(['success' => false, 'message' => 'Usuario no autenticado']);
exit;
}
$conn = getConnection();
$configuracion = obtenerConfiguracionVU($conn, $id_usuario);
// Verificar que todos los campos requeridos estén configurados (sin ruta_ejecutable)
if (empty($configuracion['rfc_usuario_vu']) || empty($configuracion['clave_fiel'])) {
echo json_encode([
'success' => false,
'message' => 'Configuración incompleta. Verifica que RFC Usuario VU y Clave FIEL estén configurados.'
]);
exit;
}
// Verificar archivos de certificados
if (!empty($configuracion['ruta_archivo_cer']) && !file_exists($configuracion['ruta_archivo_cer'])) {
echo json_encode([
'success' => false,
'message' => 'El archivo CER no existe en la ruta especificada.'
]);
exit;
}
if (!empty($configuracion['ruta_archivo_key']) && !file_exists($configuracion['ruta_archivo_key'])) {
echo json_encode([
'success' => false,
'message' => 'El archivo KEY no existe en la ruta especificada.'
]);
exit;
}
// Verificar que existan ambos archivos de certificados
if (empty($configuracion['ruta_archivo_cer']) || empty($configuracion['ruta_archivo_key'])) {
echo json_encode([
'success' => false,
'message' => 'Los archivos CER y KEY son obligatorios para la configuración.'
]);
exit;
}
// Si llegamos aquí, la configuración es válida
echo json_encode([
'success' => true,
'message' => 'Configuración válida. Los archivos de certificados existen y todos los campos obligatorios están completos.'
]);
exit;
}
function obtenerConfiguracionVU($conn, $id_usuario)
{
$configuracion = [
'ruta_archivo_key' => '',
'ruta_archivo_cer' => '',
'clave_fiel' => '',
'rfc_usuario_vu' => '',
'clave_webservice' => '',
'fecha_creacion' => null,
'fecha_actualizacion' => null
];
$sql = "SELECT * FROM configuracion_ventanilla_unica WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $sql, [$id_usuario]);
if ($stmt && sqlsrv_execute($stmt)) {
if ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$configuracion['ruta_archivo_key'] = $row['ruta_archivo_key'] ?? '';
$configuracion['ruta_archivo_cer'] = $row['ruta_archivo_cer'] ?? '';
$configuracion['rfc_usuario_vu'] = $row['rfc_usuario_vu'] ?? '';
// Desencriptar contraseñas
$configuracion['clave_fiel'] = !empty($row['clave_fiel']) ? decrypt($row['clave_fiel']) : '';
$configuracion['clave_webservice'] = !empty($row['clave_webservice']) ? decrypt($row['clave_webservice']) : '';
$configuracion['fecha_creacion'] = $row['fecha_creacion'];
$configuracion['fecha_actualizacion'] = $row['fecha_actualizacion'];
}
}
return $configuracion;
}