Habilitar nuevos flujos de pago es transformador para los negocios que buscan crecer. Las herramientas low-code y no-code permiten gestionar flujos de pago directamente sobre la plataforma de Stripe, como enviar al cliente un enlace para introducir los datos de su tarjeta y cobrar facturas automáticamente, todo sin salir del dashboard.
Para transacciones de mayor importe, los negocios prefieren métodos de pago distintos a las tarjetas por las comisiones. En Europa, SEPA representa el esquema bancario y requiere un tratamiento distinto al de los pagos con tarjeta. Stripe soporta hoy guardar datos SEPA mediante Checkout sessions: sesiones efímeras y de un solo uso iniciadas por código. Los usuarios deben aceptar que se les debite la cuenta bancaria, un requisito de cumplimiento obligatorio para SEPA.
Generar Checkout sessions normalmente exige que los desarrolladores añadan código en la web y creen páginas dedicadas. Sin embargo, los equipos pequeños sin demasiada capacidad de desarrollo se enfrentan a dificultades para implementar este tipo de cambios.
Una solución consiste en combinar las Checkout sessions de Stripe con Cloudflare Workers, permitiendo generar enlaces compartibles que capturan los datos SEPA para cobrar más adelante. Este enfoque serverless funciona enteramente dentro de Cloudflare, sin necesidad de servidores adicionales ni de modificaciones en la web.
¿Qué es Cloudflare y qué son Cloudflare Workers?
Cloudflare es una empresa líder en seguridad y rendimiento de Internet que da soporte a una porción significativa de la infraestructura de la red. Ofrece gestión de DNS, cifrado SSL/TLS, redes de distribución de contenidos y soluciones que mejoran la seguridad, el rendimiento y la fiabilidad de los sitios web.
Cloudflare Workers son funciones JavaScript que se ejecutan directamente sobre la infraestructura de Cloudflare, entre los servidores y los usuarios finales. Esto sitúa el código en el borde de la red y permite modificar las peticiones antes de que lleguen a los servidores backend, habilitando estrategias avanzadas de caché y personalización del contenido.
Los Workers también ofrecen experiencias serverless al gestionar peticiones de usuario completas dentro del propio worker, eliminando la necesidad de servidores y apoyándose por entero en la red de Cloudflare para alojar y servir el contenido.
Crear un Cloudflare Worker para aceptar datos SEPA
Es posible editar workers directamente en la interfaz de Cloudflare, aunque en este ejemplo editaremos en la máquina local antes de desplegar.
Cloudflare proporciona Wrangler, una herramienta basada en Node.js que se encarga de la creación y el despliegue del proyecto. Se necesitan versiones recientes de Node.js y npm.
Instalar Wrangler
Tras instalar Wrangler, vincule la instalación local con su cuenta de Cloudflare:
wrangler login
Este comando inicia un proceso de autorización con Cloudflare. Se abre una ventana del navegador que explica los permisos que se comparten con la aplicación wrangler. Tras autorizar, vuelva a la consola para completar el login. Si tiene varias cuentas de Cloudflare vinculadas, se le pedirá elegir la cuenta deseada con el teclado.
Crear el proyecto
Cree un proyecto y guarde la librería Stripe para Node:
npm init cloudflare sepa-details-example
Este asistente guía la configuración básica. Seleccione "Hello World" para arrancar con una base mínima sobre la que construir. Le preguntará por el soporte de TypeScript (opcional) y por el despliegue inmediato. Si elige desplegar, el ejemplo "Hello World" quedará accesible en una URL basada en el nombre del proyecto y de la cuenta, por ejemplo, sepa-details-example.square1.workers.dev.
Una vez completada la configuración básica, añada la librería de Stripe:
npm i --save stripe
Guardar la clave secreta de Stripe
Crear Checkout sessions requiere una clave secreta de Stripe que se obtiene en el dashboard. Al ser información sensible, evite guardarla en el código. En su lugar, utilice el almacenamiento de secretos de Cloudflare:
wrangler secret put STRIPE_API_KEY
Le pedirá la clave y la guardará como STRIPE_API_KEY. Verifique los secretos almacenados con wrangler secret list.
Crear una checkout session
Abra src/worker.js y sustituya su contenido por código que cargue la librería de Stripe, cree una checkout session para datos SEPA y redirija a los usuarios:
const Stripe = require("stripe");
export default {
fetch: handleRequest
};
async function handleRequest(request, env, ctx) {
const stripe = Stripe(env.STRIPE_API_KEY, {
httpClient: Stripe.createFetchHttpClient()
});
const session = await stripe.checkout.sessions.create({
payment_method_types: ['sepa_debit'],
mode: 'setup',
customer_creation: 'always',
success_url: 'https://www.example.com/?success=1',
cancel_url: 'https://www.example.com/?retry=1'
});
return Response.redirect(session.url, 303);
}
Si ejecutamos wrangler localmente y visitamos la URL del worker, nos redirige a una URL checkout.stripe.com. Usando claves de Stripe en modo de prueba aparece la insignia "TEST MODE", lo que permite probar con los datos de IBAN de prueba de Stripe. Tras introducir los datos y confirmar la configuración del adeudo directo, el dashboard de Stripe muestra al cliente con los datos SEPA asociados, listos para su uso futuro.
Gestionar los mensajes posteriores al guardado
Antes, success_url y cancel_url apuntaban a example.com sin un mensaje informativo. Lo gestionamos dentro del worker leyendo los parámetros de la URL:
async function handleRequest(request, env, ctx) {
const url = new URL(request.url);
if (url.searchParams.get('success') === '1') {
return showSuccess();
} else if (url.searchParams.get('retry') === '1') {
return showRetry();
} else {
return redirectToCheckout(env.STRIPE_API_KEY, url);
}
}
Stripe redirige al usuario con ?success=1 cuando la operación se completa con éxito o con ?retry=1 en caso de cancelación. Cada manejador devuelve su propia Response con el mensaje de éxito o de reintento.
Desplegar el worker en Cloudflare
Con el código listo, lo desplegamos en Cloudflare:
wrangler deploy
Una vez completado el despliegue, el worker aparece en Cloudflare. Para servirlo desde su propio dominio, vincule un Workers Route bajo la zona correspondiente.
Preparación en Stripe
SEPA está disponible en modo prueba en cuanto se crea la cuenta. Antes de pasar a producción, active SEPA Direct Debit en su cuenta en producción desde la configuración de Payment Methods. Esto puede requerir verificaciones adicionales, que llevan tiempo: no lo deje para el último momento.
Tenga en cuenta los límites de la cuenta. Por defecto, las transacciones SEPA tienen un límite de 10 000 € por transacción y las cuentas nuevas tienen un límite semanal de 10 000 € en toda la cuenta (este límite se incrementa con el tiempo). Si va a procesar más de 10 000 € en las primeras semanas, contacte pronto con el soporte de Stripe para ampliar los límites.
Más allá de las Checkout sessions
La librería incluida es la librería completa de Stripe para Node.js, lo que pone a su disposición toda la API de Stripe. Tanto si quiere validar firmas de webhook, listar productos de su cuenta de Stripe o redirigir a usuarios al Billing Portal, no está limitado a Checkout sessions.
Alternativamente, si vende artículos concretos a sus usuarios (libros, cursos, etc.), considere Payment Links de Stripe. Le permite especificar los detalles del producto y obtener una URL alojada por Stripe que puede compartir.