Sitio estatico con despliegue por GitHub Actions al VPS.
Se agrego una tienda conectada con la API de Printful:
- Frontend:
public/tienda.html - JS de tienda:
public/assets/js/main.js - API proxy (servidor):
public/api/printful.php
La llave de Printful nunca debe exponerse en el navegador. Por eso, el frontend llama a public/api/printful.php y este archivo PHP hace las llamadas a Printful desde el servidor.
Configura una de estas opciones:
- Variable de entorno
PRINTFUL_API_KEYen Apache/PHP-FPM. - Archivo local
public/api/.printful-tokencon solo el token (sin espacios).
Opcional:
PRINTFUL_API_BASE_URL(por defecto usahttps://api.printful.com).
GET /api/printful.php?action=productslista productos del store.GET /api/printful.php?action=product&id=123obtiene detalle de producto.POST /api/printful.php?action=ordercrea orden borrador en Printful (legado).POST /api/checkout.php?action=shippingcalcula tarifas reales de envío (MXN).POST /api/checkout.php?action=create-checkoutcrea la orden borrador + sesión de Stripe Checkout.POST /api/checkout.php?action=webhookStripe llama aquí tras el pago y se confirma la orden en Printful.
El checkout completo se realiza en el sitio con Stripe (pago) y Printful (fulfillment).
- Se cargan productos desde Printful.
- El usuario agrega productos al carrito y captura su dirección.
- "Calcular envío" obtiene tarifas reales de Printful en MXN.
- El usuario elige método de envío y pulsa "Pagar con tarjeta".
- El backend crea una orden borrador en Printful y una sesión de Stripe Checkout (MXN), y redirige al pago seguro de Stripe.
- Al pagar, Stripe llama al webhook, que confirma la orden en Printful para producción automáticamente.
Configura los secretos igual que el token de Printful (variable de entorno o archivo fuera del web root):
| Secreto | Variable de entorno | Archivo (alternativa) |
|---|---|---|
| Llave secreta de Stripe | STRIPE_SECRET_KEY |
.stripe-secret |
| Firma del webhook | STRIPE_WEBHOOK_SECRET |
.stripe-webhook-secret |
Opcionales:
STORE_CURRENCY(por defectoMXN).PRICE_MULTIPLIER(por defecto1; úsalo si tus precios en Printful están en USD y quieres convertir a MXN).SITE_BASE_URL(por defecto se detecta del host; ej.https://capoeiracuernavaca.com).
Los archivos .stripe-secret y .stripe-webhook-secret deben guardarse fuera del web root (un nivel arriba de public_html, junto a .printful-token) o como variables de entorno. Nunca se suben al repo ni al servidor por rsync (ya están excluidos).
- En el panel de Stripe: Developers → Webhooks → Add endpoint.
- URL:
https://capoeiracuernavaca.com/api/checkout.php?action=webhook - Evento:
checkout.session.completed(y opcionalcheckout.session.async_payment_succeeded). - Copia el Signing secret (
whsec_...) y guárdalo enSTRIPE_WEBHOOK_SECRET/.stripe-webhook-secret.