# Licencias — Estado actual del plugin ## Qué hace el plugin (licencia) En **WordPress**, el plugin **no genera** licencias: el administrador introduce una **clave** y el plugin la valida contra el **servidor Digixop** (`activate-license.php` por defecto), guarda el estado en la base de datos y usa ese estado para: - Habilitar funciones **Pro** (p. ej. SEO Pro) cuando la licencia es válida. - Bloquear el modo **DTL** si la licencia no es válida o ha caducado (y resetear saldo local para no mostrar cuotas obsoletas). - Mostrar caducidad y avisos en la **página única** del plugin (tarjetas de métricas y avisos de saldo bajo cuando aplica). La **traducción por proxy** (DTL) la valida y descuenta **tu backend** (`translate-proxy.php` contra tablas como `dx_licenses`). La activación en WordPress certifica el **derecho a usar el producto** y sincroniza saldo/caducidad según responda `activate-license.php`. --- ## Activación en WordPress (API Digixop) 1. **Activar** `POST` al endpoint configurado (`DIGIXOP_TDL_LICENSE_ACTIVATE_URL`, por defecto `https://api.digixop.com/activate-license.php`). Cuerpo JSON típico: `license_key`, `instance_name` (URL del sitio), `site_url` (para enforcement **1 licencia = 1 dominio** en servidor). 2. **Desactivar** `POST` al endpoint de desactivación (misma URL base configurable) con la clave y datos de instancia guardados. 3. **Requisitos** - El sitio debe usar **HTTPS** para poder activar (comprobación en el plugin). - Errores de la API se muestran en admin de forma legible (mensajes del campo `error` del JSON cuando existen). Implementación: `includes/class-digixop-translator-license.php`. --- ## Estado local que guarda WordPress | Clave | Contenido | |-------|-----------| | `digixop_translator_license` | `key`, `license_status`, `license_id`, `license_instance_id`, `expires_at`, `renews_at`, etc. | | Transient `digixop_tdl_ext_cached` | Caché de validez / datos para UI y comprobaciones rápidas. | | `digixop_translator_local_balance_remaining` | Saldo mostrado en las métricas del escritorio (sincronizado con respuestas del proxy en DTL); también condiciona el banner / aviso de saldo bajo. | | `digixop_translator_local_expiration_date` | Caducidad mostrada en métricas cuando aplica. | Si la licencia pasa a inválida o caducada, el plugin puede **poner el saldo local a 0** para no confundir al usuario. --- ## Constantes relacionadas (`traductor-digixop-pro.php`) - **`DIGIXOP_TDL_TRANSLATE_PROXY_URL`** — URL HTTPS del **proxy de traducción** (modo DTL). Imprescindible para DTL en producción. - **`DIGIXOP_TDL_LICENSE_ACTIVATE_URL` / `DIGIXOP_TDL_LICENSE_DEACTIVATE_URL`** — Activación/desactivación contra el servidor Digixop (por defecto `activate-license.php`). - **`DIGIXOP_SAAS_*`** — Rutas adicionales de API si las usas en integraciones propias. - **`DIGIXOP_TDL_BUY_CREDITS_URL`** — Enlace de recarga de caracteres mostrado en el panel. --- ## Backend de producción (api.digixop.com) En la raíz del repositorio, la carpeta **`dist-server/`** contiene la versión de **producción** desplegable en el servidor API: - **`translate-proxy.php`** — proxy DTL con validación de licencia/saldo en MySQL, llamada a **Google Cloud Translation v2**, registro de uso. - **`polar-webhook.php`** — creación/renovación/recarga de licencias y saldo vía **Polar** (firma webhook). Flujo **nativo** desde v2.0.9 del servidor de referencia. - **`activate-license.php`** — validación de clave, dominio fijado y respuesta JSON al plugin WordPress. - **`config.php`**, **`schema.sql`** — credenciales y tablas `dx_*`. Documentación detallada: **[SERVIDOR-API-DIGIXOP.md](./SERVIDOR-API-DIGIXOP.md)**. --- ## Backend de ejemplo (auto-hospedaje / referencia) En `docs/ejemplo-servidor-licencias/` hay variantes de ejemplo. La activación “oficial” del cliente WordPress actual es **`activate-license.php`** + políticas de tu `dist-server/`; el paquete alineado con la infraestructura Digixop actual es **`dist-server/`**. --- ## Recomendaciones de producción - Sitio y APIs bajo **HTTPS**. - No exponer API keys maestras de Google en el plugin ni en respuestas JSON públicas. - Logs de proxy y validación en servidor. - Mantener `dx_licenses.domain` coherente con la política **1 licencia = 1 dominio** (ver CHANGELOG 2.0.10). --- ## Documentación relacionada - **[COMO-FUNCIONA-LICENCIAS.md](./COMO-FUNCIONA-LICENCIAS.md)** — Flujo DTL/BYO y sincronización de saldo. - **[MANUAL-USUARIO-TRADUCTOR-DIGIXOP-PRO.md](./MANUAL-USUARIO-TRADUCTOR-DIGIXOP-PRO.md)** — Uso del panel y FAQ.