Sistema PHP seguro para venta de cursos online con integración PayPal y gating de contenido.
cursos/
├── public/ # Raíz pública (public_html en cPanel)
│ ├── index.php # Landing del curso
│ ├── login.php # Página de inicio de sesión
│ ├── register.php # Página de registro
│ ├── logout.php # Cerrar sesión
│ ├── mis-videos.php # Área privada de videos
│ ├── success.php # Página post-pago exitoso
│ ├── cancel.php # Página pago cancelado
│ ├── checkout/ # Endpoints de PayPal
│ │ ├── create-order.php
│ │ └── capture-order.php
│ ├── webhook/ # Webhooks
│ │ └── paypal.php
│ ├── lib/ # Librerías PHP
│ │ ├── bootstrap.php # Inicialización común
│ │ ├── db.php # Conexión a base de datos
│ │ ├── security.php # Headers y funciones de seguridad
│ │ ├── auth.php # Autenticación
│ │ ├── csrf.php # Protección CSRF
│ │ ├── validate.php # Validaciones
│ │ ├── rate_limit.php # Rate limiting
│ │ ├── access.php # Gestión de acceso
│ │ ├── utils.php # Funciones utilitarias
│ │ └── paypal.php # Integración PayPal
│ ├── assets/ # CSS, JS, imágenes (sin secretos)
│ └── .htaccess # Configuración de seguridad
├── secure/ # FUERA de public/ (fuera de public_html)
│ ├── config.php # Configuración y credenciales
│ ├── cache/ # Cache de tokens OAuth2
│ └── vendor/ # Librerías externas (si aplica)
├── sql/ # Scripts de base de datos
│ ├── schema.sql # Estructura de tablas
│ └── seed_videos.sql # Datos iniciales de videos
└── README.md # Este archivo
undefinedClonar o descargar el proyectoundefined
cd /ruta/a/tu/proyecto
undefinedConfigurar base de datosundefined
# Crear base de datos
mysql -u root -p
CREATE DATABASE cursos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cursos_user'@'localhost' IDENTIFIED BY 'cursos_pass_2024!';
GRANT ALL PRIVILEGES ON cursos.* TO 'cursos_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# Importar esquema
mysql -u cursos_user -p cursos < sql/schema.sql
mysql -u cursos_user -p cursos < sql/seed_videos.sql
undefinedConfigurar credencialesundefined
Editar secure/config.php:
'db' => [
'dsn' => 'mysql:host=localhost;dbname=cursos;charset=utf8mb4',
'user' => 'cursos_user',
'pass' => 'cursos_pass_2024!',
],
'paypal' => [
'client_id' => 'TU_PAYPAL_CLIENT_ID_SANDBOX',
'secret' => 'TU_PAYPAL_SECRET_SANDBOX',
// ...
],
undefinedConfigurar Google Driveundefined
drive_file_id en sql/seed_videos.sqlundefinedEjecutar servidor localundefined
cd cursos
php -S 127.0.0.1:8080 -t public
undefinedProbar la aplicaciónundefined
# Crear archivo de despliegue
tar -czf cursos-deploy.tar.gz cursos/
undefinedOpción A: Subir vía cPanel File Managerundefined
public_htmlcursos (opcional)undefinedOpción B: Subir vía FTP/SFTPundefined
# Subir carpeta public/ a public_html/
rsync -av cursos/public/ usuario@servidor.com:public_html/cursos/
# Subir carpeta secure/ FUERA de public_html
rsync -av cursos/secure/ usuario@servidor.com:secure/
undefinedCrear base de datos en cPanelundefined
usuario_cursosusuario_cursouserundefinedImportar esquemaundefined
mysql -u usuario_cursouser -p usuario_cursos < sql/schema.sql
mysql -u usuario_cursouser -p usuario_cursos < sql/seed_videos.sql
undefinedActivar SSLundefined
undefinedForzar HTTPSundefined
Editar public/.htaccess:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Editar secure/config.php:
'env' => 'live',
'app' => [
'base_url' => 'https://tudominio.com/cursos',
'course_id' => 1,
],
'db' => [
'dsn' => 'mysql:host=localhost;dbname=usuario_cursos;charset=utf8mb4',
'user' => 'usuario_cursouser',
'pass' => 'tu_password_db',
],
'paypal' => [
'client_id' => 'TU_PAYPAL_CLIENT_ID_LIVE',
'secret' => 'TU_PAYPAL_SECRET_LIVE',
'base_api' => 'https://api-m.paypal.com',
],
'security' => [
'session_secure' => true, // Activar en producción
],
undefinedCrear aplicación en PayPal Developerundefined
client_id y secretundefinedConfigurar webhookundefined
https://tudominio.com/cursos/webhook/paypal.phpPAYMENT.CAPTURE.COMPLETED# Permisos de archivos
find public/ -type f -exec chmod 644 {} \;
find public/ -type d -exec chmod 755 {} \;
# Permisos de directorio secure
chmod 755 secure/
chmod 644 secure/config.php
chmod 755 secure/cache/
undefinedNUNCA subir a repositorio público:
secure/config.phpsecure/cache/.env (si se usan)El sistema incluye automáticamente:
Configurado por endpoint:
undefinedRegistro de usuarioundefined
/register.phpundefinedLoginundefined
/login.phpundefinedCompra con PayPal Sandboxundefined
/index.php/success.phpundefinedAcceso a videosundefined
/mis-videos.phpundefinedWebhookundefined
undefinedError de conexión a base de datosundefined
# Verificar credenciales en secure/config.php
# Verificar que la base de datos existe
mysql -u usuario -p -e "SHOW DATABASES;"
undefinedPayPal no funcionaundefined
# Verificar client_id y secret
# Verificar que estás en sandbox/live según corresponda
# Revisar logs de error en cPanel
undefinedVideos no se reproducenundefined
# Verificar permisos de Google Drive
# Verificar que los drive_file_id son correctos
# Verificar CSP permite Google Drive
undefinedErrores 500undefined
# Revisar logs de error de PHP
# Verificar permisos de archivos
# Verificar que todas las librerías están incluidas
/home/usuario/logs/error.log/home/usuario/logs/access.logsecurity_logs en base de datosPara soporte técnico:
Sistema desarrollado para Pijije Regenerativo.
Todos los derechos reservados.
undefined⚠️ Importante: Este sistema maneja pagos reales. Siempre probar exhaustivamente en sandbox antes de activar en producción.