Pagos y creditos
Stripe Checkout, el webhook firmado y el monedero de creditos con su registro de movimientos.
El cobro es Stripe Checkout, y lo que el usuario compra son creditos que gasta luego dentro de tu producto. Es el modelo que mejor se adapta a un SaaS joven: no obliga a una suscripcion antes de que el cliente confie en ti.
El recorrido de una compra
- El usuario elige un pack de creditos.
- Tu servidor crea una sesion de Stripe Checkout y lo manda alli.
- Paga en Stripe. Tu aplicacion nunca ve la tarjeta, y eso te ahorra la mayor parte de la carga de cumplimiento.
- Stripe avisa a tu webhook.
- El webhook comprueba la firma, apunta el pago y suma los creditos.
Lo importante del paso 5: los creditos se dan cuando lo dice el webhook, no cuando el navegador vuelve a la pagina de gracias. Si te fias de la vuelta del navegador, quien cierre la pestana antes de tiempo se queda sin sus creditos habiendo pagado, y quien sepa lo que hace puede pedirlos sin pagar.
El webhook
Vive en /api/webhook. Esa ruta y no otra.
Hace tres cosas antes de tocar nada:
- Verifica la firma con
STRIPE_WEBHOOK_SECRET. Un aviso sin firma valida se rechaza. Sin esto, cualquiera puede regalarse creditos con una peticion. - Es idempotente. Stripe reintenta cuando duda de si llegaste a responder. Si el mismo evento llega dos veces, se apunta una sola vez. Sin esto, un reintento duplica creditos.
- Deja rastro. Cada evento queda registrado, para poder auditar despues por que una cuenta tiene los creditos que tiene.
El error mas caro al desplegar es apuntar el webhook a otra ruta, o mover el webhook a produccion y dejar el secreto de firma de pruebas. En los dos casos el cliente paga y no recibe nada, y no te enteras hasta que se queja.
El monedero
Cada usuario tiene un saldo de creditos y un registro de movimientos: cada suma y cada gasto queda apuntado.
Guardar solo el saldo es tentador y es un error. Cuando un cliente escribe diciendo "he perdido creditos", sin el registro no puedes responderle, solo creerle o no creerle. Con el registro, abres su historial y le dices lo que paso.
Por eso la bandeja de soporte muestra los creditos y la ultima compra junto al ticket: la respuesta esta a la vista.
Gastar creditos
El modelo es generico a proposito: "esta accion cuesta N creditos". Tu decides que acciones y cuanto valen.
Hay ademas un sistema de pruebas gratuitas con proteccion contra abuso, que combina huella del navegador e IP, para que un visitante anonimo no pueda consumir sin fin abriendo cuentas.
Que tienes que configurar tu
- Crea tus productos y precios en Stripe y conecta sus identificadores al flujo de compra.
- Ajusta nombres, precios y ventajas de los packs en
pricing.json, en los dos idiomas. - Decide que acciones cuestan creditos y cuantos.
- Prueba con la tarjeta
4242 4242 4242 4242en modo pruebas, y comprueba que los creditos llegan. Es la unica manera de saber que el webhook esta bien.
Impuestos
Stripe cobra, pero no resuelve por si solo el IVA ni los impuestos de venta internacionales. Si vendes a consumidores en varios paises, mira si te conviene un intermediario que actue como vendedor oficial y se ocupe de eso. Esa decision es de negocio, no de codigo, y conviene tomarla antes de la primera venta y no despues.