Devolución fácil - sin preguntas
Instalar, configurar y beneficiarse
Prioridad en ayuda y satisfacción
Revolución Digital
Vende productos digitales — claves de licencia + registro de dominio + descargas seguras
Sell digital products professionally with Digital Revolution — an advanced module for managing software licenses, domain-restricted downloads, watermarked files, and support subscriptions. Perfect for selling PrestaShop modules, themes, software, digital media, or any downloadable product that needs licensing and access control.
Go beyond PrestaShop's basic virtual product support with per-domain licensing, automatic license key generation, download watermarking, expiration management, and tiered support plans with renewal tracking.
Key Benefits
- License Management: Generate and validate license keys with domain restrictions.
- Watermarked Downloads: Automatically watermark files with customer-specific identifiers.
- Support Subscriptions: Tiered support plans with expiration and renewal management.
- Domain Registration: Customers register domains for license activation and validation.
- Download Control: Expiring links, download limits, and version management.
Professional Digital Product Sales
PrestaShop's built-in virtual product support is minimal — attach a file, set a download limit, done. If you sell software, modules, themes, or any digital product that requires licensing, Digital Revolution gives you the tools you need.
License Key System
Automatically generate unique license keys on purchase. Validate keys against registered domains via API. Set maximum domain activations per license. Revoke or transfer licenses from the admin panel.
Domain Registration
Customers register the domain(s) where they'll use your product. The license validation API checks the requesting domain against registered domains. This prevents unauthorized use while giving legitimate customers a smooth experience.
Watermarked Downloads
Automatically embed customer-specific identifiers into downloadable files. If a file appears on a piracy site, you can trace it back to the source. Supports PDF watermarking and ZIP file marking.
Support Subscriptions
Offer tiered support plans (e.g., 3 months free, 6/9/12 month paid options). Track expiration dates, send renewal reminders, and manage support access based on active subscription status.
Version Management
- Upload multiple versions of a product
- Customers always get the latest version
- Changelog management per version
- Selective access based on license tier
- Automatic update notifications
¿Por qué este módulo es único?
- License key generation with domain registration and validation API.
- Watermarked downloads that embed customer information in delivered files.
- Support subscription management with configurable duration and pricing.
- Version management with release channels (stable, beta, development).
Casos de uso
- Software developers selling modules, plugins, or themes with license protection.
- Digital content creators selling downloadable assets with watermark protection.
- SaaS-like businesses selling software with ongoing support subscriptions.
-
Referenciamprdigitalrevolution
-
En stock4 Artículos
-
Compatibilidad PrestaShopPS 1.7 – 9.x
-
Modelo de precioCompra única
-
Tipo de móduloFront & Back-office
-
Relevante para RGPDNo
-
Objetivo comercialOptimizar operaciones
-
Cuenta externa necesariaNo
-
Complejidad del móduloSolución completa
-
Etapa del recorrido del clienteGestionar la tienda
-
Funciona con plataformaSin plataforma externa
MPR Digital Products
Un modulo PrestaShop para la venta y distribucion de productos digitales (módulos, temas, complementos) con gestión de licencias, vinculacion de dominios, descargas personalizadas con marca de agua y actualizaciones automáticas con un clic.
Funciones
Gestión de licencias
- Tipos de licencia: Licencias perpetuas, por suscripcion o de prueba
- Vinculacion de dominio: Limitar instalaciónes por licencia (ej. 1 dominio por licencia)
- Detección de dominios dev: localhost, staging y dominios dev no cuentan en los limites
- Seguimiento del estado de licencia: Estados activo, suspendido, expirado, revocado
- Periodo de gracia: Periodo de gracia configurable para validaciónes fallidas (por defecto: 7 dias)
Distribucion de productos
- Gestión de versiones: Seguimiento de releases con números de version, changelogs e información de compatibilidad
- Soporte de ramas: Ramas stable, beta, dev, legacy por producto
- Descargas personalizadas: Cada descarga se marca con información de licencia para el seguimiento de la pirateria
- Tokens seguros: Tokens de descarga con tiempo limitado previenen el intercambio no autorizado
Portal del cliente
- Mis licencias: Los clientes visualizan y gestiónan sus licencias en
/licenses - Registro de dominio: Registrar dominios directamente desde el portal
- Historial de descargas: Seguimiento de todas las descargas por licencia
- Estado del soporte: Ver la expiracion del soporte y opciones de renovacion
Sistema de auto-update
- Actualizaciones con un clic: Los módulos pueden verificar e instalar actualizaciones automáticamente
- Verificaciónes previas: Valida espacio en disco, permisos y extensiones PHP antes de la actualizacion
- Atomic Swap: El modulo antiguo se respalda antes de instalar la nueva version
- Soporte de rollback: Restauracion automática si la actualizacion falla
- Scripts de upgrade: Ejecutar migraciónes de base de datos entre versiones
Pre-pedido / Proximamente
- Productos no pedibles: Marcar productos como "proximamente" con fecha de lanzamiento prevista
- Notificaciones de lanzamiento: Los clientes pueden suscribirse para ser notificados cuando el producto este disponible
- Avisos en el carrito: Mostrar información cuando productos no pedibles estan en el carrito
Sistema de precios
- Periodos de licencia: Ofrecer diferentes duraciones de licencia (1 mes, 1 ano, de por vida, etc.)
- Periodos de soporte: Precios separados para la duracion del soporte
- Variantes de producto: Combinar licencia + soporte + servicios en paquetes
- Precios dinámicos: Precios específicos por carrito mediante el sistema SpecificPrice de PrestaShop
Servicios y complementos
- Servicios incluidos: Instalación, personalización, soporte prioritario
- Precios por servicio: Cada servicio tiene su propio precio anadido al total
Suscripciones de soporte (Stripe)
- Pagos recurrentes: Integración con Stripe para facturacion por suscripcion
- Extensiones de soporte: Los clientes pueden extender el soporte despues de la expiracion
- Limite maximo de soporte: Limite por producto sobre cuanto tiempo de soporte se puede comprar por adelantado (ej. max 3 anos)
- Manejo de webhooks: Actualizaciones automáticas de estado desde Stripe
Análisis y registro
- Logs de descarga: Seguimiento de cada descarga con IP, user agent, ID de marca de agua
- Logs de API: Todas las solicitudes de validación de licencia se registran
- Historial de validación de tienda: Seguimiento de intentos de validación de dominio y resultados
Instalación
- Subir la carpeta
mprdigitalproductsa/modules/ - Install from PrestaShop back office → Modules
- Configurar las claves API de Stripe en Ajustes (para soporte por suscripcion)
- Limpiar la cache de PrestaShop
Requisitos
- PrestaShop 1.7.0 - 8.x
- PHP 7.4+
- Extension ZipArchive (para descargas)
Estructura del Back Office
El modulo agrega un menu Digital Products bajo VENDER con:
Digital Products
├── Dashboard
├── Catalog
│ ├── Products - Digital products catalog
│ ├── Releases - Version releases and ZIPs
│ └── Services - Add-on services (installation, etc.)
├── Licensing
│ ├── Licenses - Customer licenses
│ └── Domains - Registered domains/shops
├── Support
│ ├── Subscriptions - Active support subscriptions
│ └── Support Plans - Subscription plan configuration
├── Analytics
│ ├── Downloads - Download history
│ └── API Logs - License validation logs
├── Settings - Module configuration
└── System Check - Integrity verification
Tablas de la base de datos
| Tabla | Proposito |
|---|---|
mprdigitalproducts_product |
Catalogo de productos digitales |
mprdigitalproducts_release |
Versiones con información de archivos |
mprdigitalproducts_license |
Licencias de clientes |
mprdigitalproducts_shop |
Dominios/instalaciónes registrados |
mprdigitalproducts_license_shop |
Vinculaciones licencia-dominio |
mprdigitalproducts_download_token |
Tokens de descarga temporales |
mprdigitalproducts_download_log |
Historial de descargas |
mprdigitalproducts_support_plan |
Planes de suscripcion de soporte |
mprdigitalproducts_support_subscription |
Suscripciones activas |
mprdigitalproducts_support_payment |
Pagos de suscripcion |
mprdigitalproducts_validation_log |
Solicitudes de validación API |
mprdigitalproducts_shop_validation_log |
Historial de validación de tienda |
mprdigitalproducts_variant |
Paquetes de variantes de producto |
mprdigitalproducts_license_price |
Precios por periodo de licencia |
mprdigitalproducts_support_price |
Precios por periodo de soporte |
mprdigitalproducts_service |
Servicios adicionales |
mprdigitalproducts_cart_variant |
Selecciones de variantes en el carrito |
mprdigitalproducts_notify |
Suscriptores de notificaciones de lanzamiento |
mprdigitalproducts_banned_domain |
Dominios en lista negra |
mprdigitalproducts_rate_limit |
Limitacion de velocidad de API |
Endpoints de API
URL base: https://yoursite.com/api/license/{action}
Validación de licencia
POST /api/license/validate
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "domain": "example.com", "module": "yourmodule" }
Verificar actualizaciones
POST /api/license/check
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "module": "yourmodule", "version": "1.0.0" }
Obtener token de descarga
POST /api/license/download
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "id_release": 123, "id_shop": 456 }
Descargar archivo
GET /download/{token}
Opciones de configuración
| Ajuste | Descripción | Por defecto |
|---|---|---|
module_enabled |
Activar/desactivar modulo | true |
api_rate_limit |
Solicitudes por hora | 100 |
default_support_months |
Soporte gratuito incluido | 3 |
default_max_domains |
Dominios por licencia | 1 |
allow_domain_change |
Permitir reasignacion de dominio | true |
dev_domains_free |
Los dominios dev no cuentan | true |
grace_period_days |
Periodo de gracia para validaciónes fallidas | 7 |
watermark_downloads |
Incorporar información de licencia en descargas | true |
stripe_mode |
test o live | test |
Ajustes por producto
| Campo | Descripción | Por defecto |
|---|---|---|
support_months |
Soporte gratuito incluido con la compra | 3 |
max_support_months |
Meses maximos de soporte comprables (-1 = ilimitado) | 36 |
max_domains |
Dominios permitidos por licencia | 1 |
Hooks utilizados
| Hook | Proposito |
|---|---|
displayBackOfficeHeader |
Cargar CSS/JS de admin |
actionAdminControllerSetMedia |
Assets de admin |
displayCustomerAccount |
Enlace "Mis licencias" en la cuenta del cliente |
actionValidateOrder |
Generar licencia al completar el pedido |
actionOrderStatusPostUpdate |
Manejar cambios de estado del pedido |
moduleRoutes |
Registrar URLs amigables |
actionFrontControllerSetMedia |
Cargar CSS/JS del front |
displayProductAdditionalInfo |
Seleccion de variante en la página del producto |
actionCartUpdateQuantityBefore |
Guardar variante al agregar al carrito |
displayShoppingCartFooter |
Avisos para productos no pedibles |
actionMPRCheckoutValidateOrder |
Bloquear checkout para articulos no pedibles |
Funciones previstas / TODO
- Integración del sistema de tickets (tickets de soporte por licencia)
- Soporte multi-moneda para precios de licencia
- Generación masiva de licencias para revendedores
- Transferencia de licencias entre clientes
- Panel de análisis de uso
- Notificaciones webhook para eventos de licencia
- Integración con el marketplace de PrestaShop Addons
Workflow de lanzamiento de modulo
Esta seccion cubre los pasos practicos para lanzar un nuevo modulo a traves del sistema MPR Digital Products.
Prerrequisitos
- Código fuente del modulo listo para distribucion
- Acceso al back office de MPR Digital Products
- Acceso a la base de datos para la gestión de releases
Paso 1: Preparar el modulo
Archivos requeridos
Su modulo debe incluir la clase UpdateChecker.php para soporte de auto-update:
yourmodule/
├── yourmodule.php # Main module file
├── classes/
│ └── UpdateChecker.php # Copy from mprdigitalproducts/src/Classes/Protection/
├── views/
├── controllers/
└── ...
Copiar UpdateChecker
cp modules/mprdigitalproducts/src/Classes/Protection/UpdateChecker.php \
modules/yourmodule/classes/
Integrar el Update Checker en el modulo
Agregar al método getContent() de su modulo:
public function getContent()
{
$output = '';
// Handle auto-update AJAX request
if (Tools::getValue('ajax') && Tools::getValue('action') === 'mpr_auto_update') {
$this->handleAutoUpdate();
}
// Check for updates and show notification
$output .= $this->checkForUpdates();
// ... rest of your configuration
return $output . $this->renderConfigurationForm();
}
private function checkForUpdates()
{
$checkerPath = dirname(__FILE__) . '/classes/UpdateChecker.php';
if (!file_exists($checkerPath)) {
return '';
}
require_once $checkerPath;
$checker = \MPRDigitalProducts\Classes\Protection\UpdateChecker::fromModule(
$this->name,
$this->version
);
if (!$checker) {
return '';
}
return $checker->getUpdateNotification();
}
private function handleAutoUpdate()
{
require_once dirname(__FILE__) . '/classes/UpdateChecker.php';
$checker = \MPRDigitalProducts\Classes\Protection\UpdateChecker::fromModule(
$this->name,
$this->version
);
if (!$checker) {
header('Content-Type: application/json');
die(json_encode(['success' => false, 'error' => 'License configuration not found']));
}
header('Content-Type: application/json');
die(json_encode($checker->handleAjaxUpdate()));
}
Paso 2: Crear el ZIP de lanzamiento
Estructura de directorios
Los ZIPs de lanzamiento se almacenan en:
modules/mprdigitalproducts/releases/{module_name}/
Requisitos de estructura del ZIP
El ZIP debe contener el modulo dentro de una carpeta que coincida con el nombre del modulo:
yourmodule-1.0.0.zip
└── yourmodule/
├── yourmodule.php
├── classes/
│ └── UpdateChecker.php
└── ...
Ejemplo de script de construccion
Crear build_release.php en su modulo:
<?php
/**
* Build release ZIP for yourmodule
* Usage: php build_release.php [version]
*/
$moduleName = 'yourmodule';
$modulePath = dirname(__FILE__);
$version = $argv[1] ?? null;
if (!$version) {
die("Usage: php build_release.php <version>\n");
}
// Update version in main file
$mainFile = file_get_contents("$modulePath/$moduleName.php");
$mainFile = preg_replace(
'/\$this->version\s*=\s*\'[^\']+\';/',
"\$this->version = '$version';",
$mainFile
);
file_put_contents("$modulePath/$moduleName.php", $mainFile);
// Output directory
$outputDir = dirname($modulePath) . "/mprdigitalproducts/releases/$moduleName";
if (!is_dir($outputDir)) {
mkdir($outputDir, 0755, true);
}
// Create ZIP
$zip = new ZipArchive();
$zipPath = "$outputDir/$moduleName-$version.zip";
if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($modulePath, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::LEAVES_ONLY
);
$excludePatterns = [
'node_modules', '.git', 'build_release.php', '_releases',
'.mpr_license.json', 'yarn.lock', 'package-lock.json',
'package.json', 'Gruntfile.js', 'gulpfile.js', '.env'
];
foreach ($iterator as $file) {
$filePath = $file->getRealPath();
$relativePath = "$moduleName/" . substr($filePath, strlen($modulePath) + 1);
// Skip excluded files
$skip = false;
foreach ($excludePatterns as $pattern) {
if (strpos($relativePath, $pattern) !== false) {
$skip = true;
break;
}
}
if ($skip) continue;
$zip->addFile($filePath, $relativePath);
}
$zip->close();
$hash = hash_file('sha256', $zipPath);
$size = filesize($zipPath);
echo "Created: $zipPath\n";
echo "Hash: $hash\n";
echo "Size: $size bytes\n";
echo "\n--- SQL to insert release ---\n";
echo "INSERT INTO ps_mprdigitalproducts_release
(id_digital_product, version, file_path, file_hash, file_size, is_latest, active, date_add)
VALUES (
(SELECT id_digital_product FROM ps_mprdigitalproducts_product WHERE module_name = '$moduleName'),
'$version',
'$moduleName/$moduleName-$version.zip',
'$hash',
$size,
1,
1,
NOW()
);\n";
} else {
die("Failed to create ZIP\n");
}
Ejecutar:
php modules/yourmodule/build_release.php 1.0.0
Paso 3: Registrar el producto en la base de datos
Crear la entrada del producto digital
INSERT INTO ps_mprdigitalproducts_product (
id_product, -- PrestaShop product ID (for shop integration)
type, -- 'module', 'theme', or 'addon'
module_name, -- Technical name (folder name)
display_name, -- Human-readable name
current_version, -- Latest version
min_ps_version, -- Minimum PrestaShop version
max_ps_version, -- Maximum PrestaShop version
min_php_version, -- Minimum PHP version
support_months, -- Support duration
max_domains, -- Domains per license
active,
orderable,
date_add,
date_upd
) VALUES (
NULL, -- Or link to PrestaShop product
'module',
'yourmodule',
'Your Module Name',
'1.0.0',
'1.7.0.0',
'8.99.99',
'7.4',
12, -- 12 months support
1, -- 1 domain per license
1,
1,
NOW(),
NOW()
);
Crear la entrada de lanzamiento
INSERT INTO ps_mprdigitalproducts_release (
id_digital_product,
version,
file_path, -- Relative to releases/ directory
file_hash, -- SHA256 hash of ZIP
file_size, -- Size in bytes
changelog,
min_php_version,
min_ps_version,
max_ps_version,
is_latest, -- Set to 1 for latest version
active,
date_add
) VALUES (
(SELECT id_digital_product FROM ps_mprdigitalproducts_product WHERE module_name = 'yourmodule'),
'1.0.0',
'yourmodule/yourmodule-1.0.0.zip',
'abc123...64char_sha256_hash...',
12345,
'# Version 1.0.0\n\n- Initial release',
'7.4',
'1.7.0.0',
'8.99.99',
1,
1,
NOW()
);
Paso 4: Lanzar una nueva version
Al publicar una actualizacion:
1. Construir el nuevo ZIP
php modules/yourmodule/build_release.php 1.1.0
2. Actualizar los flags is_latest
-- Remove latest flag from old versions
UPDATE ps_mprdigitalproducts_release
SET is_latest = 0
WHERE id_digital_product = (
SELECT id_digital_product FROM ps_mprdigitalproducts_product
WHERE module_name = 'yourmodule'
);
-- Insert new release (with is_latest = 1)
INSERT INTO ps_mprdigitalproducts_release (...) VALUES (...);
-- Update product's current_version
UPDATE ps_mprdigitalproducts_product
SET current_version = '1.1.0', date_upd = NOW()
WHERE module_name = 'yourmodule';
Como funcionan los auto-updates
Flujo de actualizacion
- Verificar actualizaciones: El modulo llama a la API
updates/checkcon el license key - Obtener token de descarga: Si hay actualizacion disponible, llama a
updates/downloadpara obtener un token temporal - Verificaciónes previas: Valida espacio en disco, permisos, disponibilidad de ZipArchive
- Backup: Crea un backup ZIP del modulo actual + dump SQL de las tablas del modulo
- Descarga y verificación: Descarga el ZIP, valida la estructura (verificación de hash omitida para archivos personalizados)
- Atomic Swap: Renombra el modulo actual a
_old, mueve el nuevo modulo a su lugar - Restauracion de licencia: Preserva
.mpr_license.jsonde la instalación anterior - Ejecución de upgrades: Ejecuta todos los scripts
upgrade/upgrade-X.X.X.php - Limpieza: Elimina archivos temporales y el directorio del modulo antiguo
Descargas personalizadas
Las descargas se personalizan con la configuración de licencia incorporada (.mpr_license.json), por lo que el hash del archivo sera diferente al original. El sistema omite la verificación del hash para archivos personalizados pero aun valida la estructura ZIP.
Rollback
Si la actualizacion falla en cualquier momento despues del atomic swap, el sistema restaura automáticamente el modulo respaldado.
Scripts de upgrade
Para migraciónes de base de datos entre versiones, crear scripts en upgrade/:
yourmodule/
└── upgrade/
├── upgrade-1.1.0.php
└── upgrade-2.0.0.php
Formato del script:
<?php
function upgrade_module_1_1_0($module)
{
// Run database migrations
$sql = 'ALTER TABLE `' . _DB_PREFIX_ . 'yourmodule_data` ADD `new_field` VARCHAR(255)';
return Db::getInstance()->execute($sql);
}
Referencia de la estructura de archivos
modules/mprdigitalproducts/
├── releases/ # Release ZIPs organized by module
│ └── yourmodule/
│ ├── yourmodule-1.0.0.zip
│ ├── yourmodule-1.1.0.zip
│ └── yourmodule-2.0.0.zip
├── temp/ # Temporary files during download personalization
├── uploads/ # Customer uploads (tickets, etc.)
├── src/
│ └── Classes/
│ ├── MPRDigitalProductsProduct.php
│ ├── MPRDigitalProductsLicense.php
│ ├── MPRDigitalProductsRelease.php
│ ├── MPRDigitalProductsShop.php
│ ├── MPRDigitalProductsVariant.php
│ ├── MPRDigitalProductsNotify.php
│ ├── ... (20+ entity classes)
│ ├── Protection/
│ │ ├── UpdateChecker.php # Copy to your modules
│ │ ├── IntegrityCore.php # File integrity verification
│ │ └── Obfuscator.php # Code protection
│ └── Services/
│ ├── DownloadService.php # Handles watermarked downloads
│ ├── UpdateService.php # Auto-update logic
│ ├── LicenseService.php # License operations
│ ├── ValidationService.php # Domain validation
│ ├── ReleasePackagerService.php
│ └── ... (10+ services)
├── controllers/
│ ├── admin/ # 14 admin controllers
│ │ ├── AdminMPRDigitalProductsDashboardController.php
│ │ ├── AdminMPRDigitalProductsProductsController.php
│ │ ├── AdminMPRDigitalProductsLicensesController.php
│ │ └── ...
│ └── front/ # 7 front controllers
│ ├── Api.php # License validation API
│ ├── Download.php # Secure file downloads
│ ├── Portal.php # Customer license portal
│ ├── Subscription.php # Support checkout
│ ├── Ticket.php # Support tickets
│ └── Webhook.php # Stripe webhooks
├── views/
│ ├── css/
│ ├── js/
│ └── templates/
├── sql/
│ ├── install.php
│ └── uninstall.php
├── mprdigitalproducts.php # Main module class
└── vendor/ # Composer dependencies (Stripe, etc.)
Lista de verificación rápida de lanzamiento
- Actualizar el número de version en el archivo PHP principal del modulo
- Copiar la ultima version de
UpdateChecker.phpa la carpeta classes del modulo - Construir el ZIP de lanzamiento con la estructura correcta
- Calcular el hash SHA256
- Crear el directorio de lanzamiento:
releases/{module_name}/ - Colocar el ZIP en el directorio de lanzamiento
- Insertar el registro de lanzamiento en la base de datos
- Actualizar el flag
is_latest(eliminar del antiguo, establecer en el nuevo) - Actualizar
current_versionen la tabla de productos - Probar la descarga desde el portal del cliente
- Probar la auto-update desde el modulo instalado
v1.1.0 — 2026-02-01
- ▸Added PS 9.1 compatibility with updated virtual product handling
- ▸New download analytics dashboard showing downloads per product, customer, and time period
- ▸Added automatic download link expiration with configurable renewal workflow
- ▸Fixed download limit counter not decrementing for resumed downloads
- ▸Added digital product bundle support (multiple files per virtual product)
- ▸Improved download speed with chunked transfer and range request support
v1.0.4 — 2025-09-20
- ▸Added PS 9.0 compatibility
- ▸Fixed download links breaking when shop URL uses subfolder configuration
- ▸Added file integrity verification (SHA-256 checksum) shown to customer before download
- ▸Fixed concurrent download limit not enforcing across multiple browser sessions
v1.0.3 — 2025-05-12
- ▸Fixed download notification email not including order reference number
- ▸Added S3-compatible cloud storage support for digital product files
- ▸Fixed large file downloads (2GB+) timing out on shared hosting
- ▸Improved download token security with HMAC-based URL signing
v1.0.2 — 2024-12-08
- ▸Added PS 8.2 compatibility with new virtual product tab
- ▸Fixed download page not respecting shop-specific SSL configuration
- ▸Added customer download history page in My Account section
- ▸Fixed file access control allowing downloads from cancelled orders
v1.0.1 — 2024-08-22
- ▸Fixed download counter displaying incorrectly for multi-file products
- ▸Added watermark injection for PDF digital products with customer info
- ▸Fixed download manager JavaScript not loading on order confirmation page
v1.0.0 — 2024-05-20
- ▸Initial release with enhanced digital product delivery system
- ▸Configurable download limits per product and per customer
- ▸Time-limited download links with expiration management
- ▸Download progress tracking and resume support
- ▸Email notifications with secure download links
- ▸Support for PS 1.7.6+ and PS 8.x
License key generation and management
ImplementedAuto-update notifications for installed modules
ImplementedCustomer domain registration with verification
ImplementedVersion management with changelog display
ImplementedDemo download with watermark and time limit
ImplementedREST API for license validation
ImplementedSubscription renewals with reminder emails
ImplementedDevolución fácil - sin preguntas
Instalar, configurar y beneficiarse
Prioridad en ayuda y satisfacción
¡Aún no hay opiniones. Sé el primero!
Escribir una opinión