2026-06-03 — Checkout propio (headless) en cdc-landings

Se reemplazó el checkout nativo de WooCommerce (con sus redirecciones y “parches” sobre WordPress) por un checkout propio dentro de cdc-landings. El comprador ya no sale del sitio: completa los datos del participante, elige cómo pagar y ve la confirmación, todo en la misma aplicación. El backend (plugin cdc-api) expone los endpoints necesarios y sigue siendo la única fuente de verdad de órdenes, pagos y estados.

Por qué

Cada ajuste del checkout antes obligaba a “hackear” WordPress y a depender de redirecciones a la página de éxito. Con el checkout propio el frontend es nuestro, se evita la redirección y se ordenan los nombres de los datos (comprador vs. participante).

Backend (API y plugin)

  • Nuevo endpoint de checkout (POST /cdc/v1/checkout): crea la orden, aplica el cupón como descuento nativo de WooCommerce y ejecuta el cobro. El comprador es el usuario logueado; los datos del participante se guardan en campos propios attendee_* (separados de los datos de facturación del comprador), incluido el país de emisión del documento (attendee_national_id_country).
  • Pago con tarjeta vía SDK de Debi. La tarjeta se tokeniza en el navegador (nunca pasa por nuestros servidores) y el cobro se hace con el SDK de PHP de Debi vendido dentro del plugin, con cliente HTTP propio sobre wp_remote_request (sin dependencias extra). Vencimiento y código de seguridad son obligatorios.
  • Correlación de estados respetada (según el Modelo del dominio): transferencia → on-hold, efectivo → processing, tarjeta → pending hasta que el cobro confirma. Una orden cubierta en su totalidad por un cupón queda completed, sin medio de pago, y de sólo lectura en la administración.
  • Sugerencia y vista previa de cupones. El checkout ofrece los cupones que el comprador tiene disponibles para la actividad y, al aplicar uno, calcula la vista previa del descuento sin crear órdenes de prueba ni consumir cupones de un solo uso.
  • Guarda de duplicados más flexible. Un mismo correo no puede volver a inscribirse si ya tiene una inscripción pagada/activa, pero los intentos abandonados (pending, cancelados, fallidos) sí permiten reintentar el pago. El mensaje de aviso se muestra en castellano sencillo.
  • Parámetros de checkout configurables respetados. El checkout propio toma del panel los textos y opciones (título de “Apellido”, placeholder de ciudad de procedencia, comentarios, opciones de régimen alimentario y si se pide la fecha de nacimiento).
  • Página de agradecimiento por API (GET /cdc/v1/public/orders/{id}/confirmation, protegida por clave de la orden): devuelve el detalle con el total formateado con su moneda (p. ej. ARS 12.000,00) y, para transferencias, los datos bancarios + instructivo del medio de pago.
  • Un solo mail de confirmación con marca. Tras una compra exitosa, el plugin avisa a cdc-landings (webhook) y desde ahí se envía un único mail con diseño propio al comprador y al participante, con todos los datos de la página de agradecimiento (incluidos los datos para transferir). Se deshabilitaron todos los mails transaccionales de WooCommerce para que WordPress no mande correos en paralelo.
  • Se quitó el campo “DNI/CUIL para factura”. El comprobante se hace con el documento que ya se pide en la inscripción; se eliminó el campo del checkout y de la configuración de placeholders.

Frontend (cdc-landings)

  • Nueva página de checkout propia. Reúne los datos del participante y el medio de pago en una sola pantalla. El botón “Inscribirme” del producto lleva siempre al checkout interno.
  • Prellenado desde el perfil. Nombre, apellido y correo, y también el tipo y número de documento y la fecha de nacimiento (cuando el sitio pide ese campo) se completan con los datos guardados del usuario.
  • Validación de documento por país, igual que en el resto del sitio (se pide país de emisión y se valida según el país). Los errores en rojo se limpian al corregir el campo.
  • Cupones al estilo WooCommerce, arriba del formulario: sugerencias aplicables con un clic e ingreso manual de código. Al aplicar un cupón se ve el descuento reflejado en el total y, si la inscripción queda en $0, se ocultan los métodos de pago.
  • Ausencias y régimen alimentario del participante vuelven a estar en el checkout (omisiones por día/comida acotadas a las fechas de la actividad).
  • Página de agradecimiento renovada: dice “¡Gracias por tu inscripción!”, muestra el total con su moneda, los datos para transferir cuando corresponde, y deja sólo el acceso directo a “Ver mis inscripciones”.
  • Panel personal. En el detalle de la orden, si está en espera de transferencia, se muestran los datos bancarios para pagar. En “Mis Datos”, el aviso de validación en rojo se limpia al corregir el documento.

Documentación (este sitio)

  • Se publicó esta entrada de Cambios.
  • Se ajustó Parámetros de checkout para reflejar que una compra por transferencia queda en on-hold a la espera del pago.

Pendientes / a tener en cuenta

El checkout nativo de WooCommerce ya no se usa en el flujo del comprador. Quedan, como red de seguridad, algunos ayudantes del checkout nativo (redirección de la página de gracias y guarda de duplicados sobre el checkout viejo) que pueden retirarse una vez confirmado que ningún flujo los necesita.