# Ai2GO E-commerce — Código PHP corregido para cPanel (versión 4.1)

**Instalación destino:** `/home/ai2go/ai2go_comercial` · **sitio:** `https://soluciones.ai2go.app`

**Esta actualización reutiliza las tablas `ai2go_orders`, `ai2go_leads` y `ai2go_webhook_events` existentes. No se debe crear una base nueva, ni borrar registros ni volver a instalar Composer.**

## 0. Advertencia de seguridad prioritaria

La captura original mostró `Index of /` y directorios `config/`, `app/`, `database/` y `vendor/` públicos: **no abras todavía Stripe ni pongas secretos nuevos hasta corregir Document Root**. En **cPanel → Dominios → soluciones.ai2go.app → Administrar → New Document Root** escribe **`ai2go_comercial/public`**, relativo al home `/home/ai2go/`, y pulsa Update. Si no puedes modificarlo, pide al proveedor que cambie la raíz pública a `/home/ai2go/ai2go_comercial/public`. Un `.htaccess` en la raíz del proyecto es defensa provisional, NO reemplaza esta medida. No publiques un symlink a `/home/ai2go/ai2go_comercial` ni metas el config en public/.

## 1. Respaldo antes de actualizar

Desde la terminal:

```bash
cd /home/ai2go/ai2go_comercial
php -v
php -l config/config.php
```

Comprueba el subdominio y haz un respaldo cPanel de MySQL si ya has recibido datos reales.

## 2. Subir el ZIP nuevo

Sube `AI2GO_ECOMMERCE_V4_1_CORREGIDO.zip` a `/home/ai2go/` (fuera de la raíz web) desde cPanel. Después:

```bash
cd /home/ai2go
mkdir -p ai2go_actualizacion
unzip -o AI2GO_ECOMMERCE_V4_1_CORREGIDO.zip -d ai2go_actualizacion
bash /home/ai2go/ai2go_actualizacion/AI2GO_ECOMMERCE_CORREGIDO/INSTALAR_ACTUALIZACION.sh
```

El script crea una copia de seguridad de código en `~/ai2go_respaldo_codigo_*.tar.gz`, reemplaza **solo archivos de código**, preserva `config/config.php` y NO elimina tablas/registros.

## 3. config.php — ubicación y formato

Ruta: `/home/ai2go/ai2go_comercial/config/config.php`. **No lo sustituyas** si ya tiene credenciales correctas. Compara las claves con `config/CONFIG_PARA_COPIAR.php.txt` y edita con `nano` únicamente las incorrectas:

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

Debe devolver un **array PHP**, no usar `echo` ni `print_r`:

- `base_url`: `https://soluciones.ai2go.app` sin slash final.
- `brand_name`: `Ai2GO`.
- `db`: host, port, database, username, password **ya funcionando**, respetar los valores actuales.
- `legal_ready`: dejar `false` hasta revisar aviso, términos y condiciones.
- `stripe`: dejar `secret_key`, `webhook_secret` y `prices` vacíos hasta modo de prueba.
- `contact_email`, `contact_whatsapp`, `smtp`: completar cuando dispongas de datos reales.

Nunca pegues contraseñas en un chat ni instales `config.php` dentro de `public`.

## 4. Composer y PHP

Ya está instalado Composer en `/home/ai2go/composer.phar`; si necesitas comprobar:

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

## 5. Pruebas de web y seguridad

**Después de modificar Document Root:**

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

Objetivos: `/` y `check-empresarial.php` deben responder `200`; `/config/config.php` y `/vendor/autoload.php` deben responder `403` o `404`, jamás `200`. En la portada no debe aparecer `Index of /`. Certificado HTTPS sin advertencias. `sitemap.xml` y `robots.txt` deben abrir correctamente.

**Si se detectó exposición de configuración anterior**, rota contraseña MySQL, Stripe y SMTP que hayan estado accesibles. Revisa registros de acceso y no uses el modo live hasta completar esta revisión.

## 6. Formulario y prueba gratis

En esta versión, **Prueba gratis** almacena una solicitud de contacto en `ai2go_leads` cuando `legal_ready=true`. No crea una cuenta funcional del ERP. Primero completa y publica el aviso de privacidad y términos; después configuras correo SMTP y verificas en una prueba que se guardó la solicitud.

## 7. Cobros seguros con Stripe (SOLO DESPUÉS de pruebas)

- Creación de productos y precios recurrentes mensuales MXN en Stripe modo test; copia los `price_...` en `stripe.prices`.
- Copia clave secreta `sk_test_...` y secreto `whsec_...` al config privado.
- Webhook: `https://soluciones.ai2go.app/api/webhook.php` con los eventos listados en `README_INSTALACION.md` del proyecto original.
- Realiza pago test, fallido, cancelado y valida webhook firmado. El importe se comprueba desde servidor y la tarjeta se procesa en Stripe, no en tu dominio.
- La contratación NO aprovisiona usuarios ERP/CRM automáticamente; conecta tu backend antes de prometer activación inmediata.
- No uses `sk_live` antes de aprobar términos, impuestos, facturación, cancelaciones y revisión de seguridad.

## 8. Google / SEO

Configura `base_url`, verifica Search Console y envía `https://soluciones.ai2go.app/sitemap.xml`. Una página accesible no garantiza indexación ni posición determinada.

## Estructura de archivos

```
/home/ai2go/ai2go_comercial/
├── app/                      PHP de aplicación y catálogos (privado)
├── config/config.php         TUS secretos reales (privado; NO se sobrescribe)
├── config/config.example.php Plantilla de configuración completa
├── database/schema.sql       Esquema original (no reimportar si tablas OK)
├── vendor/                   Composer actual de tu servidor (conservar)
├── tests/diagnostico_instalacion.php
├── public/                   ÚNICO Document Root
│   ├── index.php
│   ├── check-empresarial.php
│   ├── api/{checkout,contacto,webhook}.php
│   ├── assets/
│   └── .htaccess
├── .htaccess                 Bloqueo provisional si root queda mal
└── INSTALAR_ACTUALIZACION.sh
```

## Alcance y límites

Incluye frontend completo Ai2GO, aplicaciones, industrias, planes, carrito, PHP de backend, base de datos, endpoints preparados de Stripe, y páginas SEO. No incluye cuentas reales ERP/CRM o Check Empresarial, activación automática de licencias ni auditoría de seguridad externa. Sin credenciales reales y documentos legales aprobados, los pagos permanecen inactivos. La protección del directorio `config` **depende fundamentalmente** del Document Root correcto.
