Commerce License

Proporciona un framework para vender acceso a recursos del sitio, como roles, a través de productos de Commerce.

commerce_license
2,613 sites
65
drupal.org

Install

Drupal 11, 10, 9 v3.0.2
composer require 'drupal/commerce_license:^3.0'
Drupal 8 v8.x-2.0
composer require 'drupal/commerce_license:8.x-2.0'

Overview

Commerce License permite la creación de productos que venden acceso a algún aspecto del sitio. Esto podría ser un rol, la publicación de un nodo, o cualquier otro tipo de acceso controlado por plugins de tipo de licencia personalizados.

Cuando se compra un producto, se crea una entidad License para el usuario. La naturaleza de lo que otorga una entidad License es manejada por plugins de tipo de licencia, con cada entidad License asociada a un plugin de tipo de licencia. Las variaciones de producto que venden una licencia tienen un valor de campo de plugin de tipo de licencia configurado que actúa como plantilla para crear la licencia cuando un usuario compra esa variación de producto.

El módulo proporciona una gestión integral del flujo de trabajo para licencias, incluyendo estados como nuevo, pendiente, activo, suspendido, expirado, revocado y cancelado. Se integra con Commerce Checkout para asegurar que solo los usuarios autenticados puedan comprar licencias, y opcionalmente se integra con Commerce Recurring para renovaciones de licencias basadas en suscripción.

Features

  • Tipo de entidad License con estados de flujo de trabajo configurables (new, pending, active, renewal_in_progress, suspended, expired, revoked, canceled, failed)
  • Plugin de tipo de licencia de rol que otorga/revoca roles de usuario cuando las licencias son activadas/desactivadas
  • Sistema flexible de expiración de licencias con plugins de período Unlimited, Rolling Interval y Fixed Reference Date Interval
  • Entity traits para variaciones de producto ('Provides a license') y order items ('Provides an order item type for use with licenses')
  • Activación automática de licencias al pagar el pedido o al realizar el pedido (configurable por tipo de variación de producto)
  • Soporte de renovación de licencias que permite a los clientes recomprar antes de la expiración dentro de una ventana configurable
  • Expiración automática de licencias basada en cron con integración de Advanced Queue para procesamiento confiable
  • Notificaciones por correo electrónico enviadas a los usuarios cuando sus licencias expiran
  • Panel de control de licencias que proporciona un informe de estado de los requisitos de configuración y validación
  • Interfaz de administración basada en Views para gestionar todas las licencias con filtrado y operaciones masivas
  • Integración con Commerce Log para rastrear cambios de estado de licencias
  • Integración opcional con Commerce Recurring para licencias basadas en suscripción que se renuevan automáticamente
  • Verificación de derechos existentes para prevenir que los usuarios compren licencias que ya tienen
  • Protección de roles otorgados en formularios de edición de usuario para prevenir la eliminación manual de roles licenciados

Use Cases

Sitio de Membresía con Acceso Basado en Roles

Crea un sitio de membresía donde los usuarios compran acceso a contenido premium. Configura un rol 'Miembro Premium' con los permisos apropiados, crea una variación de producto con el trait de licencia que otorga este rol, establece un período de expiración (ej., intervalo rotativo de 1 año), y cuando los usuarios compren el producto, recibirán automáticamente el rol por el período configurado. El rol se elimina automáticamente cuando la licencia expira.

Ventas de Licencias de Software

Vende licencias de software con tiempo limitado donde la licencia otorga un rol que proporciona acceso a áreas de descarga o soporte. Usa la expiración de intervalo rotativo para proporcionar licencias válidas por un período establecido desde la compra. Los clientes reciben notificaciones por correo electrónico cuando las licencias expiran y pueden recomprar para renovar.

Acceso Basado en Suscripción con Commerce Recurring

Crea productos de suscripción recurrente donde las licencias se renuevan automáticamente con el pago. Configura la variación de producto con ambos traits de licencia y suscripción, establece la expiración de licencia en 'Unlimited', y elige un calendario de facturación. La suscripción maneja el pago y la renovación, mientras que la licencia maneja el acceso. Cuando una suscripción se cancela, la licencia se cancela automáticamente.

Membresía Anual con Fecha de Renovación Fija

Implementa membresías que todas expiran en la misma fecha (ej., 31 de diciembre) independientemente de cuándo se compraron. Usa el tipo de expiración 'Interval based on reference date' con una fecha de referencia del 1 de enero y un intervalo de 1 año. Todas las licencias expiran al final del año, creando períodos de renovación sincronizados.

Ventana de Renovación Anticipada

Permite a los clientes renovar sus licencias antes de la expiración. Configura el tipo de variación de producto con 'Allow renewal before expiration' habilitado y establece la ventana de renovación (ej., 30 días). Los clientes con licencias activas dentro de la ventana de renovación pueden recomprar para extender su licencia; su fecha de expiración se extiende desde la expiración actual en lugar de desde la fecha de renovación.

Tips

  • Usa el Panel de Control de Licencias en /admin/commerce/config/licenses/dashboard para validar toda tu cadena de configuración de licencias desde el flujo de checkout hasta los productos.
  • Para pruebas, crea un flujo de checkout simple con pasos mínimos pero asegúrate de que el checkout de invitados esté deshabilitado.
  • Cuando uses Commerce Recurring para suscripciones, siempre establece la expiración de la licencia en 'Unlimited' ya que la suscripción controla el ciclo de vida.
  • El tipo de licencia Role protege los roles otorgados en formularios de edición de usuario, previniendo la eliminación accidental de roles licenciados por administradores.
  • Las transiciones de estado de licencia se registran en Commerce Log cuando está habilitado, proporcionando una pista de auditoría de cambios de licencia.
  • Se pueden crear tipos de licencia personalizados implementando LicenseTypeInterface - útil para otorgar acceso a funcionalidad personalizada más allá de roles.
  • La plantilla de correo electrónico de expiración (commerce-license-expire.html.twig) puede ser sobrescrita en tu theme para personalizar los correos de notificación.

Technical Details

Admin Pages 7
Licencias /admin/commerce/licenses

Ver y gestionar todas las licencias en el sistema. Proporciona una tabla filtrable que lista todas las licencias con columnas para ID, Etiqueta, Tipo de Licencia, Propietario, Estado, fecha de Otorgamiento, fecha de Expiración y fecha de Actualización. Soporta operaciones masivas incluyendo eliminación.

Licencias /admin/commerce/config/licenses

Sección de configuración de licencias que proporciona acceso al Panel de Control de Licencias y gestión de Tipos de Licencia.

Panel de control de licencias /admin/commerce/config/licenses/dashboard

Muestra un informe de estado completo que valida toda la cadena de configuración de licencias. Muestra el estado de flujos de checkout, tipos de pedido, tipos de order item, tipos de variación de producto, tipos de producto y productos para asegurar que todos los componentes estén correctamente configurados para vender licencias.

Tipos de licencia /admin/commerce/config/licenses/license-types

Gestionar campos, formulario y configuración de visualización para entidades de licencia por bundle de tipo de licencia.

Ver Licencia /admin/commerce/licenses/{commerce_license}

Ver una entidad de licencia individual mostrando todos los campos incluyendo tipo, propietario, estado, variación de producto licenciada, tipo de expiración, marcas de tiempo de creación/otorgamiento/renovación/expiración, y registro de actividad.

Editar Licencia /admin/commerce/licenses/{commerce_license}/edit

Formulario de edición para entidades de licencia. Muestra información del propietario, estado de la licencia con transiciones disponibles, marcas de tiempo (expiración, renovación, otorgamiento, modificación, creación), y campos específicos del tipo de licencia.

Agregar licencia /admin/commerce/licenses/add/{type}

Formulario administrativo para crear manualmente una nueva licencia. Esto omite el flujo normal de compra de producto y solo debe ser usado por administradores que entiendan las implicaciones.

Permissions 9
Administrar Commerce License

Acceso administrativo completo a la configuración y entidades de Commerce License

Acceder a vista general de licencias

Ver la página de listado de licencias (acceso restringido)

Crear licencia

Crear licencias en modo administrativo, omitiendo la compra de un producto

Ver licencia

Ver entidades de licencia

Ver licencia propia

Ver entidades de licencia propias

Actualizar licencia

Editar entidades de licencia

Actualizar licencia propia

Editar entidades de licencia propias

Eliminar licencia

Eliminar entidades de licencia

Eliminar licencia propia

Eliminar entidades de licencia propias

Hooks 2
hook_commerce_license_type_info_alter

Modificar la lista de plugins de Tipo de Licencia disponibles. Puede usarse para eliminar plugins o cambiar etiquetas de plugins.

hook_commerce_license_period_info_alter

Modificar la lista de plugins de Período de Licencia disponibles. Puede usarse para eliminar plugins o cambiar etiquetas de plugins.

Troubleshooting 6
Las licencias no se están creando cuando se realizan pedidos

Verifica que el flujo de checkout no permita checkout de invitados (el panel de Login debe tener 'Guest checkout: Not allowed'). Comprueba que el tipo de order item tenga el trait 'Provides an order item type for use with licenses'. Usa el Panel de Control de Licencias en /admin/commerce/config/licenses/dashboard para validar tu configuración.

Las licencias no se activan después del pago

Asegúrate de que la configuración 'Activate license when order is placed' de la variación de producto coincida con tu comportamiento esperado. Si usas pasarelas de pago asíncronas, las licencias se activan en la confirmación del pago vía el evento ORDER_PAID.

Los usuarios pueden comprar productos para los cuales ya tienen una licencia activa

El verificador de derechos existentes debería prevenir esto. Verifica que el plugin de tipo de licencia implemente ExistingRightsFromConfigurationCheckingInterface y que el método checkUserHasExistingRights() devuelva resultados apropiados.

Las licencias no están expirando automáticamente

Asegúrate de que cron se esté ejecutando regularmente. Comprueba que el módulo Advanced Queue esté correctamente configurado y que la cola 'commerce_license' se esté procesando. El servicio commerce_license.cron encola trabajos de expiración durante cron, y Advanced Queue los procesa.

El rol no se está otorgando/revocando cuando cambia el estado de la licencia

Verifica que la licencia tenga el rol correcto configurado en su campo license_role. Comprueba que la entidad de usuario se esté guardando correctamente por los métodos grantLicense() y revokeLicense() del plugin de tipo de licencia Role.

Las licencias de suscripción no funcionan correctamente

Asegúrate de que la expiración de la licencia esté establecida en 'Unlimited' cuando uses suscripciones. La suscripción controla el ciclo de vida; la licencia no debe expirar independientemente. Verifica que el plugin LicenseSubscriptionType esté manejando los eventos de suscripción.

Security Notes 5
  • El permiso 'administer commerce_license' está marcado como 'restrict access' y solo debe otorgarse a administradores de confianza.
  • El permiso 'access commerce_license overview' también está restringido ya que proporciona acceso para ver todas las licencias en el sistema.
  • Los plugins de tipo de licencia pueden escalar privilegios de usuario (ej., otorgar roles administrativos). El módulo valida que solo los tipos de licencia permitidos puedan ser seleccionados en variaciones de producto.
  • Los formularios de administración para crear/editar licencias directamente solo deben ser usados por desarrolladores que entiendan las implicaciones - cambiar valores puede romper la consistencia del estado de la licencia.
  • El checkout de invitados debe estar deshabilitado para flujos de checkout que venden licencias para asegurar que las licencias siempre estén asociadas con usuarios autenticados.