Łatwy zwrot - bez pytań
Zainstaluj, skonfiguruj i zarabiaj
Priorytet pomocy i satysfakcji
Rewolucja Cyfrowa
Sprzedawaj produkty cyfrowe — klucze licencyjne + rejestracja domeny + bezpieczne pobieranie
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
Dlaczego ten moduł jest wyjątkowy?
- 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).
Zastosowania
- 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.
-
Indeksmprdigitalrevolution
-
W magazynie4 Przedmioty
-
Kompatybilność z PrestaShopPS 1.7 – 9.x
-
Model cenowyJednorazowy zakup
-
Typ modułuFront & Back-office
-
Dotyczy RODONie
-
Cel biznesowyUsprawnić operacje
-
Wymagane konto zewnętrzneNie
-
Złożoność modułuKompletne rozwiązanie
-
Etap ścieżki klientaZarządzać sklepem
-
Działa z platformąBez zewnętrznej platformy
MPR Digital Products
Modul PrestaShop do sprzedazy i dystrybucji produktow cyfrowych (modulow, motywow, dodatkow) z zarządzaniem licencjami, wiazaniem domen, spersonalizowanymi pobraniami ze znakiem wodnym i automatycznymi aktualizacjami jednym kliknieciem.
Funkcje
Zarządzanie licencjami
- Typy licencji: Licencje bezterminowe, subskrypcyjne lub probne
- Wiazanie domen: Ograniczenie instalacji na licencje (np. 1 domena na licencje)
- Wykrywanie domen deweloperskich: localhost, staging i domeny dev nie sa wliczane do limitow
- Sledzenie statusu licencji: Stany: aktywna, zawieszona, wygasla, cofnieta
- Okres karencji: Konfigurowalny okres karencji dla nieudanych walidacji (domyslnie: 7 dni)
Dystrybucja produktow
- Zarządzanie wersjami: Sledzenie wydari z numerami wersji, changelogami i informacjami o kompatybilnosci
- Obsługa galezi: Galerie stable, beta, dev, legacy na produkt
- Spersonalizowane pobrania: Kazde pobranie jest oznaczone informacjami licencyjnymi do sledzenia piractwa
- Bezpieczne tokeny: Tokeny pobierania z ograniczonym czasem zapobiegaja nieautoryzowanemu udostepnianiu
Portal klienta
- Moje licencje: Klienci moga przegladac i zarządzać swoimi licencjami na
/licenses - Rejestracja domen: Rejestracja domen bezposrednio z portalu
- Historia pobran: Sledzenie wszystkich pobran na licencje
- Status wsparcia: Wyświetlanie daty wygasniecia wsparcia i opcji odnowienia
System auto-update
- Aktualizacje jednym kliknieciem: Moduly moga automatycznie sprawdzac i instalowac aktualizacje
- Kontrole wstepne: Walidacja przestrzeni dyskowej, uprawnien i rozszerzen PHP przed aktualizacja
- Atomic Swap: Stary modul jest tworzony jako kopia zapasowa przed instalacja nowej wersji
- Obsługa rollback: Automatyczne przywracanie w przypadku nieudanej aktualizacji
- Skrypty upgrade: Wykonywanie migracji bazy danych miedzy wersjami
Przedsprzedaz / Wkrotce dostepne
- Produkty niedostepne do zamówieńia: Oznaczanie produktow jako "wkrotce dostepne" z przewidywana data wydania
- Powiadomienia o wydaniu: Klienci moga subskrybowac powiadomienia o wydaniu produktu
- Ostrzezenia w koszyku: Wyświetlanie informacji gdy produkty niedostepne do zamówieńia sa w koszyku
System cenowy
- Okresy licencji: Oferowanie roznych czasow trwania licencji (1 miesiac, 1 rok, bezterminowo itp.)
- Okresy wsparcia: Osobna wycena czasu trwania wsparcia
- Warianty produktow: Laczenie licencji + wsparcia + uslug w pakiety
- Dynamiczne ceny: Ceny specyficzne dla koszyka za pomoca systemu SpecificPrice PrestaShop
Uslugi i dodatki
- Uslugi w pakiecie: Instalacja, dostosowanie, priorytetowe wsparcie
- Ceny za usluge: Kazda usluga ma wlasna cene dodawana do sumy
Subskrypcje wsparcia (Stripe)
- Płatnośći cykliczne: Integracja ze Stripe do rozliczen subskrypcyjnych
- Przedluzenie wsparcia: Klienci moga przedluzyc wsparcie po wygasnieciu
- Maksymalny limit wsparcia: Limit na produkt okreslajacy jak daleko w przod mozna zakupic wsparcie (np. maks. 3 lata)
- Obsługa webhookow: Automatyczne aktualizacje statusu ze Stripe
Analizy i logowanie
- Logi pobran: Sledzenie kazdego pobrania z IP, user agent, ID znaku wodnego
- Logi API: Wszystkie zadania walidacji licencji sa rejestrowane
- Historia walidacji sklepu: Sledzenie prob walidacji domen i wynikow
Instalacja
- Przeslac folder
mprdigitalproductsdo/modules/ - Install from PrestaShop back office → Modules
- Skonfigurowac klucze API Stripe w Ustawieniach (dla wsparcia subskrypcyjnego)
- Wyczyscic cache PrestaShop
Wymagania
- PrestaShop 1.7.0 - 8.x
- PHP 7.4+
- Rozszerzenie ZipArchive (do pobierania)
Struktura Back Office
Modul dodaje menu Digital Products pod SPRZEDAZ z:
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
Tabele bazy danych
| Tabela | Przeznaczenie |
|---|---|
mprdigitalproducts_product |
Katalog produktow cyfrowych |
mprdigitalproducts_release |
Wydania wersji z informacjami o plikach |
mprdigitalproducts_license |
Licencje klientow |
mprdigitalproducts_shop |
Zarejestrowane domeny/instalacje |
mprdigitalproducts_license_shop |
Powiazania licencja-domena |
mprdigitalproducts_download_token |
Tymczasowe tokeny pobierania |
mprdigitalproducts_download_log |
Historia pobran |
mprdigitalproducts_support_plan |
Plany subskrypcji wsparcia |
mprdigitalproducts_support_subscription |
Aktywne subskrypcje |
mprdigitalproducts_support_payment |
Płatnośći subskrypcyjne |
mprdigitalproducts_validation_log |
Zadania walidacji API |
mprdigitalproducts_shop_validation_log |
Historia walidacji sklepu |
mprdigitalproducts_variant |
Pakiety wariantow produktow |
mprdigitalproducts_license_price |
Ceny okresow licencji |
mprdigitalproducts_support_price |
Ceny okresow wsparcia |
mprdigitalproducts_service |
Uslugi dodatkowe |
mprdigitalproducts_cart_variant |
Wybory wariantow w koszyku |
mprdigitalproducts_notify |
Subskrybenci powiadomien o wydaniach |
mprdigitalproducts_banned_domain |
Zablokowane domeny |
mprdigitalproducts_rate_limit |
Limitowanie szybkosci API |
Punkty dostepu API
Bazowy URL: https://yoursite.com/api/license/{action}
Walidacja licencji
POST /api/license/validate
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "domain": "example.com", "module": "yourmodule" }
Sprawdzanie aktualizacji
POST /api/license/check
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "module": "yourmodule", "version": "1.0.0" }
Uzyskanie tokena pobierania
POST /api/license/download
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "id_release": 123, "id_shop": 456 }
Pobranie pliku
GET /download/{token}
Opcje konfiguracji
| Ustawienie | Opis | Domyslnie |
|---|---|---|
module_enabled |
Włączenie/wylaczenie modulu | true |
api_rate_limit |
Zapytan na godzine | 100 |
default_support_months |
Darmowe wsparcie w zestawie | 3 |
default_max_domains |
Domeny na licencje | 1 |
allow_domain_change |
Zezwol na zmiane domeny | true |
dev_domains_free |
Domeny dev nie sa liczone | true |
grace_period_days |
Okres karencji dla nieudanych walidacji | 7 |
watermark_downloads |
Osadzanie informacji licencyjnych w pobraniach | true |
stripe_mode |
test lub live | test |
Ustawienia dla produktu
| Pole | Opis | Domyslnie |
|---|---|---|
support_months |
Darmowe wsparcie włączone z zakupem | 3 |
max_support_months |
Maksymalna liczba miesiecy wsparcia do kupienia (-1 = bez limitu) | 36 |
max_domains |
Dozwolone domeny na licencje | 1 |
Uzywane hooki
| Hook | Przeznaczenie |
|---|---|
displayBackOfficeHeader |
Ladowanie CSS/JS admina |
actionAdminControllerSetMedia |
Zasoby admina |
displayCustomerAccount |
Link "Moje licencje" na koncie klienta |
actionValidateOrder |
Generowanie licencji po zakonczeniu zamówieńia |
actionOrderStatusPostUpdate |
Obsługa zmian statusu zamówieńia |
moduleRoutes |
Rejestracja przyjaznych URLi |
actionFrontControllerSetMedia |
Ladowanie CSS/JS frontu |
displayProductAdditionalInfo |
Wybor wariantu na stronie produktu |
actionCartUpdateQuantityBefore |
Zapisanie wariantu przy dodawaniu do koszyka |
displayShoppingCartFooter |
Ostrzezenia o produktach niedostepnych do zamówieńia |
actionMPRCheckoutValidateOrder |
Blokowanie checkout dla niedostepnych produktow |
Planowane funkcje / TODO
- Integracja systemu ticketow (tickety wsparcia na licencje)
- Obsługa wielu walut dla cen licencji
- Masowe generowanie licencji dla resellerow
- Transfer licencji miedzy klientami
- Dashboard analityki uzytkowania
- Powiadomienia webhook dla zdarzen licencji
- Integracja z marketplace PrestaShop Addons
Workflow wydania modulu
Ta sekcja opisuje praktyczne kroki publikacji nowego modulu za pomoca systemu MPR Digital Products.
Wymagania wstepne
- Kod źródłowy modulu gotowy do dystrybucji
- Dostep do back office MPR Digital Products
- Dostep do bazy danych do zarządzania wydaniami
Krok 1: Przygotowanie modulu
Wymagane pliki
Twoj modul musi zawierac klase UpdateChecker.php do obsługi auto-update:
yourmodule/
├── yourmodule.php # Main module file
├── classes/
│ └── UpdateChecker.php # Copy from mprdigitalproducts/src/Classes/Protection/
├── views/
├── controllers/
└── ...
Kopiowanie UpdateChecker
cp modules/mprdigitalproducts/src/Classes/Protection/UpdateChecker.php \
modules/yourmodule/classes/
Integracja Update Checker w module
Dodaj do metody getContent() swojego modulu:
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()));
}
Krok 2: Tworzenie ZIP wydania
Struktura katalogow
ZIPy wydari sa przechowywane w:
modules/mprdigitalproducts/releases/{module_name}/
Wymagania dotyczace struktury ZIP
ZIP musi zawierac modul w folderze odpowiadajacym nazwie modulu:
yourmodule-1.0.0.zip
└── yourmodule/
├── yourmodule.php
├── classes/
│ └── UpdateChecker.php
└── ...
Przyklad skryptu budowania
Utworz build_release.php w swoim module:
<?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");
}
Uruchomienie:
php modules/yourmodule/build_release.php 1.0.0
Krok 3: Rejestracja produktu w bazie danych
Utworzenie wpisu produktu cyfrowego
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()
);
Utworzenie wpisu wydania
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()
);
Krok 4: Wydanie nowej wersji
Podczas publikowania aktualizacji:
1. Zbudowanie nowego ZIP
php modules/yourmodule/build_release.php 1.1.0
2. Aktualizacja 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';
Jak dzialaja auto-updates
Przebieg aktualizacji
- Sprawdzanie aktualizacji: Modul wywoluje API
updates/checkz license key - Uzyskanie tokena pobierania: Jesli dostepna jest aktualizacja, wywoluje
updates/downloadaby uzyskac tymczasowy token - Kontrole wstepne: Walidacja przestrzeni dyskowej, uprawnien, dostepnosci ZipArchive
- Backup: Tworzenie kopii zapasowej ZIP biezacego modulu + dump SQL tabel modulu
- Pobieranie i weryfikacja: Pobiera ZIP, waliduje strukture (sprawdzanie hash pominiete dla spersonalizowanych plikow)
- Atomic Swap: Zmienia nazwe biezacego modulu na
_old, przenosi nowy modul na jego miejsce - Przywracanie licencji: Zachowuje
.mpr_license.jsonz poprzedniej instalacji - Uruchomienie upgrades: Wykonuje wszystkie skrypty
upgrade/upgrade-X.X.X.php - Czyszczenie: Usuwa pliki tymczasowe i stary katalog modulu
Spersonalizowane pobrania
Pobrania sa personalizowane z osadzona konfiguracja licencji (.mpr_license.json), wiec hash pliku bedzie sie roznic od oryginalu. System pomija weryfikacje hash dla spersonalizowanych plikow, ale nadal waliduje strukture ZIP.
Rollback
Jesli aktualizacja nie powiedzie sie w dowolnym momencie po atomic swap, system automatycznie przywraca modul z kopii zapasowej.
Skrypty upgrade
Do migracji bazy danych miedzy wersjami, utworz skrypty w upgrade/:
yourmodule/
└── upgrade/
├── upgrade-1.1.0.php
└── upgrade-2.0.0.php
Format skryptu:
<?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);
}
Referencja struktury plikow
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.)
Szybka checklista wydania
- Zaktualizowac numer wersji w glownym pliku PHP modulu
- Skopiowac najnowsza wersje
UpdateChecker.phpdo folderu classes modulu - Zbudowac ZIP wydania z prawidlowa struktura
- Obliczyc hash SHA256
- Utworzyc katalog wydania:
releases/{module_name}/ - Umiescic ZIP w katalogu wydania
- Wstawic rekord wydania do bazy danych
- Zaktualizowac flage
is_latest(usunac ze starego, ustawic na nowym) - Zaktualizowac
current_versionw tabeli produktow - Przetestowac pobieranie z portalu klienta
- Przetestowac auto-update z zainstalowanego modulu
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
ImplementedŁatwy zwrot - bez pytań
Zainstaluj, skonfiguruj i zarabiaj
Priorytet pomocy i satysfakcji
Brak opinii. Bądź pierwszy!
Napisz opinię