Esta guía te ayudará a configurar Stripe Checkout en tu proyecto Astro para vender productos físicos.
- Ve a stripe.com y crea una cuenta
- Completa la verificación de tu cuenta (información personal y bancaria)
- Activa tu cuenta para recibir pagos
- Ve al Dashboard de Stripe
- Asegúrate de estar en modo "Test" (toggle en la esquina superior derecha)
- Ve a Developers > API keys
- Copia las siguientes claves:
- Publishable key (empieza con
pk_test_) - Secret key (empieza con
sk_test_)
- Publishable key (empieza con
- Cambia a modo "Live" en el dashboard
- Ve a Developers > API keys
- Copia las claves de producción:
- Publishable key (empieza con
pk_live_) - Secret key (empieza con
sk_live_)
- Publishable key (empieza con
Copia el archivo env.example a .env y configura las variables:
# Stripe Configuration
STRIPE_SECRET_KEY=sk_test_your_stripe_secret_key_here
STRIPE_PUBLISHABLE_KEY=pk_test_your_stripe_publishable_key_here
# Site Configuration
SITE_URL=https://grumlingames.comPuedes verificar que tu configuración sea correcta ejecutando:
npm run check-stripeEste comando te mostrará qué variables están configuradas y cuáles faltan.
Para producción, usa las claves de producción y actualiza la URL:
STRIPE_SECRET_KEY=sk_live_your_production_secret_key
STRIPE_PUBLISHABLE_KEY=pk_live_your_production_publishable_key
SITE_URL=https://grumlingames.com- Ve a Developers > Webhooks en el dashboard de Stripe
- Haz clic en Add endpoint
- URL del endpoint:
https://tu-dominio.com/api/webhook - Eventos a escuchar:
checkout.session.completedpayment_intent.succeededpayment_intent.payment_failed
- Después de crear el webhook, ve a Signing secret
- Copia el secret (empieza con
whsec_) - Añádelo a tu
.env:STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret
Los productos se configuran en src/lib/products.ts. Cada producto debe tener:
{
id: 'product-id',
name: 'Nombre del producto',
description: 'Descripción del producto',
price: 2999, // Precio en centavos (29.99 USD)
currency: 'USD',
image: '/path/to/image.webp',
category: 'physical', // Solo productos físicos
available: true // false para productos no disponibles
}Para usar precios dinámicos de Stripe:
- Crea productos en el dashboard de Stripe
- Copia el Price ID
- Añádelo al producto:
stripePriceId: 'price_1234567890'
- Conecta tu repositorio a Vercel
- Añade las variables de entorno en Settings > Environment Variables
- Deploy automático
- Conecta tu repositorio a Netlify
- Añade las variables de entorno en Site settings > Environment variables
- Configura el build command:
npm run build
Asegúrate de configurar estas variables en tu plataforma de hosting:
STRIPE_SECRET_KEY=sk_live_...
STRIPE_PUBLISHABLE_KEY=pk_live_...
SITE_URL=https://grumlingames.comUsa estas tarjetas para probar los pagos:
- Pago exitoso:
4242 4242 4242 4242 - Pago fallido:
4000 0000 0000 0002 - Requiere autenticación:
4000 0025 0000 3155
- Ve a
/shopen tu sitio - Haz clic en "Comprar" en cualquier producto
- Usa una tarjeta de prueba
- Completa el pago
- Verifica que llegues a
/thank-you
- Ve a Payments para ver todos los pagos
- Ve a Customers para ver información de clientes
- Ve a Analytics para métricas de ventas
Los errores se registran en la consola del servidor. Revisa los logs de tu hosting para debugging.
- ✅ Nunca expongas la clave secreta en el frontend
- ✅ Valida todos los datos de entrada
- ✅ Usa HTTPS en producción
- ✅ Mantén las dependencias actualizadas
- ❌ No hardcodees las claves en el código
- ❌ No uses las claves de producción en desarrollo
- Validación de ID de producto
- Verificación de disponibilidad
- Sanitización de datos de entrada
- Manejo de errores robusto
Los estilos del botón de compra se pueden personalizar en src/components/ui/BuyButton.astro
Los mensajes de éxito/error se pueden personalizar en:
src/pages/thank-you.astrosrc/pages/cancelled.astro
Añade nuevos productos editando src/lib/products.ts
Si tienes problemas:
- Revisa los logs del servidor
- Verifica las variables de entorno
- Confirma que las claves de Stripe sean correctas
- Contacta con soporte de Stripe si es necesario
Nota: Esta implementación es para venta directa simple. Para funcionalidades avanzadas como carritos, suscripciones o descuentos, considera usar Stripe Elements o implementar lógica adicional.