# INSTALACIÓN CORREGIDA — Ai2GO E-commerce en https://soluciones.ai2go.app/public/

## Lo que ya funciona en tu servidor

- PHP 8.2.35, Composer 2.11.1 y `vendor/autoload.php` funcionan.
- MySQL conecta y existen `ai2go_orders`, `ai2go_leads`, `ai2go_webhook_events`.
- Ya hay un `config/config.php` funcional para MySQL: NO sobrescribir credenciales.
- Se detectó previamente `Index of /` y exposición de carpetas privadas porque DocumentRoot apuntaba a la raíz del proyecto. Corregir antes de activar pagos.

## A. SEGURIDAD: cambiar Document Root desde cPanel

1. cPanel → Dominios → `soluciones.ai2go.app` → Administrar.
2. Cambiar **New Document Root** al valor `ai2go_comercial/public` (ruta relativa a `/home/ai2go/`).
3. Verificar en cPanel que la ruta final sea **`/home/ai2go/ai2go_comercial/public`**.
4. NO configurar DocumentRoot en `/home/ai2go/ai2go_comercial` y NO copiar `config/` dentro de la raíz pública.
5. Si cPanel no permite modificar el DocumentRoot, solicitar el cambio al proveedor. El `.htaccess` de la raíz es solo una defensa transitoria.

**Importante:** aunque DocumentRoot apunte a la carpeta `/public` en el disco, la URL pedida por el cliente **sí será** `/public/`: el archivo `public/.htaccess` resuelve esa ruta internamente. No se crea una carpeta `public/public`.

## B. Respaldo del sitio antes de actualizar

```bash
cd /home/ai2go/ai2go_comercial
php -l config/config.php
# Si hay datos reales, hacer además respaldo SQL desde cPanel.
```

El instalador incluido genera un backup comprimido del código y de tu `config.php` en `$HOME` con permisos 600. No cambia la contraseña ni altera tablas de MySQL.

## C. Subir ZIP y aplicar actualización SIN cambiar tu config.php

Subir `AI2GO_PHP_PUBLIC_INSTALACION_SEGURA.zip` al directorio `/home/ai2go/` desde cPanel (Administrador de archivos).

```bash
cd /home/ai2go
mkdir -p ai2go_nueva_version
unzip -o AI2GO_PHP_PUBLIC_INSTALACION_SEGURA.zip -d ai2go_nueva_version
bash /home/ai2go/ai2go_nueva_version/AI2GO_ECOMMERCE_PHP_PUBLIC_CORREGIDO/INSTALAR_ACTUALIZACION.sh
```

Esto copia código, HTML, CSS, JS, rutas y protecciones. **Conserva** `config/config.php`, `vendor/` y las tablas MySQL.

## D. Configuración EXACTA de `config/config.php`

Editar el archivo existente:

```bash
nano /home/ai2go/ai2go_comercial/config/config.php
```

Cambiar **SOLO** estas claves; deja las credenciales MySQL reales que ya funcionan:

```php
'base_url' => 'https://soluciones.ai2go.app/public',
'brand_name' => 'Ai2GO',
'legal_ready' => false,
```

Si faltan campos, consultar `config/config.example.php` (ejemplo completo sin secretos). **NO** copies los valores `CAMBIAR_...` sobre tu configuración vigente. Permisos y sintaxis:

```bash
chmod 600 /home/ai2go/ai2go_comercial/config/config.php
php -l /home/ai2go/ai2go_comercial/config/config.php
```

## E. Composer, validación y MySQL

```bash
cd /home/ai2go/ai2go_comercial
php ~/composer.phar install --no-dev --optimize-autoloader
find app public config tests -type f -name '*.php' -exec php -l '{}' ';'
php tests/diagnostico_instalacion.php
```

No se vuelve a ejecutar `schema.sql` porque las tres tablas están correctas.

## F. Probar URLs EXACTAS (desde servidor o navegador)

```bash
curl -I https://soluciones.ai2go.app/public/
curl -I https://soluciones.ai2go.app/public/assets/styles.css
curl -I https://soluciones.ai2go.app/public/assets/app.js
curl -I https://soluciones.ai2go.app/public/check-empresarial.php
curl -I https://soluciones.ai2go.app/public/sitemap.xml
curl -I https://soluciones.ai2go.app/public/robots.txt
curl -I https://soluciones.ai2go.app/config/config.php
curl -I https://soluciones.ai2go.app/vendor/autoload.php
```

Se espera HTTP 200 en portada y assets, y **403 o 404 en config/vendor**; nunca deben descargarse archivos secretos. Se exige HTTPS válido. Es posible que el proveedor cambie temporalmente DNS/caché/SSL.

Si existe HTTP 500, revisar el archivo de errores en cPanel y `php -l`. Si hay 404 solo en `/public/`, confirmar que Apache esté leyendo `public/.htaccess`, con `mod_rewrite` activo y `AllowOverride` adecuado; contactar hosting.

## G. Stripe — sin activar pagos reales todavía

El catálogo y carrito muestran precios orientativos. Los importes reales se comprueban en `app/catalog.php` y Stripe.

1. Revisar y publicar aviso de privacidad, términos, cobros, facturación, impuestos y cancelaciones.
2. Con Stripe **modo test** crear productos y precios mensuales MXN; usar `sk_test_`, `whsec_` y `price_...`.
3. Endpoint webhook: `https://soluciones.ai2go.app/public/api/webhook.php`.
4. Probar suscripciones: individual ERP, individual CRM, combinación, cancelación, fallo y eventos duplicados.
5. Solo cuando se pruebe y apruebe todo, habilitar `legal_ready=true` y configurar modo live.

La página de prueba gratis crea **solicitudes de contacto**, NO habilita usuarios del ERP automáticamente. Los cobros no crean licencias hasta conectar el backend real.

## H. Google y SEO

Configura el sitio en Google Search Console y envía `https://soluciones.ai2go.app/public/sitemap.xml`. La URL canónica es `https://soluciones.ai2go.app/public/`. Con DocumentRoot corregido, el archivo estándar de robots es `https://soluciones.ai2go.app/robots.txt` (también funciona la ruta `/public/robots.txt`). Google no garantiza indexación instantánea.

## I. Recuperación si hay problema

El instalador te indica una ruta `~/ai2go_respaldo_codigo_FECHA.tar.gz`. Para restaurar, solicitar soporte o inspeccionar ese archivo antes de extraerlo; **no borrar las carpetas o base de datos**. Para revisiones sin secretos usar `php tests/diagnostico_instalacion.php`.
