Arquitectura de Integración de Pagos: Tarjetas, Carteras Digitales, Facturas y Estado de Pedidos

Construcción de una arquitectura unificada de integración de pagos que maneja tarjetas, carteras digitales, facturas y seguimiento del estado de pedidos. Perspectivas técnicas y compensaciones del mundo real.

DFEquipo de DigiForgeJul 19, 20268 min de lectura
Representación abstracta de la arquitectura de integración de pagos con líneas brillantes que conectan métodos de pago sobre un fondo oscuro.

La integración de pagos rara vez es tan simple como agregar un solo SDK. En nuestros desarrollos en DigiForge, hemos visto proyectos inflarse porque los equipos subestimaron la complejidad de manejar múltiples métodos de pago — tarjetas, billeteras digitales, pagos por factura — y luego vincularlos todos a un ciclo de vida de pedido. Cada tipo de pago tiene sus propias peculiaridades, y unirlos sin una arquitectura coherente conduce a código frágil y una conciliación dolorosa. Este artículo desglosa cómo se ve una capa de integración de pagos unificada, basándose tanto en patrones establecidos como en desarrollos más recientes, como las tarjetas respaldadas por stablecoins.

Tarjetas: Tokenización, Tokens de Red y el Auge de las Tarjetas Respaldadas por Stablecoins

Los pagos con tarjeta siguen siendo la columna vertebral del comercio electrónico y de muchos negocios SaaS. La regla de oro es nunca manejar números de tarjeta en bruto. La tokenización a través de una pasarela compatible con PCI (Stripe, Braintree, Adyen) es un requisito básico. Pero hay una capa más sutil: los tokens de red. Estos son tokens específicos del dispositivo y de un solo uso emitidos por las propias redes de tarjetas, que ofrecen mejores tasas de autorización y reducción de fraude. Por lo general, recomendamos a los clientes adoptar la tokenización de red desde el principio, especialmente si procesan pagos recurrentes, porque la vida útil de los tokens es más larga y las actualizaciones son gestionadas por la red.

Una nueva ola es la tarjeta respaldada por stablecoins. A finales de 2025, el volumen de tarjetas cripto había alcanzado una tasa anualizada de 18 mil millones de dólares, creciendo un 106% anual desde 2023 (comunicado de prensa de Wirex/Crossmint). La arquitectura aquí es diferente: en lugar de extraer fondos de una cuenta bancaria o línea de crédito, la tarjeta se nutre de una billetera de stablecoins. Para los desarrolladores, eso implica integrarse con un proveedor de billeteras (como la billetera inteligente de Crossmint) y un emisor de tarjetas (como Wirex). El desafío es el cumplimiento normativo: el comunicado de prensa señala que las fintechs anteriormente tenían que ensamblar por separado la billetera, el emisor y los marcos de cumplimiento. En DigiForge, hemos trabajado en integraciones similares con múltiples proveedores, y hemos descubierto que una capa de abstracción con un modelo de transacciones unificado es esencial. De lo contrario, depurar un pago fallido se convierte en una búsqueda a través de tres paneles de control de proveedores.

Billeteras Digitales: UPI, Google Pay e Integración Alojada vs. Basada en API

Las billeteras digitales no son monolíticas. Google Pay (ahora parte del ecosistema más amplio de Google Payments) opera de manera diferente a las billeteras basadas en UPI de la India, como Paytm, y ambas difieren de las billeteras específicas de aplicaciones. La decisión arquitectónica es si usar un checkout alojado (más simple, menos control) o una integración basada en API (más compleja, mejor experiencia de usuario).

Para billeteras como Google Pay, Apple Pay y PayPal, el patrón común es un botón de billetera que activa una hoja o redirección. La integración se realiza típicamente a través del checkout unificado de la pasarela de pago — el Payment Element de Stripe, por ejemplo, renderiza todas las billeteras automáticamente. Eso está bien para muchos casos, pero nos hemos encontrado con limitaciones cuando se necesita un estilo personalizado o recopilar datos adicionales antes del pago. Una integración más profunda a través del SDK propio de la billetera brinda más control, pero te compromete a mantener rutas de código separadas.

Las billeteras basadas en UPI, como Paytm, operan de manera diferente. UPI (Interfaz Unificada de Pagos) es un sistema de pago instantáneo que permite transferencias directas de banco a banco. Al integrar Paytm como método de pago, el flujo típico es: el usuario selecciona Paytm, el backend genera una solicitud de pago, el usuario autoriza en la aplicación de Paytm y Paytm envía una devolución de llamada. El desafío aquí es la idempotencia: los pagos UPI pueden tener éxito en el lado del banco pero reportar fallo al comerciante debido a tiempos de espera de red. Siempre construimos un trabajo de conciliación que compara nuestro estado de pedido con el estado de transacción de Paytm cada pocos minutos.

Un patrón que hemos encontrado confiable: tratar cada pago con billetera como una confirmación en dos fases. La fase uno crea un pedido pendiente, la fase dos confirma mediante webhook. Nunca marques un pedido como completado solo con una devolución de llamada de redirección.

Facturas: Solicitudes de Pago y Conciliación

Los pagos con facturación — donde una empresa genera una factura y el cliente paga después — presentan un conjunto diferente de problemas. La página de pagos del IRS (irs.gov/payments) es un ejemplo de un sistema de facturación a gran escala: consultas tu saldo (mediante un aviso o cuenta en línea) y luego pagas usando una cuenta bancaria (Direct Pay) o un plan de pagos. La arquitectura debe manejar tanto el ciclo de vida de la factura (emitida, enviada, vencida, pagada) como el ciclo de vida del pago (iniciado, pendiente, liquidado, fallido).

Para SaaS B2B o aplicaciones web personalizadas, a menudo construimos un módulo de facturación que genera PDFs y aloja un portal de pagos. El portal debe aceptar múltiples métodos: tarjeta, billetera o transferencia bancaria. El truco está en vincular el ID de la factura con el ID de la transacción de pago en la pasarela, y luego usar webhooks para actualizar el estado de la factura. Un error común es depender de la función de facturación alojada de la pasarela de pagos, pero perder el control sobre la conciliación. Preferimos almacener nuestros propios registros de facturas y usar la pasarela solo como procesador de pagos.

// Example webhook handler for invoice payment confirmation
app.post('/webhooks/stripe', async (req, res) => {
  const event = req.body;
  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;
    const invoiceId = session.metadata.invoice_id;
    await db.invoices.update({ id: invoiceId }, { status: 'paid' });
  }
  res.json({ received: true });
});

El código anterior es simplista pero ilustra la idea central: mapear el evento de la pasarela a tu propio modelo de dominio. El campo de metadatos es tu salvavidas. Sin él, tendrías que consultar Stripe para emparejar sesiones, lo que añade latencia y complejidad.

Estado del Pedido: Mapeo de Eventos de Pago al Ciclo de Vida

Un pedido puede pasar por muchos estados: pending_payment, payment_received, processing, fulfilled, cancelled. El evento de pago debería ser solo uno de muchos desencadenantes. La decisión arquitectónica clave es si usar una máquina de estados o un campo de estado más simple. Recomendamos firmemente las máquinas de estados para cualquier sistema con más de cuatro estados o con transiciones complejas (por ejemplo, un pedido puede pasar de 'payment_received' a 'processing' a 'shipped', pero también de 'pending_payment' a 'cancelled'). La gema StateMachines de Rails o una máquina de estados finitos personalizada en Node.js funcionan bien.

Los webhooks de las pasarelas de pago deben alimentar directamente la máquina de estados. Por ejemplo, un evento payment_intent.succeeded debería transicionar el pedido de 'pending_payment' a 'payment_received'. Pero hay que protegerse contra condiciones de carrera: si el webhook llega dos veces (la mayoría de las pasarelas garantizan entrega al menos una vez), tu máquina de estados debe ser idempotente, es decir, transicionar desde el mismo estado actual al mismo estado siguiente debe ser una operación nula. Almacenamos un event_id con cada webhook para desduplicar.

La idempotencia no es opcional. Si tu manejador de webhook de pago no es idempotente, eventualmente cobrarás dos veces a un cliente o crearás pedidos fantasma. Probar esto bajo carga normal es difícil; simulamos webhooks retrasados y duplicados en nuestro pipeline de CI.

El estado del pedido también debe exponerse a los clientes. Una página de estado simple (como una barra de progreso) funciona, pero solo si las transiciones subyacentes son precisas. Hemos visto sistemas donde el frontend consulta una API que almacena en caché el estado del pedido, pero la caché puede estar desactualizada si el webhook aún no se ha procesado. La solución es usar un canal en tiempo real (WebSocket o Server-Sent Events) que envíe los cambios de estado, para que la interfaz se actualice inmediatamente cuando se procese el webhook. Para proyectos más simples, una caché de corta duración con un TTL de 30 segundos es aceptable.

La opinión de DigiForge: Construye una Capa de Integración de Pagos, no un Lío

Tras integrar docenas de métodos de pago en varios proyectos, nuestro consejo es abstraer el procesamiento de pagos detrás de una capa de servicio ligera. Esta capa debe normalizar los eventos de cada proveedor de pagos en un formato común, gestionar reintentos y mantener un registro de transacciones. El sistema de pedidos nunca habla directamente con Stripe, Paytm o cualquier emisor: habla con tu servicio de pagos. Esto facilita mucho añadir nuevos métodos de pago (por ejemplo, una tarjeta con stablecoin) sin tocar la lógica de pedidos.

También recomendamos tratar las facturas como un dominio separado, no solo como un estado en un pedido. Una factura tiene su propio ciclo de vida (borrador, enviada, vencida, pagada) y puede asociarse con múltiples pedidos (por ejemplo, una suscripción mensual). Del mismo modo, el estado del pedido debe ser gestionado por una máquina de estados que maneje todas las transiciones posibles, incluidos pagos parciales, reembolsos y contracargos.

Si estás construyendo una integración de pagos desde cero, comienza por mapear todos los métodos de pago que planeas soportar e identifica los eventos comunes que emiten. Luego diseña tu máquina de estados y el manejador de webhooks. Si logras eso, el resto es fontanería. Si deseas una segunda opinión sobre tu arquitectura, el equipo de DigiForge ha visto suficientes casos límite como para ahorrarte algunas noches de desvelo.

#integracion-de-pagos#tarjetas#carteras-digitales#facturacion#estado-de-pedidos#desarrollo-web#fintech
DF

Equipo de DigiForge

El equipo de ingeniería de DigiForge: creando sitios web modernos, modules y automatización, y escribiendo sobre el arte de lanzar productos web rápidos y duraderos.

Hablemos

¿Tienes un proyecto
en mente?

Cuéntanos qué estás creando: diseñaremos un plan claro y el enfoque adecuado para tu producto.

Empieza tu proyecto