Tienda online con Drupal Commerce y módulos clave
Una distribuidora de vinos y la trampa del plugin mágico
Una distribuidora de vinos catalana llegó con un problema concreto: vendían a 4.200 hosteleros, cada uno con su tarifa y su forma de pago. Habían montado el ecommerce sobre un CMS popular con un plugin de tienda. A los seis meses, el plugin chocaba con el módulo B2B, la facturación electrónica peleaba con el stock multialmacén y cada actualización rompía algo. La directora de operaciones lo resumió: "Tenemos una tienda Frankenstein y un desarrollador en nómina solo para que no se caiga".
Migraron a Drupal Commerce. No por estética ni por estrellas en GitHub: porque está pensado desde el día uno como framework de comercio, no como parche encima de un blog. Esa diferencia, que en una demo se nota poco, pesa los seis meses siguientes.
Este artículo recorre cómo montar una tienda online con Drupal Commerce y módulos contribuidos sin caer en aquellos errores.
Por qué Commerce 2.x cambia las reglas
Drupal Commerce nació como framework, no como añadido. En vez de imponer un modelo rígido, entrega componentes que ensamblas según el caso. Esa flexibilidad justifica el coste de aprendizaje cuando el catálogo tiene lógica fuera de lo trivial, el checkout debe doblarse a procesos B2B o la tienda convive con un portal editorial.
La versión 2.x, sobre Drupal 9/10 y Symfony, no evoluciona Commerce 1: lo reescribe entero. Entidades configurables, plugins de pago desacoplados, motor de promociones por condiciones y ofertas. El stack resultante es testeable, extensible y razonablemente moderno para los estándares PHP de 2026.
La arquitectura, pieza por pieza
Productos y variaciones: separar para no duplicar
El modelo de datos separa "producto" de "variación". El producto guarda lo común (descripción, imágenes de marca, categoría). Cada variación es una combinación concreta de atributos con su SKU y su precio.
Volvamos a la distribuidora. Un tinto reserva tiene una sola ficha pero seis variaciones: botella de 75 cl, magnum, caja de 6, caja de 12, formato regalo y formato hostelería. Cada una lleva su stock, su tarifa y su EAN. Sin esa separación, son seis fichas duplicadas rezando para que las descripciones no se desincronicen.
Para configurar atributos, el camino es directo:
- Crea los atributos en
/admin/commerce/product-attributes(formato, añada, denominación de origen...). - Define los valores de cada atributo.
- Asócialos al tipo de variación correspondiente.
- Al crear el producto, genera las variaciones que necesites en lote.
Tipos de producto: granularidad sin sobrecarga
Commerce admite varios tipos de producto, cada uno con sus campos. Una tienda que combina vino y catas presenciales define un tipo "Vino" con atributos de formato y añada, y un tipo "Cata" con campos de fecha, aforo y lugar. El editor que sube una cata no ve campos de bodega. Menos formularios kilométricos, menos errores.
Stores: varias tiendas, una instalación
El concepto de Store permite que una sola instalación aloje tiendas distintas, cada una con su moneda, zona fiscal y envío. Para grupos con varias marcas o para quien vende en España, Portugal y Francia con tres webs y un solo backoffice, esta arquitectura nativa ahorra mantener instancias separadas.
Pasarelas de pago: lo que tu cliente espera ver
El sistema de pagos funciona con plugins. Cada pasarela implementa una interfaz común y se combinan en el mismo checkout. La pregunta no es técnica, es comercial: ¿qué método espera tu cliente al llegar al paso de pagar?
Stripe y el flujo SCA
commerce_stripe soporta Payment Intents y el flujo SCA, obligatorio en Europa desde PSD2. Tokeniza la tarjeta en el navegador vía Stripe.js, así los datos sensibles nunca pasan por tu servidor. PCI-DSS te lo agradecerá.
Configuración mínima:
- Instala con Composer:
composer require drupal/commerce_stripe. - En
/admin/commerce/config/payment-gateways, crea una pasarela de tipo Stripe. - Introduce tus claves API de test y producción.
- Apunta el webhook de Stripe a
/payment/notify/tu_pasarela.
PayPal: el botón que todavía convierte
commerce_paypal cubre PayPal Checkout. Soporta tarjeta vía PayPal, Venmo y financiación a plazos. Gestiona captura diferida: autorizas al comprar pero solo cobras al expedir, lo que reduce devoluciones por cancelaciones de última hora.
Redsys: el detalle que distingue una tienda española
El dato que mueve la conversión en España: la mayoría de bancos operan Redsys, y commerce_redsys la integra con firma SHA-256 y soporte para los entornos de pruebas y producción de cada entidad. Si vendes en España y solo ofreces Stripe y PayPal, dejas dinero sobre la mesa. Muchos compradores completan el pago cuando ven el TPV virtual de su banco; abandonan si no lo encuentran.
Envíos: tarifas, paquetes y la promesa del envío gratis
commerce_shipping añade la capa logística y se apoya en tres elementos:
- Tipos de envío: campos del paquete (peso, dimensiones).
- Métodos de envío: reglas de tarifa. Planas, por peso o vía API externa.
- Paquetes (shipments): agrupaciones de productos dentro del pedido.
Para tarifas en tiempo real, commerce_ups, commerce_fedex o commerce_correos consultan la API del transportista durante el checkout. Detalle nada menor en productos voluminosos: cobrar 5 euros fijos cuando el transportista te cobra 14 te come el margen en dos pedidos.
El patrón de envío gratuito a partir de un importe (60 euros, 75 euros, lo que dicten tus números) se configura como promoción con condición de importe mínimo y descuento del 100% sobre el envío. Tres clics, y el ticket medio sube.
IVA y fiscalidad europea sin sorpresas
El sistema de impuestos cubre IVA europeo, sales tax y esquemas personalizados. Para configurar el IVA español:
- En
/admin/commerce/config/tax-types, crea un tipo "IVA España". - Selecciona el plugin "European Union VAT", incluido de serie. Ya conoce los tipos de cada país de la UE.
- Asigna zonas y tipos por producto: general (21%), reducido (10%), superreducido (4%).
Si vendes a otros países de la UE, aplica las reglas de lugar de prestación según la directiva europea, con los umbrales del esquema OSS. Traducido: no parcheas cálculos cada vez que un cliente alemán supera el umbral.
Promociones y cupones: el motor más infravalorado
El sistema de promociones es uno de los puntos fuertes de Commerce 2.x. Funciona con condiciones (quién se beneficia) y ofertas (qué descuento se aplica). Lo que parece un detalle marketinero termina siendo una palanca de margen.
Tipos de oferta: porcentaje sobre pedido o productos, cantidad fija, producto de regalo ("Compra 2, lleva 3") y descuento en envío.
Condiciones combinables: importe mínimo, productos o categorías específicas, rol de usuario (mayoristas, recurrentes), límite de usos totales o por cliente, rango de fechas.
Los cupones se asocian a promociones. Un cupón es un código que despierta una promoción dormida. Se generan en lote desde el backoffice, lo que abre la puerta a códigos únicos por cliente, integraciones con email marketing y trazabilidad real de cada euro descontado.
Los módulos contribuidos que justifican la inversión
El catálogo de módulos para Commerce 2.x ha madurado. Estos aparecen una y otra vez en proyectos reales:
Commerce Stock
Inventario por variación. Bloquea la venta al llegar a cero y muestra avisos de disponibilidad limitada. Para almacenes distribuidos define varias ubicaciones, clave cuando una tienda atiende pedidos desde tres centros logísticos.
Commerce Cart Flyout
Sustituye la página de carrito por un panel lateral que se despliega al añadir productos. El cliente no abandona la ficha, sigue navegando y el ticket medio sube. En catálogos amplios, el delta de conversión es medible.
Commerce Wishlist
Lista de deseos para usuarios registrados. Notifica cuando un producto guardado entra en promoción. Útil en moda, decoración y categorías de compra emocional aplazada.
Commerce Recurring
Suscripciones y pagos recurrentes. Gestiona ciclos de facturación, renovaciones y bajas. Se integra con pasarelas que tokenizan tarjeta: Stripe, principalmente.
Search API con Facets
No es exclusivo de Commerce, pero la dupla Search API + Facets cambia la experiencia de catálogo. Filtros por precio, marca, talla o cualquier atributo, con contadores en tiempo real sobre Solr o Elasticsearch. Pasados los 5.000 SKUs, deja de ser un lujo.
Theming: Twig y la libertad real de diseño
Commerce 2.x renderiza todo (productos, carrito, checkout) con plantillas Twig. Cualquier aspecto visual se sobrescribe en tu tema, sin tocar el módulo.
Plantillas que conviene identificar desde el primer sprint:
commerce-product.html.twig: la ficha de producto.commerce-product-variation.html.twig: el bloque de cada variación.commerce-order-receipt.html.twig: el email de confirmación.commerce-checkout-flow.html.twig: los pasos del checkout.
Un enfoque que funciona: partir de un tema base como Olivero o de uno contrib como Flavor, y sobrescribir solo las plantillas que lo pidan. Las actualizaciones siguen entrando limpias y el mantenimiento no se dispara.
Rendimiento: que el tráfico no tire la tienda abajo
Caché por etiquetas
Drupal 10 trae caché por tags y Commerce la usa de forma nativa. Cuando un precio cambia o un producto se agota, solo se invalida lo afectado, no el sitio entero. La diferencia entre un Black Friday a 200 ms y la web caída a las 12 del mediodía.
Para catálogos grandes, activa Internal Page Cache para anónimos y BigPipe para autenticados. BigPipe entrega primero el esqueleto y rellena los bloques dinámicos (mini-carrito, precios personalizados) después, mejorando el First Contentful Paint.
Catálogos grandes, backend externo
Pasados los 10.000 productos, mueve la búsqueda a Solr o Elasticsearch. Search API indexa productos y variaciones; las facetas de precio calculan rangos sobre el índice, no contra MySQL. El servidor de base de datos te dará las gracias.
Cron, colas y CDN
Actualizaciones masivas de precios, importaciones de stock desde el ERP, informes: todo va por el sistema de colas de Drupal. Configura workers de cron dedicados para que no compitan con peticiones de checkout. Un pedido perdido por un cron mal afinado cuesta más que el servidor.
Para imágenes, sirve desde un CDN. El módulo CDN reescribe URLs estáticas automáticamente; combínalo con Responsive Image para entregar el tamaño adecuado a cada dispositivo. En móvil, cada kilobyte ahorrado se nota.
De aquella tienda Frankenstein a un ecommerce que escala
La distribuidora del principio lleva tres años con su Drupal Commerce. Añadieron un portal B2B con tarifas personalizadas por cliente, integraron el ERP y pasaron de un desarrollador apagando fuegos a un equipo que dedica el tiempo a construir. No es anécdota sentimental: la decisión de plataforma se paga (o se cobra) en los meses siguientes al lanzamiento, no en la demo.
Montar una tienda con Drupal Commerce y módulos contribuidos exige planificación. A cambio, da control real sobre cada capa del negocio: productos, pasarelas, fiscalidad, promociones, theming y rendimiento. Sin cajas negras y sin pagar por cada extensión que se le ocurra al fabricante.
Si necesitas ayuda para diseñar la arquitectura de tu tienda con Drupal Commerce o quieres que un equipo especializado se encargue del desarrollo, contacta con Tangram Consulting y estudiamos tu caso.