false, ‘message’ => ‘Método no permitido’]);
exit;
}
// Configuración de n8n webhook
// IMPORTANTE: Reemplaza esta URL con tu webhook de n8n
$n8n_webhook_url = ‘https://tu-servidor-n8n.com/webhook/tu-webhook-id’;
// Recoger y sanitizar datos del formulario
$data = [
‘course’ => sanitize_input($_POST[‘course’] ?? ”),
‘courseName’ => sanitize_input($_POST[‘courseName’] ?? ”),
‘period’ => sanitize_input($_POST[‘period’] ?? ”),
‘fullName’ => sanitize_input($_POST[‘fullName’] ?? ”),
‘dateOfBirth’ => sanitize_input($_POST[‘dateOfBirth’] ?? ”),
‘nationality’ => sanitize_input($_POST[‘nationality’] ?? ”),
’email’ => filter_var($_POST[’email’] ?? ”, FILTER_SANITIZE_EMAIL),
‘mobilePrefix’ => sanitize_input($_POST[‘mobilePrefix’] ?? ”),
‘mobile’ => sanitize_input($_POST[‘mobile’] ?? ”),
‘address’ => sanitize_input($_POST[‘address’] ?? ”),
‘townCity’ => sanitize_input($_POST[‘townCity’] ?? ”),
‘country’ => sanitize_input($_POST[‘country’] ?? ”),
‘timestamp’ => date(‘Y-m-d H:i:s’),
‘ip_address’ => $_SERVER[‘REMOTE_ADDR’] ?? ‘Unknown’
];
// Validación básica
$errors = [];
if (empty($data[‘course’])) {
$errors[] = ‘El curso es requerido’;
}
if (empty($data[‘period’])) {
$errors[] = ‘El período es requerido’;
}
if (empty($data[‘fullName’])) {
$errors[] = ‘El nombre completo es requerido’;
}
if (!filter_var($data[’email’], FILTER_VALIDATE_EMAIL)) {
$errors[] = ‘El email no es válido’;
}
if (empty($data[‘mobile’])) {
$errors[] = ‘El número de móvil es requerido’;
}
// Si hay errores, devolver respuesta de error
if (!empty($errors)) {
echo json_encode([
‘success’ => false,
‘message’ => ‘Errores de validación’,
‘errors’ => $errors
]);
exit;
}
// Enviar datos a n8n
$response = send_to_n8n($n8n_webhook_url, $data);
// Verificar respuesta
if ($response[‘success’]) {
// Opcionalmente, guardar en base de datos local como backup
// save_to_database($data);
// Enviar email de confirmación al usuario
send_confirmation_email($data);
echo json_encode([
‘success’ => true,
‘message’ => ‘Formulario enviado correctamente’,
‘data’ => $data
]);
} else {
// Log del error
error_log(‘Error enviando a n8n: ‘ . $response[‘error’]);
echo json_encode([
‘success’ => false,
‘message’ => ‘Error al procesar el formulario. Por favor, intente nuevamente.’,
‘debug’ => $response[‘error’] // Quitar en producción
]);
}
// Funciones auxiliares
function sanitize_input($input) {
$input = trim($input);
$input = stripslashes($input);
$input = htmlspecialchars($input);
return $input;
}
function send_to_n8n($webhook_url, $data) {
// Inicializar cURL
$ch = curl_init($webhook_url);
// Configurar opciones de cURL
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
‘Content-Type: application/json’,
‘Accept: application/json’
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Solo para desarrollo
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// Ejecutar petición
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curl_error = curl_error($ch);
// Cerrar cURL
curl_close($ch);
// Verificar resultado
if ($curl_error) {
return [
‘success’ => false,
‘error’ => ‘cURL Error: ‘ . $curl_error
];
}
if ($http_code >= 200 && $http_code < 300) {
return [
'success' => true,
‘response’ => $response
];
} else {
return [
‘success’ => false,
‘error’ => ‘HTTP Error: ‘ . $http_code . ‘ – Response: ‘ . $response
];
}
}
function send_confirmation_email($data) {
$to = $data[’email’];
$subject = ‘Confirmación de inscripción – ‘ . $data[‘courseName’];
$message = ”
Confirmación de inscripción
Gracias por tu inscripción
Hola {$data[‘fullName’]},
Hemos recibido tu solicitud de inscripción para el siguiente curso:
- Curso: {$data[‘courseName’]}
- Fecha de inicio: {$data[‘period’]}
Nos pondremos en contacto contigo pronto con más información.
Saludos,
El equipo de admisiones