0) { ob_clean(); } header('Content-Type: application/json; charset=UTF-8'); // ── Errores a log, no a pantalla ─────────────────────────────────────── ini_set('display_errors', 0); ini_set('display_startup_errors', 0); ini_set('log_errors', 1); error_reporting(E_ALL); require_once __DIR__ . '/config.php'; require_once __DIR__ . '/validar.php'; // ── Respuesta helper ─────────────────────────────────────────────────── function responder($status, $message, $code = 200, $extra = []) { http_response_code($code); echo json_encode(array_merge([ 'status' => $status, 'message' => $message, ], $extra)); exit; } // ── Método ───────────────────────────────────────────────────────────── if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') { responder('error', 'Método no permitido.', 405); } // ── Honeypot ─────────────────────────────────────────────────────────── if (!empty($_POST['website'])) { // Fingimos éxito para no darle pistas al bot responder('success', '¡Gracias! Te contactaremos a la brevedad.'); } // ── Validación ───────────────────────────────────────────────────────── $resultado = validar_contacto($_POST); if (!$resultado['ok']) { responder('error', implode(' ', $resultado['errores']), 400); } $d = $resultado['datos']; // ── PHPMailer ────────────────────────────────────────────────────────── require_once __DIR__ . '/lib/PHPMailer.php'; require_once __DIR__ . '/lib/SMTP.php'; require_once __DIR__ . '/lib/Exception.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\SMTP; // ── Mapas para mostrar etiquetas legibles ───────────────────────────── $etiquetas = [ 'servicio' => [ 'branding' => 'Branding & Identidad', 'web' => 'Desarrollo Web a Medida', 'rrss' => 'Gestión de Redes Sociales', 'automatizaciones'=> 'Automatizaciones & Flujos', 'paid' => 'Paid Media & Campañas', 'ecosistema' => 'Ecosistema Digital Completo', 'otro' => 'Otro / Aún no definido', ], 'etapa' => [ 'idea' => 'Solo tengo la idea', 'inicio' => 'Estoy empezando', 'marcha' => 'En marcha, necesito orden', 'redisenio' => 'Rediseñar / reposicionar', 'escalar' => 'Escalar lo existente', ], 'presupuesto' => [ 'esencial' => 'Hasta $250.000 (Esencial)', 'impulso' => '$250.000 – $500.000 (Impulso)', 'premium' => '$500.000 – $800.000 (Premium)', 'elite' => 'Más de $800.000 (Élite)', 'proyecto' => 'Proyecto cerrado (one-off)', 'no-se' => 'A evaluar por el equipo', ], 'origen' => [ 'instagram' => 'Instagram', 'linkedin' => 'LinkedIn', 'referido' => 'Referido', 'google' => 'Google', 'otro' => 'Otro', ], ]; $mail = new PHPMailer(true); try { // SMTP $mail->isSMTP(); $mail->Host = SMTP_HOST; $mail->SMTPAuth = true; $mail->Username = SMTP_USER; $mail->Password = SMTP_PASS; $mail->SMTPSecure = SMTP_SECURE; $mail->Port = SMTP_PORT; $mail->CharSet = 'UTF-8'; $mail->SMTPDebug = 0; // De / Para $mail->setFrom(SMTP_FROM, SMTP_FROM_NAME); $mail->addAddress(MAIL_TO, MAIL_TO_NAME); $mail->addReplyTo($d['email'], $d['nombre']); // Contenido $mail->Subject = 'Nuevo contacto: ' . $d['nombre'] . ($d['empresa'] ? ' (' . $d['empresa'] . ')' : ''); $mail->isHTML(true); $servicio_txt = $etiquetas['servicio'][$d['servicio']] ?? '—'; $etapa_txt = $etiquetas['etapa'][$d['etapa']] ?? '—'; $presupuesto_txt = $etiquetas['presupuesto'][$d['presupuesto']] ?? '—'; $origen_txt = $etiquetas['origen'][$d['origen']] ?? '—'; $rows = [ 'Nombre' => $d['nombre'], 'Empresa / Marca' => $d['empresa'] ?: '—', 'Email' => $d['email'], 'Teléfono' => $d['telefono'] ?: '—', 'Servicio' => $servicio_txt, 'Etapa' => $etapa_txt, 'Presupuesto' => $presupuesto_txt, 'Cómo nos conoció'=> $origen_txt, ]; $html = '
'; $html .= '

Nueva consulta desde el sitio

'; $html .= ''; foreach ($rows as $label => $valor) { $html .= ''; $html .= ''; $html .= ''; $html .= ''; } $html .= '
' . htmlspecialchars($label) . '' . htmlspecialchars($valor) . '
'; $html .= '

Mensaje

'; $html .= '
' . htmlspecialchars($d['mensaje']) . '
'; $html .= '
'; $mail->Body = $html; $mail->AltBody = "Nueva consulta\n\n" . "Nombre: {$d['nombre']}\n" . "Empresa: {$d['empresa']}\n" . "Email: {$d['email']}\n" . "Teléfono: {$d['telefono']}\n" . "Servicio: $servicio_txt\n" . "Etapa: $etapa_txt\n" . "Presupuesto: $presupuesto_txt\n" . "Origen: $origen_txt\n\n" . "Mensaje:\n{$d['mensaje']}\n"; $mail->send(); responder('success', '¡Gracias! Te contactaremos en menos de 48 horas hábiles.', 200, [ 'redirect' => REDIRECT_URL, 'delay' => REDIRECT_MS, ]); } catch (Exception $e) { error_log('[contacto] Falló el envío: ' . $mail->ErrorInfo); $msg = DEBUG_MODE ? 'Error SMTP: ' . $mail->ErrorInfo : 'No pudimos enviar tu mensaje. Probá por WhatsApp o intentá más tarde.'; responder('error', $msg, 500); }