Conecta formularios WebAR con backend PHP, MySQL, pagos, WhatsApp y analítica.
Antes de continuar
Descargar el proyecto base del nivel intermedio
El nivel avanzado empieza desde el proyecto intermedio completo. No quiero que el estudiante tenga que buscar “la versión correcta” ni mezclar archivos. Por eso este nivel incluye un botón directo para descargar el template intermedio y usarlo como punto de partida.
Antes de empezar: este nivel entra en backend y base de datos. Es recomendable que la persona tenga una idea básica de qué es una base de datos, una tabla, un registro y una conexión. En el curso lo explicaremos paso a paso usando XAMPP y phpMyAdmin, pero si el estudiante ya tiene experiencia puede usar Laragon, MAMP, Docker, MySQL Workbench, cPanel, phpMyAdmin del hosting u otra herramienta para crear la misma base de datos.
Conocimientos recomendados
Entender que una base de datos guarda información de forma organizada.
Saber que una tabla funciona parecido a una hoja con columnas y filas.
Comprender que PHP será el puente entre el formulario WebAR y MySQL.
Entender que este proyecto avanzado necesita ejecutarse desde servidor local o hosting, no desde file://.
No es obligatorio ser experto: usaremos XAMPP porque es una forma sencilla de practicar en local.
Proyecto base para iniciar el avanzado
Incluye productos dinámicos, selector, CRM local, exportación CSV, eventos comerciales y el modelo Modelo3D-Helado.glb.
En básico guardamos un lead temporal. En intermedio organizamos productos y exportamos CSV. En avanzado conectamos la experiencia con servidor: PHP recibe los datos, MySQL los guarda, y los botones comerciales pueden conectarse con WhatsApp, Stripe, PayPal o un checkout externo.
Arquitectura avanzada
Conectar WebAR con backend, pagos y analítica
En el avanzado el lead ya no vive solo en el navegador. La experiencia mantiene el modelo 3D GLB del helado como contenido aumentado principal, lo carga con GLTFLoader y Meshopt, y además envía datos a PHP. PHP los guarda en MySQL y la campaña puede conectarse con Stripe, WhatsApp y analítica.
Flujo final
QR → landing WebAR → target detectado → formulario → API PHP → MySQL → WhatsApp/Checkout → analítica de conversión.
Idea clave: el proyecto avanzado solo guarda leads en el servidor si existe una base de datos y si api/save-lead.php tiene credenciales correctas. Sin base de datos, la experiencia AR puede abrir cámara y mostrar el modelo, pero el formulario no podrá guardar registros reales.
Base de datos desde cero
Preparar MySQL local con XAMPP y phpMyAdmin
Si nunca has usado bases de datos, piensa en MySQL como una tabla organizada donde guardaremos los leads. El formulario WebAR captura nombre, email, WhatsApp y producto. PHP recibe esos datos y MySQL los guarda para consultarlos después.
Para practicar localmente usaremos XAMPP, porque instala Apache, PHP, MySQL y phpMyAdmin en el computador. Apache ejecuta el proyecto, PHP procesa el formulario, MySQL guarda los datos y phpMyAdmin permite administrar la base de datos desde el navegador.
Descarga oficial: entra a https://www.apachefriends.org/download.html y descarga XAMPP para tu sistema operativo. Usa la versión recomendada para Windows, macOS o Linux según tu computador.
Qué debes encender en XAMPP
Descarga XAMPP desde https://www.apachefriends.org/download.html.
Instala XAMPP con las opciones por defecto.
Abre el panel de XAMPP. En Windows normalmente se llama XAMPP Control Panel.
Busca la fila Apache y presiona Start. Si queda en verde, Apache está activo.
Busca la fila MySQL y presiona Start. Si queda en verde, MySQL está activo.
Apache permite abrir el proyecto desde http://localhost.
MySQL permite crear la base de datos y guardar leads.
Cómo entrar a phpMyAdmin paso a paso
Confirma que Apache y MySQL estén encendidos en XAMPP.
En la misma fila de MySQL, presiona el botón Admin. XAMPP abrirá phpMyAdmin en el navegador.
Si el botón Admin no abre nada, abre tu navegador manualmente.
Escribe esta dirección en la barra del navegador: http://localhost/phpmyadmin.
Si todo está bien, verás una pantalla con el logo de phpMyAdmin y un menú lateral izquierdo.
En ese menú lateral aparecerán bases como information_schema, mysql o performance_schema. No borres esas bases; son internas de MySQL.
Para crear nuestra base, haz clic en Nueva o New en el menú lateral.
Crear la base de datos local
Dentro de phpMyAdmin, haz clic en Nueva o New.
Busca el campo que dice Nombre de la base de datos.
Escribe exactamente webar_comercial. Respeta el guion bajo.
En cotejamiento puedes elegir utf8mb4_unicode_ci. Si no lo ves, deja la opción por defecto y continúa.
Haz clic en Crear.
Cuando la base aparezca en el menú izquierdo, haz clic sobre webar_comercial.
Arriba verás pestañas como Estructura, SQL, Buscar e Importar.
Haz clic en la pestaña SQL. Ahí pegaremos el código que crea la tabla commercial_leads.
Errores comunes al entrar a phpMyAdmin
La página no abre: revisa que Apache esté en verde en XAMPP.
phpMyAdmin abre pero muestra error de conexión: revisa que MySQL esté en verde.
El puerto está ocupado: otro programa puede estar usando Apache o MySQL. Reinicia XAMPP o revisa los puertos.
Entraste con file://: eso no ejecuta PHP. Para este nivel avanzado usa http://localhost.
No ves la opción Nueva: revisa el menú lateral izquierdo de phpMyAdmin. También puede aparecer como New si está en inglés.
Qué pasa si no tengo base de datos todavía
Opción de práctica: usa el nivel intermedio, que guarda leads en localStorage y exporta CSV. No necesita MySQL.
Opción local avanzada: instala XAMPP y crea webar_comercial. Esta es la opción recomendada para aprender backend.
Opción servidor real: crea la base en cPanel/phpMyAdmin y cambia las credenciales en api/save-lead.php.
Importante: abrir el proyecto con file:// no sirve para PHP. Debe abrirse desde http://localhost/tu-carpeta o desde un servidor HTTPS.
Base de datos
Importar el archivo commercial-leads.sql en phpMyAdmin
Ahora crearemos la tabla donde se guardarán los leads. Puedes pegar el SQL manualmente en la pestaña SQL de phpMyAdmin o usar el archivo commercial-leads.sql que viene dentro del template avanzado.
Dónde va: entra a http://localhost/phpmyadmin, selecciona la base webar_comercial, abre la pestaña SQL, pega este código y presiona Continuar. En servidor cPanel, primero crea la base desde cPanel y luego ejecuta el mismo SQL dentro de phpMyAdmin.
Base y tabla SQL de leadscommercial-leads.sql
CREATE DATABASE IF NOT EXISTS webar_comercial
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE webar_comercial;
CREATE TABLE IF NOT EXISTS commercial_leads (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(190) NOT NULL,
email VARCHAR(190) NOT NULL,
whatsapp VARCHAR(60) NULL,
product_id VARCHAR(120) NULL,
source VARCHAR(80) NOT NULL DEFAULT 'webar',
utm_source VARCHAR(120) NULL,
created_at DATETIME NOT NULL,
INDEX (email),
INDEX (product_id),
INDEX (created_at)
);
Explicación del SQL
CREATE DATABASE IF NOT EXISTS webar_comercial: crea la base de datos local si todavía no existe.
CHARACTER SET utf8mb4: permite guardar tildes, eñes, emojis y caracteres especiales.
USE webar_comercial: le dice a MySQL que las siguientes instrucciones se ejecutarán dentro de esa base.
CREATE TABLE IF NOT EXISTS: crea la tabla solo si todavía no existe. Esto evita errores si ejecutas la migración dos veces.
id INT AUTO_INCREMENT PRIMARY KEY: crea un identificador único para cada lead.
name y email: guardan los datos principales del contacto.
whatsapp: guarda el número que el usuario dejó para seguimiento comercial.
product_id: conecta el lead con la oferta o producto escaneado.
source: indica de dónde viene el lead. Aquí usamos webar como valor por defecto.
utm_source: permite identificar si el usuario llegó desde QR, Instagram, feria, anuncio o campaña.
created_at: guarda la fecha del registro.
INDEX: mejora búsquedas por email, producto y fecha cuando la tabla crezca.
Cómo confirmar que funcionó
En phpMyAdmin, abre la base webar_comercial.
Debe aparecer una tabla llamada commercial_leads.
Haz clic en la tabla y revisa la pestaña Estructura.
Debes ver columnas como name, email, whatsapp, product_id y created_at.
Endpoint
Crear api/save-lead.php
Este archivo recibe JSON desde JavaScript, valida campos mínimos y guarda el lead en MySQL. Debe estar en una carpeta api dentro del proyecto publicado. Para pruebas locales con XAMPP usaremos la base webar_comercial, usuario root y contraseña vacía.
Si no funciona: revisa que Apache y MySQL estén activos, que abras el proyecto desde http://localhost, que exista la base webar_comercial y que la tabla commercial_leads haya sido creada.
declare(strict_types=1): hace que PHP sea más estricto con los tipos de datos.
header('Content-Type: application/json'): indica que la respuesta será JSON.
php://input: lee el cuerpo crudo de la petición enviada desde JavaScript.
json_decode(..., true): convierte el JSON recibido en un array PHP.
Validación inicial: si faltan email o name, el endpoint responde con error 422.
new PDO(...): abre conexión con MySQL. En XAMPP local normalmente se usa base webar_comercial, usuario root y contraseña vacía.
PDO::ATTR_ERRMODE: permite detectar errores de base de datos como excepciones.
Cuando subas a cPanel: cambia webar_comercial, root y la contraseña vacía por los datos reales de tu hosting.
prepare(): crea una consulta segura con espacios reservados.
execute(): envía los valores reales a la consulta preparada.
trim() y strtolower(): limpian datos básicos antes de guardarlos.
echo json_encode(['ok' => true]): responde a JavaScript que el lead fue guardado correctamente.
Enviar lead
Conectar el formulario con la API
Reemplaza el guardado en localStorage por una petición fetch. Esta parte debe ir dentro del evento submit del formulario, en app.js. En el template intermedio busca el bloque que empieza con leadForm.addEventListener("submit"; ese bloque es el que vamos a reemplazar por esta versión conectada al backend.
Importante: no borres la lógica de productos, el selector, la carga del modelo 3D ni los eventos de MindAR. Solo cambia la parte que guarda el lead para que en lugar de quedarse en el navegador viaje hacia api/save-lead.php.
checkoutLinks: es un objeto que relaciona cada producto con una URL de pago. La clave debe coincidir con el id del producto.
buyButton: representa el botón de compra dentro de la interfaz comercial. Si todavía no existe en tu HTML, debes crearlo dentro de commercial-panel.
addEventListener("click"): espera el clic del usuario antes de enviarlo al pago. Esto nos permite medir la intención de compra.
trackEvent("checkout_click"): registra que el usuario presionó comprar. Más adelante puedes enviar este evento a GA4.
window.location.href: redirige al usuario al enlace de pago correspondiente al producto seleccionado.
En producción puedes usar Stripe Checkout desde backend, Payment Links o tu sistema de pagos actual. Lo importante es medir el clic y saber desde qué producto se originó.
Entrega avanzada
Checklist del proyecto comercial
Target propio compilado como campana.mind.
Landing WebAR con CTA claro.
Modelo 3D GLB cargado desde assets/Modelo3D-Helado.glb con escala 1 1 1.
Runtime local con Three.js r160, GLTFLoader y meshopt_decoder.module.js.
Sube una imagen de producto, flyer, tarjeta comercial o pieza de campaña. El compilador genera el archivo .mind que MindAR necesita para reconocer el marcador.
No hay imágenes seleccionadas.
Selecciona una imagen para comenzar.
Template final
Descarga el proyecto completo
Este ZIP contiene el proyecto final del nivel, con estructura de carpetas, código completo, modelo 3D GLB incluido y notas para publicarlo.
Template Nivel avanzado
Proyecto WebAR comercial listo para estudiar, adaptar y subir a un servidor HTTPS.