La API incluida con la extensión Software Licensing te permite activar claves de licencia de forma remota, comprobar si las claves son válidas (y no han caducado), y también recuperar información sobre las últimas versiones del software. Esta API se puede implementar con la mayoría del software, no solo con Plugins y Temas de WordPress.
En este artículo
Solicitudes y Parámetros de API Disponibles
Integración de Plugins y Temas de WordPress
Activar una Clave de Licencia
Comprobar si una Licencia es Válida / Activa
Obtener información de versión
Recuperar versiones para varios productos a la vez
Ejemplos de API en otros idiomas
Preguntas frecuentes / Solución de problemas
Hay cuatro tipos de solicitudes de API disponibles:
- activate_license – Se utiliza para activar una clave de licencia de forma remota
- deactivate_license – Se utiliza para desactivar una clave de licencia de forma remota
- check_license – Se utiliza para comprobar de forma remota si una clave de licencia está activada, es válida y no ha caducado
- get_version – Se utiliza para recuperar de forma remota la información de la última versión de un producto
Cada uno de los métodos a continuación funciona de la misma manera. La URL del sitio web en el que tienes instalado Easy Digital Download + Software Licensing actuará como el punto final de la API. Todas las solicitudes a la API se realizan como solicitudes GET o POST y siguen este formato:
https://YOURSITE.com/?edd_action={request type}&item_id={download ID here}&license=cc22c1ec86304b36883440e2e84cddff&url={url of the site being licensed}
La solicitud requiere tres parámetros y tiene un parámetro opcional:
- edd_action – Este es el tipo de solicitud (ver abajo)
- item_id – Use the Download ID of your download product. This is more accurate than using item_name.
- En lugar de item_id, también puedes usar item_name, que es el nombre de la descarga en lugar del ID. Se prefiere pasar item_id, ya que es menos probable que cambie. Si el item_name cambia, tu software necesitará ser actualizado y las referencias pasadas al nombre antiguo ya no funcionarán.
- license – Esta es la clave de licencia para la que estás realizando una acción
- url – (opcional) Esta es la URL del sitio desde la que proviene la solicitud de la API
Consejo de URL para Software de Escritorio:
El parámetro url no se limita a las URL. Por ejemplo, el software de escritorio podría usar el parámetro url para un ID de Sistema o cualquier texto único.
Claves de Licencia:
- La API de claves de licencia solo admite los siguientes caracteres [a-z, A-Z, 0-9, -, _].
- Las claves de licencia pueden tener una longitud máxima de 256 caracteres.
Integración de Plugins y Temas de WordPress:
Consulta los siguientes documentos sobre cómo integrar la API de Licenciamiento de Software con Plugins y Temas de WordPress:
Consulta nuestra documentación sobre cómo integrar actualizaciones automáticas para tus plugins de WordPress.
Consulta nuestra documentación sobre cómo integrar actualizaciones automáticas para tus temas de WordPress
Activar una Clave de Licencia
Para activar una licencia de forma remota, la URL que utilizarás es:
https://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
El parámetro item_id (item_id=8) se reemplazará con el ID real de tu producto. Puedes encontrarlo en tu panel de control junto al producto:

El parámetro license se establece en la clave de licencia que deseas activar.
La respuesta a esta solicitud será un objeto JSON. Si la licencia se ha activado correctamente, la respuesta será:
{
"success": true,
"license": "valid",
"item_id": false (or Item ID if passed)
"item_name": "EDD Product Name",
"license_limit": 0,
"site_count": 2,
"expires": "2020-06-30 23:59:59",
"activations_left": "unlimited",
"checksum": "<md5 checksum>",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
Si la licencia no es válida y no se ha podido activar, la respuesta será:
{
"success": false,
"license": "invalid",
"item_id": false (or Item ID if passed)
"item_name": "EDD Product Name",
"error": "expired",
"expires": "2020-04-28 23:59:59",
"license_limit": 0,
"site_count": 1,
"activations_left": "unlimited",
"checksum": "<md5 checksum>",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
Posibles errores:
"missing" - License doesn't exist "missing_url" - URL not provided "license_not_activable" - Attempting to activate a bundle's parent license "disabled" - License key revoked "no_activations_left" - No activations left "expired" - License has expired "key_mismatch" - License is not valid for this product "invalid_item_id" - Invalid Item ID "item_name_mismatch" - License is not valid for this product "site_inactive" - Site is not active for this license "invalid" - License key does not match "valid" - License is valid
Comprobar si una licencia es válida / activa
Comprobar si una licencia es válida y no ha caducado es muy similar a activarla. Esta solicitud se realiza normalmente si necesita confirmar que una licencia sigue siendo válida después de haber sido activada. Las licencias caducan al cabo de un año (por defecto), por lo que esto es lo que utilizará para comprobar si la licencia ha caducado.
Para comprobar una licencia de forma remota, la URL que utilizará es:
https://YOURSITE.com/?edd_action=check_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
El parámetro item_id (item_id=8) se sustituirá por el ID real de su producto. Puede encontrarlo en su panel de control junto al producto:

El parámetro license se establece en la clave de licencia que desea comprobar.
La respuesta a esta solicitud será un objeto JSON. Si la licencia está activa y sigue siendo válida, la respuesta será:
{
"success": true,
"license": "valid",
"item_id": false, (or Item ID if passed)
"item_name": "EDD Product Name",
"checksum": "",
"expires": "2020-06-30 23:59:59",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"license_limit": 0,
"site_count": 2,
"activations_left": "unlimited",
"price_id": "2"
}
Si la licencia no es válida, la respuesta será:
{
"success": false,
"license": "invalid",
"item_id": false, (or Item ID if passed)
"item_name": "EDD Product Name",
"expires": "2014-10-23 00:00:00",
"license_limit": 0,
"site_count": 1,
"activations_left": "unlimited",
"checksum": "checksum",
"payment_id": 54224,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
Posibles estados de la licencia:
"disabled" - License key revoked "expired" - License has expired "key_mismatch" - License is not valid for this product "invalid_item_id" - Invalid Item ID "item_name_mismatch" - License is not valid for this product
Obtener información de la versión
Recuperar la información de la versión le permite recuperar de forma remota datos sobre el número de la última versión, incluidos los registros de cambios y los enlaces de descarga para los archivos de actualización.
Para obtener información de la versión de una clave de licencia:
https://YOURSITE.com/?edd_action=get_version&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
El parámetro item_id (item_id=8) se sustituirá por el ID real de su producto. Puede encontrarlo en su panel de control junto al producto:

Notas sobre la solicitud:
- Si utiliza item_name en lugar de item_id, introduzca el título del producto en Easy Digital Downloads exactamente. El uso de item_id es más preciso.
- Los parámetros license y url son opcionales. Si se omiten, se recuperará la información de la última versión, pero no se incluirá ningún enlace de descarga.
- A partir de Software Licensing 3.8, puede incluir versiones de plataforma en la solicitud. Si la versión de la plataforma no cumple los requisitos mínimos establecidos para el producto en Easy Digital Downloads, la
new_versionen la respuesta seráfalseen lugar del número de la nueva versión.php_versionywp_versionson compatibles por defecto.
La respuesta será un objeto JSON que se parecerá a esto:
{
"new_version": "2.0",
"stable_version": "2.0",
"name": "Restrict Content Pro",
"slug": "restrict-content-pro",
"url": "https://edd.com/downloads/restrict-content-pro/?changelog=1",
"last_updated": "2017-01-03 11:59:46",
"homepage": "https://edd.com/downloads/restrict-content-pro/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
}
Notas sobre la respuesta:
- Si no se proporciona ninguna clave de licencia en la solicitud get_version, la información de la versión se devuelve de todos modos; sin embargo, los valores de package y download estarán vacíos. Por el contrario, si se proporciona una clave de licencia pero no pertenece al item_id o item_name de la solicitud, se devolverá una respuesta de error con un motivo como valor de msg.
- Se incluirá un download_link si existe un archivo, independientemente del estado de la licencia. Sin embargo, la descarga no funcionará a menos que la licencia esté activa. Esto permite que los sitios que tienen una licencia caducada, la renueven, pero no tengan que esperar a que se borre la caché de actualización antes de obtener la actualización.
- La propiedad sections es un array serializado que incluye la descripción completa del producto y el registro de cambios. Si se utiliza el análisis de ReadMe.txt para plugins de WordPress, también incluirá información adicional proporcionada a través del archivo readme.
Si desea recuperar información sobre una versión beta, agregue &beta=1 al final de la URL de su solicitud de API, de la siguiente manera:
https://YOURSITE.com/?edd_action=get_version&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com&beta=1
Recuperar versiones de varios productos a la vez
Recupere versiones de varios productos en una sola solicitud, utilizando el argumento products. Este argumento acepta una matriz de elementos. Cada elemento debe contener los mismos argumentos que se envían en una sola solicitud.
Aquí tiene un ejemplo usando cURL:
curl -d edd_action=get_version -d products[0][item_id]=356 -d products[0][license]=59cc77ea94a2d867069a9d96142a35b8 -d products[0][url]="https://licensedsite.com" -d products[1][item_id]=46 -d products[1][license]=5cdd12a966c498fc6e423e261fe05303 -d products[1][url]="https://licensedsite.com" https://YOURSITE.com
Y aquí tiene un ejemplo usando la función de WordPresswp_remote_post():
$response = wp_remote_post( 'https://YOURSITE.com', array( 'body' => array( 'edd_action' => 'get_version', 'products' => array( 'my-first-plugin' => array( 'item_id' => 356, 'license' => '59cc77ea94a2d867069a9d96142a35b8', 'url' => 'https://licensedsite.com' ), 'my-second-plugin' => array( 'item_id' => 46, 'license' => '5cdd12a966c498fc6e423e261fe05303', 'url' => 'https://licensedsite.com' ) ) ) ) );
La respuesta será un objeto JSON que contendrá los resultados de cada uno de los productos proporcionados. Las claves de producto que proporcionó en la solicitud se conservarán en la respuesta. Aquí tiene un ejemplo:
{
"my-first-plugin": {
"new_version": "2.0",
"stable_version": "2.0",
"name": "My First Plugin",
"slug": "my-first-plugin",
"url": "https://edd.com/downloads/my-first-plugin/?changelog=1",
"last_updated": "2021-01-03 11:59:46",
"homepage": "https://edd.com/downloads/my-first-plugin/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
},
"my-second-plugin": {
"new_version": "1.3",
"stable_version": "1.3",
"name": "My Second Plugin",
"slug": "my-second-plugin",
"url": "https://edd.com/downloads/my-second-plugin/?changelog=1",
"last_updated": "2021-03-08 11:59:46",
"homepage": "https://edd.com/downloads/my-second-plugin/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
}
}
Acceder a la API en otros idiomas
Dado que la API utiliza solicitudes HTTP POST sencillas, se puede acceder a ella en casi cualquier idioma. Aquí tiene algunos ejemplos.
- API de licencias de software – Ejemplo usando cURL
- API de licencias de software – Ejemplo usando Perl
- API de licencias de software – Ejemplo usando Python
- API de licencias de software – Ejemplo usando Ruby
- API de licencias de software – Ejemplo usando C#
- API de licencias de software – Ejemplo con JavaScript
- API de licencias de software – Ejemplo usando jQuery
Preguntas frecuentes / Solución de problemas
¿Puedo crear claves con formato personalizado?
El formato de clave predeterminado es una simple suma md5.
Puede cambiar ese formato a casi cualquier cosa que desee.
¿Cómo evito que mi software, plugin o tema se pueda acceder si la licencia ha caducado o está deshabilitada?
El estado de esta licencia no afecta al software, simplemente indica el estado de la clave. Depende del desarrollador leer ese estado para hacer algo. Por ejemplo, si una clave ha caducado, el software podría optar por dejar de funcionar o podría optar por mostrar una advertencia.
Una excepción a esto es que cuando EDD detecta una clave caducada o deshabilitada asociada a una descarga, los enlaces de descarga, incluido el enlace get_version, no funcionarán. Por lo tanto, las actualizaciones ya no funcionarán a través de la respuesta get_version.
Si tiene problemas para que las claves de licencia se activen en su implementación de
Licencias de Software, aquí tiene algunos consejos para resolver problemas comunes.
Solicitudes bloqueadas por un plugin de seguridad
Los plugins de seguridad para WordPress a menudo tienen funciones que interfieren con las solicitudes de la API de claves de licencia. Estas funciones tienden a hacer que la activación (y otras solicitudes de API) devuelvan una respuesta inesperada, lo que provoca que la rutina de activación falle.
Por ejemplo, podría recibir una respuesta como esta del servidor si tiene un plugin de seguridad que está interfiriendo:
[response] => Array ( [code] => 403 [message] => Forbidden )
Se sabe que el plugin iThemes Security tiene una configuración que puede causar este problema. La configuración se llama
Filtrar cadenas de consulta sospechosas en la URL
Para resolver el problema, simplemente desactive la configuración
Filtrar cadenas de consulta sospechosas en la URL. Si no está utilizando iThemes Security, se llamará de manera diferente, aunque similar.
Solicitudes bloqueadas por reglas especiales de .htaccess
Algunos sitios agregarán reglas especiales al archivo .htaccess para bloquear ciertas direcciones IP o agregar protección adicional al sitio.
Si tiene reglas especiales de .htaccess y las claves de licencia no están activadas, intente eliminar las reglas y luego activar las claves de licencia. Si las claves de licencia se activan correctamente ahora, deberá ajustar las reglas para permitir que las rutinas de la API de licencias funcionen.
Solicitudes bloqueadas por un plugin de "próximamente" o de mantenimiento
Si está utilizando un plugin de modo "próximamente" o de mantenimiento, es probable que las claves de licencia no se puedan activar, ya que el plugin de modo "próximamente" / mantenimiento bloqueará las solicitudes. Para resolver el problema, simplemente desactive el modo de mantenimiento o el plugin "próximamente". Si necesita dejarlo activo, desactívelo temporalmente para probar el proceso de activación de la clave de licencia y luego reactive el plugin.
