Reso semplice - senza domande
Installa, configura e guadagna
Priorità ad aiuto e soddisfazione
Rivoluzione Digitale
Vendi prodotti digitali — chiavi di licenza + registrazione dominio + download sicuri
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
Perché questo modulo è unico?
- 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).
Casi d'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.
-
Referencemprdigitalrevolution
-
In stock4 Items
-
Compatibilità PrestaShopPS 1.7 – 9.x
-
Modello di prezzoAcquisto singolo
-
Tipo di moduloFront & Back-office
-
Rilevante per GDPRNo
-
Obiettivo di businessOttimizzare le operazioni
-
Account esterno necessarioNo
-
Complessità del moduloSoluzione completa
-
Fase del percorso clienteGestire il negozio
-
Funziona con piattaformaNessuna piattaforma esterna
MPR Digital Products
Un modulo PrestaShop per la vendita e la distribuzione di prodotti digitali (moduli, temi, addon) con gestione delle licenze, associazione dei domini, download personalizzati con filigrana e aggiornamenti automatici con un clic.
Funzionalità
Gestione delle licenze
- Tipi di licenza: Licenze perpetue, in abbonamento o di prova
- Associazione dominio: Limitare le installazioni per licenza (es. 1 dominio per licenza)
- Rilevamento domini dev: localhost, staging e domini dev non vengono conteggiati nei limiti
- Monitoraggio stato licenza: Stati attivo, sospeso, scaduto, revocato
- Periodo di grazia: Periodo di grazia configurabile per validazioni fallite (predefinito: 7 giorni)
Distribuzione dei prodotti
- Gestione delle versioni: Tracciare le release con numeri di versione, changelog e informazioni di compatibilità
- Supporto branch: Branch stable, beta, dev, legacy per prodotto
- Download personalizzati: Ogni download e contrassegnato con informazioni sulla licenza per il tracciamento della pirateria
- Token sicuri: Token di download a tempo limitato impediscono la condivisione non autorizzata
Portale clienti
- Le mie licenze: I clienti visualizzano e gestiscono le proprie licenze su
/licenses - Registrazione dominio: Registrare domini direttamente dal portale
- Cronologia download: Tracciare tutti i download per licenza
- Stato del supporto: Visualizzare la scadenza del supporto e le opzioni di rinnovo
Sistema di auto-update
- Aggiornamenti con un clic: I moduli possono verificare e installare automaticamente gli aggiornamenti
- Controlli preliminari: Valida spazio su disco, permessi ed estensioni PHP prima dell'aggiornamento
- Atomic Swap: Il vecchio modulo viene salvato prima dell'installazione della nuova versione
- Supporto rollback: Ripristino automatico in caso di aggiornamento fallito
- Script di upgrade: Eseguire migrazioni del database tra le versioni
Pre-ordine / Prossimamente
- Prodotti non ordinabili: Contrassegnare i prodotti come "prossimamente" con data di rilascio prevista
- Notifiche di rilascio: I clienti possono iscriversi per essere notificati quando il prodotto e disponibile
- Avvisi nel carrello: Visualizzare informazioni quando prodotti non ordinabili sono nel carrello
Sistema di prezzi
- Periodi di licenza: Offrire diverse durate di licenza (1 mese, 1 anno, a vita, ecc.)
- Periodi di supporto: Prezzi separati per la durata del supporto
- Varianti di prodotto: Combinare licenza + supporto + servizi in pacchetti
- Prezzi dinamici: Prezzi specifici per carrello tramite il sistema SpecificPrice di PrestaShop
Servizi e componenti aggiuntivi
- Servizi in bundle: Installazione, personalizzazione, supporto prioritàrio
- Prezzi per servizio: Ogni servizio ha il proprio prezzo aggiunto al totale
Abbonamenti supporto (Stripe)
- Pagamenti ricorrenti: Integrazione Stripe per la fatturazione in abbonamento
- Estensioni del supporto: I clienti possono estendere il supporto dopo la scadenza
- Limite massimo supporto: Limite per prodotto su quanto in anticipo si puo acquistare il supporto (es. max 3 anni)
- Gestione webhook: Aggiornamenti automatici dello stato da Stripe
Analisi e registrazione
- Log dei download: Tracciare ogni download con IP, user agent, ID filigrana
- Log API: Tutte le richieste di validazione licenza vengono registrate
- Cronologia validazione negozio: Tracciare i tentativi di validazione del dominio e i risultati
Installazione
- Caricare la cartella
mprdigitalproductsin/modules/ - Install from PrestaShop back office → Modules
- Configurare le chiavi API Stripe nelle Impostazioni (per il supporto in abbonamento)
- Svuotare la cache di PrestaShop
Requisiti
- PrestaShop 1.7.0 - 8.x
- PHP 7.4+
- Estensione ZipArchive (per i download)
Struttura del Back Office
Il modulo aggiunge un menu Digital Products sotto VENDITE 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
Tabelle del database
| Tabella | Scopo |
|---|---|
mprdigitalproducts_product |
Catalogo prodotti digitali |
mprdigitalproducts_release |
Release delle versioni con informazioni sui file |
mprdigitalproducts_license |
Licenze dei clienti |
mprdigitalproducts_shop |
Domini/installazioni registrati |
mprdigitalproducts_license_shop |
Associazioni licenza-dominio |
mprdigitalproducts_download_token |
Token di download temporanei |
mprdigitalproducts_download_log |
Cronologia dei download |
mprdigitalproducts_support_plan |
Piani di abbonamento supporto |
mprdigitalproducts_support_subscription |
Abbonamenti attivi |
mprdigitalproducts_support_payment |
Pagamenti degli abbonamenti |
mprdigitalproducts_validation_log |
Richieste di validazione API |
mprdigitalproducts_shop_validation_log |
Cronologia validazione negozio |
mprdigitalproducts_variant |
Pacchetti varianti prodotto |
mprdigitalproducts_license_price |
Prezzi per periodo di licenza |
mprdigitalproducts_support_price |
Prezzi per periodo di supporto |
mprdigitalproducts_service |
Servizi aggiuntivi |
mprdigitalproducts_cart_variant |
Selezioni varianti nel carrello |
mprdigitalproducts_notify |
Iscritti alle notifiche di rilascio |
mprdigitalproducts_banned_domain |
Domini nella lista nera |
mprdigitalproducts_rate_limit |
Limitazione della velocità API |
Endpoint API
URL base: https://yoursite.com/api/license/{action}
Validazione licenza
POST /api/license/validate
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "domain": "example.com", "module": "yourmodule" }
Verifica aggiornamenti
POST /api/license/check
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "module": "yourmodule", "version": "1.0.0" }
Ottenere un token di download
POST /api/license/download
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "id_release": 123, "id_shop": 456 }
Scaricare il file
GET /download/{token}
Opzioni di configurazione
| Impostazione | Descrizione | Predefinito |
|---|---|---|
module_enabled |
Attivare/disattivare il modulo | true |
api_rate_limit |
Richieste all'ora | 100 |
default_support_months |
Supporto gratuito incluso | 3 |
default_max_domains |
Domini per licenza | 1 |
allow_domain_change |
Consentire la riassegnazione del dominio | true |
dev_domains_free |
I domini dev non contano | true |
grace_period_days |
Periodo di grazia per validazioni fallite | 7 |
watermark_downloads |
Incorporare informazioni licenza nei download | true |
stripe_mode |
test o live | test |
Impostazioni per prodotto
| Campo | Descrizione | Predefinito |
|---|---|---|
support_months |
Supporto gratuito incluso con l'acquisto | 3 |
max_support_months |
Mesi massimi di supporto acquistabili (-1 = illimitato) | 36 |
max_domains |
Domini consentiti per licenza | 1 |
Hook utilizzati
| Hook | Scopo |
|---|---|
displayBackOfficeHeader |
Caricare CSS/JS admin |
actionAdminControllerSetMedia |
Asset admin |
displayCustomerAccount |
Link "Le mie licenze" nell'account cliente |
actionValidateOrder |
Generare la licenza al completamento dell'ordine |
actionOrderStatusPostUpdate |
Gestire i cambiamenti di stato dell'ordine |
moduleRoutes |
Registrare URL amichevoli |
actionFrontControllerSetMedia |
Caricare CSS/JS front |
displayProductAdditionalInfo |
Selezione variante nella pagina prodotto |
actionCartUpdateQuantityBefore |
Salvare la variante quando si aggiunge al carrello |
displayShoppingCartFooter |
Avvisi per prodotti non ordinabili |
actionMPRCheckoutValidateOrder |
Bloccare il checkout per articoli non ordinabili |
Funzionalità previste / TODO
- Integrazione del sistema di ticket (ticket di supporto per licenza)
- Supporto multi-valuta per i prezzi delle licenze
- Generazione di licenze in massa per i rivenditori
- Trasferimento di licenze tra clienti
- Dashboard di analisi dell'utilizzo
- Notifiche webhook per eventi di licenza
- Integrazione con il marketplace PrestaShop Addons
Workflow di rilascio del modulo
Questa sezione illustra i passaggi pratici per rilasciare un nuovo modulo tramite il sistema MPR Digital Products.
Prerequisiti
- Codice sorgente del modulo pronto per la distribuzione
- Accesso al back office MPR Digital Products
- Accesso al database per la gestione delle release
Passo 1: Preparare il modulo
File richiesti
Il modulo deve includere la classe UpdateChecker.php per il supporto auto-update:
yourmodule/
├── yourmodule.php # Main module file
├── classes/
│ └── UpdateChecker.php # Copy from mprdigitalproducts/src/Classes/Protection/
├── views/
├── controllers/
└── ...
Copiare UpdateChecker
cp modules/mprdigitalproducts/src/Classes/Protection/UpdateChecker.php \
modules/yourmodule/classes/
Integrare l'Update Checker nel modulo
Aggiungere al metodo getContent() del 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()));
}
Passo 2: Creare il ZIP di rilascio
Struttura delle directory
I ZIP di rilascio sono archiviati in:
modules/mprdigitalproducts/releases/{module_name}/
Requisiti della struttura ZIP
Il ZIP deve contenere il modulo in una cartella corrispondente al nome del modulo:
yourmodule-1.0.0.zip
└── yourmodule/
├── yourmodule.php
├── classes/
│ └── UpdateChecker.php
└── ...
Esempio di script di build
Creare build_release.php nel 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");
}
Eseguire:
php modules/yourmodule/build_release.php 1.0.0
Passo 3: Registrare il prodotto nel database
Creare la voce del prodotto digitale
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()
);
Creare la voce di rilascio
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()
);
Passo 4: Rilasciare una nuova versione
Quando si rilascia un aggiornamento:
1. Costruire il nuovo ZIP
php modules/yourmodule/build_release.php 1.1.0
2. Aggiornare i flag 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';
Come funzionano gli auto-updates
Flusso di aggiornamento
- Verifica aggiornamenti: Il modulo chiama l'API
updates/checkcon il license key - Ottenimento del token di download: Se disponibile un aggiornamento, chiama
updates/downloadper ottenere un token temporaneo - Controlli preliminari: Valida spazio su disco, permessi, disponibilita di ZipArchive
- Backup: Crea un backup ZIP del modulo corrente + dump SQL delle tabelle del modulo
- Download e verifica: Scarica il ZIP, valida la struttura (verifica hash ignorata per file personalizzati)
- Atomic Swap: Rinomina il modulo corrente in
_old, sposta il nuovo modulo al suo posto - Ripristino della licenza: Preserva
.mpr_license.jsondall'installazione precedente - Esecuzione degli upgrade: Esegue tutti gli script
upgrade/upgrade-X.X.X.php - Pulizia: Rimuove i file temporanei e la vecchia directory del modulo
Download personalizzati
I download sono personalizzati con la configurazione della licenza incorporata (.mpr_license.json), quindi l'hash del file sara diverso dall'originale. Il sistema salta la verifica dell'hash per i file personalizzati ma valida comunque la struttura ZIP.
Rollback
Se l'aggiornamento fallisce in qualsiasi momento dopo l'atomic swap, il sistema ripristina automaticamente il modulo salvato.
Script di upgrade
Per le migrazioni del database tra le versioni, creare script in upgrade/:
yourmodule/
└── upgrade/
├── upgrade-1.1.0.php
└── upgrade-2.0.0.php
Formato dello 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);
}
Riferimento alla struttura dei file
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.)
Checklist rapida di rilascio
- Aggiornare il numero di versione nel file PHP principale del modulo
- Copiare l'ultima versione di
UpdateChecker.phpnella cartella classes del modulo - Costruire il ZIP di rilascio con la struttura corretta
- Calcolare l'hash SHA256
- Creare la directory di rilascio:
releases/{module_name}/ - Posizionare il ZIP nella directory di rilascio
- Inserire il record di rilascio nel database
- Aggiornare il flag
is_latest(rimuovere dal vecchio, impostare sul nuovo) - Aggiornare
current_versionnella tabella prodotti - Testare il download dal portale clienti
- Testare l'auto-update dal modulo installato
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
ImplementedReso semplice - senza domande
Installa, configura e guadagna
Priorità ad aiuto e soddisfazione
Ancora nessuna recensione. Sii il primo!
Scrivi una recensione