Guía Maestra: Sistema de Licencias y Actualizaciones Automáticas
El sistema se compone de dos capas desacopladas diseñadas para ofrecer 0% de sobrecarga y máxima protección criptográfica:
https://licencias.digitalinnovationglobal.com/api/v1/, gestiona claves de venta directa, licencias corporativas multi-sitio, códigos de compra de Envato/CodeCanyon y la entrega de binarios protegidos.License_Manager.php y Updater.php. Se integra de forma nativa en el gestor de plugins de WordPress para consultar versiones, mostrar notas de la versión (changelog) e instalar actualizaciones seguras en 1 solo clic.La carpeta D:\kimi\licencias\api\v1\ (y su espejo sincronizado D:\google\licencias\api\v1\) expone los siguientes endpoints REST:
| Endpoint | Método | Propósito y Comportamiento |
|---|---|---|
/api/v1/activate |
POST | Activa una clave de licencia en un dominio. Verifica número de sitios permitidos (sites_allowed) y registra la fecha y dominio en la base de datos. |
/api/v1/envato-activate |
POST | Valida un Purchase Code de Envato/CodeCanyon contra la API de Envato, genera una licencia única en el servidor y la vincula al dominio. |
/api/v1/deactivate |
POST | Libera la vinculación del dominio en la tabla license_activations, permitiendo al cliente reutilizar su clave en otro sitio web. |
/api/v1/check |
POST | Comprobador de estado y versiones: Valida el estado de la licencia y entrega los metadatos de actualización (new_version, download_url, changelog, requisitos de PHP/WP). |
/api/v1/download.php |
GET | Entrega segura del ZIP Pro: Requiere key, site y un token SHA-256 temporal diario. Solo si el sitio y la licencia son válidos, entrega el archivo releases/digital-translate-wp-pro.zip. |
/api/v1/validate |
POST | Endpoint multi-producto para validaciones externas (como SEPE Connect / Moodle), retornando el plan y features activas. |
A diferencia de sistemas vulnerables donde los enlaces de descarga son públicos, download.php implementa una validación estricta de 4 capas antes de transferir un solo byte:
licenses y su estado es estrictamente 'active'.license_activations que la URL de la web que solicita la descarga esté autorizada para esa clave.sha256(license_key + site_url + YYYY-MM-DD). Este token caduca a medianoche, impidiendo que el enlace sea compartido o reutilizado por terceros.Content-Type: application/zip transmitiendo el paquete protegido desde el directorio privado releases/.En el plugin de WordPress, el flujo está completamente automatizado:
pre_set_site_transient_update_plugins)WordPress comprueba de manera natural si hay actualizaciones de temas y plugins. El plugin intercepta este evento:
$license_manager->is_valid(). Si no hay licencia activa, no se ofrece la versión Pro para evitar descargas no autorizadas.https://licencias.digitalinnovationglobal.com/api/v1/check enviando la versión actual (ej: 2.5.0).new_version = '2.5.1' y es superior a la instalada, se inyecta en el transient de WordPress el objeto oficial de actualización.dtwp_remote_update_info con una duración de 6 horas para no saturar tu servidor de peticiones HTTP innecesarias.plugins_api)Cuando el cliente pulsa en "Ver detalles de la versión" dentro de su lista de plugins, WordPress llama al hook plugins_api. Nuestro código intercepta la llamada y genera la ventana modal nativa de WordPress mostrando:
En License_Manager.php se registra el dominio en el momento de la activación mediante dtwp_license_bound_domain. Si un usuario copia la base de datos de producción a un entorno local o de staging (o un tercero clona el sitio), el plugin detecta que el host actual no coincide con el dominio vinculado y bloquea las funciones Pro instantáneamente.
Cuando prepares una nueva versión (por ejemplo, la 2.5.1), sigue estos sencillos pasos:
En D:\google\digital-translate-wp\digital-translate-wp.php, actualiza la cabecera del plugin y la constante:
Version: 2.5.1 y define('DTWP_VERSION', '2.5.1');
En D:\google\digital-translate-wp\includes\Core\Updater.php, actualiza la propiedad:
protected $current_version = '2.5.1';
Ejecuta en PowerShell el compilador universal del plugin:
powershell -ExecutionPolicy Bypass -File "D:\google\digital-translate-wp\scripts\build-all-releases.ps1"
El script automáticamente:
.po y .mo binarios).digital-translate-wp-pro.zip tanto a D:\kimi\licencias\releases\ como a D:\google\licencias\releases\.Abre el archivo api/v1/check.php en tu servidor de licencias (líneas 89 y 105) y actualiza el número de versión y las notas de la versión:
// Versión más reciente disponible en el servidor
$latestVersion = '2.5.1';
// Changelog para el modal de WordPress
'changelog' => '<h4>Versión 2.5.1</h4><ul><li>Mejoras en el personalizador visual.</li><li>Correcciones de compatibilidad con temas.</li></ul>',
A partir de ese instante, cualquier web de cliente con licencia activa que entre a Plugins o pulse en "Comprobar actualizaciones ahora" verá el aviso oficial de WordPress y podrá actualizar su plugin con 1 solo clic.
Tu servidor de licencias gestiona ahora dos productos principales de la compañía:
download.php.validate.php.D:\kimi\licencias y D:\google\licencias han sido sincronizados al 100% (49 archivos idénticos en ambos). Además, el script build-all-releases.ps1 actualiza automáticamente las carpetas releases/ de ambas ubicaciones cada vez que compilas una release.