Retour simple - sans questions
Installer, configurer et profiter
Aide et satisfaction avant tout
Révolution Digitale
Vendez des produits numériques — clés de licence + enregistrement de domaine + téléchargements sécurisés
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
Pourquoi ce module est-il unique ?
- 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).
Cas d'utilisation
- 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
-
Modèle tarifaireAchat unique
-
Type de moduleFront & Back-office
-
Concerne le RGPDNon
-
Objectif commercialOptimiser les opérations
-
Compte externe requisNon
-
Complexité du moduleSolution complète
-
Étape du parcours clientGérer la boutique
-
Compatible avec la plateformeAucune plateforme externe
MPR Digital Products
Un module PrestaShop pour la vente et la distribution de produits numériques (modules, themes, addons) avec gestion des licences, liaison de domaines, telechargements personnalisés avec filigrane et mises a jour automatiques en un clic.
Fonctionnalités
Gestion des licences
- Types de licence: Licences perpetuelles, par abonnement ou d'essai
- Liaison de domaine: Limiter les installations par licence (ex: 1 domaine par licence)
- Detection des domaines dev: localhost, staging et domaines dev ne comptent pas dans les limites
- Suivi du statut de licence: États actif, suspendu, expire, revoque
- Periode de grace: Periode de grace configurable pour les validations echouees (par défaut: 7 jours)
Distribution des produits
- Gestion des versions: Suivre les releases avec numéros de version, changelogs et informations de compatibilité
- Support des branches: Branches stable, beta, dev, legacy par produit
- Telechargements personnalisés: Chaque telechargement est marque avec les informations de licence pour le suivi du piratage
- Tokens securises: Les tokens de telechargement a duree limitee empechent le partage non autorise
Portail client
- Mes licences: Les clients visualisent et gerent leurs licences sur
/licenses - Enregistrement de domaine: Enregistrer des domaines directement depuis le portail
- Historique des telechargements: Suivre tous les telechargements par licence
- Statut du support: Voir l'expiration du support et les options de renouvellement
Système d'auto-update
- Mises a jour en un clic: Les modules peuvent vérifier et installer automatiquement les mises a jour
- Verifications pre-vol: Valide l'espace disque, les permissions et les extensions PHP avant la mise a jour
- Atomic Swap: L'ancien module est sauvegarde avant l'installation de la nouvelle version
- Support de rollback: Restauration automatique en cas d'echec de la mise a jour
- Scripts d'upgrade: Exécutér les migrations de base de données entre les versions
Pre-commande / Bientot disponible
- Produits non commandables: Marquer les produits comme "bientot disponible" avec une date de sortie prevue
- Notifications de release: Les clients peuvent s'abonner pour etre notifies a la sortie du produit
- Avertissements panier: Afficher des informations quand des produits non commandables sont dans le panier
Système de tarification
- Periodes de licence: Proposer différentes durees de licence (1 mois, 1 an, a vie, etc.)
- Periodes de support: Tarification separee pour la duree du support
- Variantes de produit: Combiner licence + support + services en packages
- Tarification dynamique: Prix spécifiques au panier via le système SpecificPrice de PrestaShop
Services & Add-ons
- Services groupes: Installation, personnalisation, support prioritaire
- Tarification par service: Chaque service a son propre prix ajoute au total
Abonnements support (Stripe)
- Paiements recurrents: Intégration Stripe pour la facturation par abonnement
- Extensions de support: Les clients peuvent prolonger le support apres expiration
- Plafond de support maximum: Limite par produit sur la duree maximale d'achat de support (ex: max 3 ans)
- Gestion des webhooks: Mises a jour automatiques du statut depuis Stripe
Analyses & Journalisation
- Logs de telechargement: Suivre chaque telechargement avec IP, user agent, ID de filigrane
- Logs API: Toutes les requêtes de validation de licence sont enregistrees
- Historique de validation de boutique: Suivre les tentatives de validation de domaine et les resultats
Installation
- Telecharger le dossier
mprdigitalproductsdans/modules/ - Install from PrestaShop back office → Modules
- Configurer les cles API Stripe dans les paramètres (pour le support par abonnement)
- Vider le cache PrestaShop
Pre-requis
- PrestaShop 1.7.0 - 8.x
- PHP 7.4+
- Extension ZipArchive (pour les telechargements)
Structure du Back Office
Le module ajoute un menu Digital Products sous VENDRE avec:
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
Tables de base de données
| Table | Objectif |
|---|---|
mprdigitalproducts_product |
Catalogue de produits numériques |
mprdigitalproducts_release |
Releases de versions avec informations de fichier |
mprdigitalproducts_license |
Licences clients |
mprdigitalproducts_shop |
Domaines/installations enregistres |
mprdigitalproducts_license_shop |
Liaisons licence-domaine |
mprdigitalproducts_download_token |
Tokens de telechargement temporaires |
mprdigitalproducts_download_log |
Historique des telechargements |
mprdigitalproducts_support_plan |
Plans d'abonnement support |
mprdigitalproducts_support_subscription |
Abonnements actifs |
mprdigitalproducts_support_payment |
Paiements d'abonnement |
mprdigitalproducts_validation_log |
Requêtes de validation API |
mprdigitalproducts_shop_validation_log |
Historique de validation de boutique |
mprdigitalproducts_variant |
Packages de variantes de produit |
mprdigitalproducts_license_price |
Tarification par periode de licence |
mprdigitalproducts_support_price |
Tarification par periode de support |
mprdigitalproducts_service |
Services complementaires |
mprdigitalproducts_cart_variant |
Sélections de variantes dans le panier |
mprdigitalproducts_notify |
Abonnes aux notifications de release |
mprdigitalproducts_banned_domain |
Domaines sur liste noire |
mprdigitalproducts_rate_limit |
Limitation du debit API |
Points d'acces API
URL de base: https://yoursite.com/api/license/{action}
Validation de licence
POST /api/license/validate
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "domain": "example.com", "module": "yourmodule" }
Vérifier les mises a jour
POST /api/license/check
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "module": "yourmodule", "version": "1.0.0" }
Obtenir un token de telechargement
POST /api/license/download
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "id_release": 123, "id_shop": 456 }
Telecharger un fichier
GET /download/{token}
Options de configuration
| Paramètre | Description | Défaut |
|---|---|---|
module_enabled |
Activer/désactiver le module | true |
api_rate_limit |
Requêtes par heure | 100 |
default_support_months |
Support gratuit inclus | 3 |
default_max_domains |
Domaines par licence | 1 |
allow_domain_change |
Autoriser la reassignation de domaine | true |
dev_domains_free |
Les domaines dev ne comptent pas | true |
grace_period_days |
Periode de grace pour les validations echouees | 7 |
watermark_downloads |
Intégrér les informations de licence dans les telechargements | true |
stripe_mode |
test ou live | test |
Paramètres par produit
| Champ | Description | Défaut |
|---|---|---|
support_months |
Support gratuit inclus avec l'achat | 3 |
max_support_months |
Mois de support maximum achetables (-1 = illimite) | 36 |
max_domains |
Domaines autorises par licence | 1 |
Hooks utilises
| Hook | Objectif |
|---|---|
displayBackOfficeHeader |
Charger CSS/JS admin |
actionAdminControllerSetMedia |
Assets admin |
displayCustomerAccount |
Lien "Mes licences" dans le compte client |
actionValidateOrder |
Générer la licence a la validation de commande |
actionOrderStatusPostUpdate |
Gérer les changements de statut de commande |
moduleRoutes |
Enregistrer les URLs conviviales |
actionFrontControllerSetMedia |
Charger CSS/JS front |
displayProductAdditionalInfo |
Sélection de variante sur la page produit |
actionCartUpdateQuantityBefore |
Sauvegarder la variante lors de l'ajout au panier |
displayShoppingCartFooter |
Avertissements pour les produits non commandables |
actionMPRCheckoutValidateOrder |
Bloquer le checkout pour les articles non commandables |
Fonctionnalités prevues / TODO
- Intégration d'un système de tickets (tickets de support par licence)
- Support multi-devises pour les prix de licence
- Generation de licences en masse pour les revendeurs
- Transfert de licence entre clients
- Tableau de bord d'analyse d'utilisation
- Notifications webhook pour les événements de licence
- Intégration avec le marketplace PrestaShop Addons
Workflow de release de module
Cette section couvre les étapes pratiques pour publier un nouveau module via le système MPR Digital Products.
Pre-requis
- Code source du module pret pour la distribution
- Acces au back office MPR Digital Products
- Acces a la base de données pour la gestion des releases
Étape 1: Preparer votre module
Fichiers requis
Votre module doit inclure la classe UpdateChecker.php pour le support d'auto-update:
yourmodule/
├── yourmodule.php # Main module file
├── classes/
│ └── UpdateChecker.php # Copy from mprdigitalproducts/src/Classes/Protection/
├── views/
├── controllers/
└── ...
Copier UpdateChecker
cp modules/mprdigitalproducts/src/Classes/Protection/UpdateChecker.php \
modules/yourmodule/classes/
Intégrér l'Update Checker dans le module
Ajoutez a la méthode getContent() de votre module:
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()));
}
Étape 2: Créer le ZIP de release
Structure des répertoires
Les ZIPs de release sont stockes dans:
modules/mprdigitalproducts/releases/{module_name}/
Exigences de structure ZIP
Le ZIP doit contenir le module dans un dossier correspondant au nom du module:
yourmodule-1.0.0.zip
└── yourmodule/
├── yourmodule.php
├── classes/
│ └── UpdateChecker.php
└── ...
Exemple de script de build
Créez build_release.php dans votre 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");
}
Exécutér:
php modules/yourmodule/build_release.php 1.0.0
Étape 3: Enregistrer le produit dans la base de données
Créer l'entrée du produit numerique
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()
);
Créer l'entrée de release
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()
);
Étape 4: Publier une nouvelle version
Lors de la publication d'une mise a jour:
1. Construire le nouveau ZIP
php modules/yourmodule/build_release.php 1.1.0
2. Mettre a jour les 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';
Fonctionnement des auto-updates
Deroulement de la mise a jour
- Verification des mises a jour: Le module appelle l'API
updates/checkavec le license key - Obtention du token de telechargement: Si une mise a jour est disponible, appelle
updates/downloadpour obtenir un token temporaire - Verifications pre-vol: Valide l'espace disque, les permissions, la disponibilité de ZipArchive
- Backup: Cree un backup ZIP du module actuel + dump SQL des tables du module
- Telechargement & verification: Telecharge le ZIP, valide la structure (verification du hash ignoree pour les fichiers personnalisés)
- Atomic Swap: Renomme le module actuel en
_old, deplace le nouveau module en place - Restauration de la licence: Preserve
.mpr_license.jsonde l'installation precedente - Execution des upgrades: Exécuté tous les scripts
upgrade/upgrade-X.X.X.php - Nettoyage: Supprime les fichiers temporaires et l'ancien répertoire du module
Telechargements personnalisés
Les telechargements sont personnalisés avec la configuration de licence intégrée (.mpr_license.json), donc le hash du fichier differera de l'original. Le système ignore la verification du hash pour les fichiers personnalisés mais valide toujours la structure ZIP.
Rollback
Si la mise a jour echoue a tout moment apres l'atomic swap, le système restaure automatiquement le module sauvegarde.
Scripts d'upgrade
Pour les migrations de base de données entre versions, créez des scripts dans upgrade/:
yourmodule/
└── upgrade/
├── upgrade-1.1.0.php
└── upgrade-2.0.0.php
Format du 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()->exécuté($sql);
}
Référence de la structure des fichiers
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 de release rapide
- Mettre a jour le numéro de version dans le fichier PHP principal du module
- Copier la dernière version de
UpdateChecker.phpdans le dossier classes du module - Construire le ZIP de release avec la structure correcte
- Calculer le hash SHA256
- Créer le répertoire de release:
releases/{module_name}/ - Placer le ZIP dans le répertoire de release
- Inserer l'enregistrement de release dans la base de données
- Mettre a jour le flag
is_latest(supprimer de l'ancien, definir sur le nouveau) - Mettre a jour
current_versiondans la table produit - Tester le telechargement depuis le portail client
- Tester l'auto-update depuis le module installe
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 résuméd 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 conçurrent download limit not enforcing across multiple browser sessions
v1.0.3 — 2025-05-12
- ▸Fixed download notification email not including order référence 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 résumé 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
ImplementedRetour simple - sans questions
Installer, configurer et profiter
Aide et satisfaction avant tout
Aucun avis pour le moment. Soyez le premier à donner le vôtre !
Écrire un avis