# Guía para conectar Printful por API

Esta guía deja listo el camino para que la tienda funcione de forma automática con Printful.

## Objetivo

Cuando un pago sea aprobado por Stripe o PayPal:

1. El backend valida el carrito.
2. Se crea la orden pagada.
3. Se manda la orden a Printful por API.
4. Printful produce y envía.
5. El tracking se guarda en la base de datos.

## Lo que necesitas crear en Printful

1. Cuenta de Printful.
2. Una store conectada por API.
3. Un API key privado.
4. Los productos y variantes base en Printful.
5. El mapeo entre tus productos y los IDs de Printful.

## Producto publicado detectado

La tienda API activa de Printful es:

- Store ID: `18139742`
- Store name: `Tienda de Luis`
- Producto sincronizado: `Unisex classic tee`
- Sync product ID: `431565083`
- External product ID: `69fcb7966a0c25`
- Moneda: `MXN`

Variantes actuales:

| Talla | Precio | Printful variant_id | sync_variant_id |
| --- | ---: | ---: | ---: |
| S | 439 | 11546 | 5297293930 |
| M | 439 | 11547 | 5297293931 |
| L | 439 | 11548 | 5297293932 |
| XL | 439 | 11549 | 5297293933 |
| 2XL | 475 | 11550 | 5297293935 |
| 3XL | 509 | 12644 | 5297293936 |
| 4XL | 545 | 12645 | 5297293937 |
| 5XL | 579 | 12646 | 5297293938 |

## Variables de entorno sugeridas

Guárdalas como secretos en Cloudflare Pages o en tu backend:

- `PRINTFUL_API_KEY`
- `PRINTFUL_STORE_ID`
- `STRIPE_SECRET_KEY`
- `STRIPE_WEBHOOK_SECRET`
- `PAYPAL_CLIENT_ID`
- `PAYPAL_CLIENT_SECRET`
- `DB` para D1

## Estructura recomendada de endpoints

- `GET /api/health`
- `POST /api/checkout/stripe`
- `POST /api/checkout/paypal`
- `POST /api/webhooks/stripe`
- `POST /api/webhooks/paypal`
- `POST /api/orders/printful`
- `POST /api/webhooks/printful`

## Flujo real de producción

### Stripe ya iniciado

El proyecto ya incluye:

- `POST /api/checkout/stripe`: crea una Stripe Checkout Session real usando precios validados del backend.
- `POST /api/webhooks/stripe`: endpoint preparado para verificar firma de Stripe cuando exista `STRIPE_WEBHOOK_SECRET`.
- Secretos configurados en Cloudflare Pages: `STRIPE_SECRET_KEY` y `STRIPE_PUBLISHABLE_KEY`.

Falta crear el webhook desde Stripe Dashboard para obtener `STRIPE_WEBHOOK_SECRET` y cerrar el flujo `checkout.session.completed` → D1 → Printful.

### Stripe

- El carrito se envía al backend.
- El backend revalida precios y stock.
- Se crea una sesión de Stripe Checkout.
- Stripe confirma el pago con un webhook.
- El backend crea la orden en Printful.

### PayPal

- El carrito se envía al backend.
- El backend crea la sesión de pago de PayPal.
- PayPal confirma el pago con un webhook.
- El backend crea la orden en Printful.

## Llamada a Printful

Tu backend tendrá que:

1. Construir el payload con:
   - productos
   - tallas
   - colores
   - cantidades
   - dirección de envío
   - email del cliente

2. Llamar a la API de Printful.
3. Guardar el `printful_order_id`.
4. Escuchar tracking y cambios de estado.

## Reglas importantes

- No crees la orden en Printful antes de recibir confirmación del pago.
- No confíes en el carrito del navegador como fuente de verdad.
- Valida precios y variantes del lado servidor.
- Guarda todos los pedidos en D1 o una base equivalente.

## Qué falta programar después

- Crear el webhook en Stripe Dashboard y guardar `STRIPE_WEBHOOK_SECRET`.
- Guardar órdenes en D1.
- Crear la orden real en Printful después del webhook de Stripe.
- La configuración real de PayPal.
- Los webhooks de pago y fulfillment.
- El panel interno para revisar pedidos.

## Token de Cloudflare

Si después necesitas permisos adicionales para Pages Functions o para conectar el dominio, revisamos el token en ese momento. Por ahora este sitio puede seguir con la configuración actual del proyecto.
