La Extensión de Licenciamiento de Software para Easy Digital Downloads requiere cierta configuración e integración, y es posible que experimentes algunos problemas. Algunos de ellos se describen aquí con posibles soluciones.
Tabla de Contenidos
Preguntas frecuentes
¿Cómo contactas a los clientes cuando hay una actualización disponible?
Se recomienda utilizar un servicio de marketing por correo electrónico, como Mailchimp o ConvertKit. No se recomienda WordPress para enviar correos masivos, por lo que el contacto con los usuarios debe hacerse externamente a EDD/WordPress.
¿Es posible vender licencias personalizadas / empresariales?
Si bien no hay soporte incorporado para vender licencias personalizadas o empresariales que puedan activarse en un mayor número de sitios, existen soluciones alternativas para que esto funcione. La opción más sencilla es facturar al cliente a través de una factura de Stripe o PayPal. Una vez pagado, crea manualmente un pedido y actualiza el límite de activación de la licencia al número de activaciones que deseas que el cliente tenga disponibles.
¿El Licenciamiento de Software funciona con Amazon S3?
Sí, es totalmente compatible sin problemas y sin configuraciones especiales.
¿Los entornos locales / de desarrollo impactan el recuento de activaciones?
Si eliges limitar el número de activaciones de licencia que un cliente puede tener, aún es posible permitirle activar una licencia en su entorno de desarrollo local sin afectar su recuento de activaciones.
Esto permite a tus usuarios mantenerse fácilmente actualizados en sus entornos de prueba y desarrollo sin obtener activaciones de licencia gratuitas.
Para que esto funcione, deben suceder dos cosas:
1) Ignorar URLs de Host Local
En tu administrador de WordPress, en
Descargas → Configuración → Extensiones → Licenciamiento de Software busca una casilla de verificación que diga Ignorar URLs de Host Local. Asegúrate de que esté marcada.

2) Educar a los Clientes
Consulta esta guía sobre cómo ignorar activaciones para sitios de desarrollo.
¿Cómo crear formatos de clave de licencia personalizados?
Las claves de licencia de EDD son por defecto una suma md5 como esta:
e0c7ccc47b2613c82d1073a4214deecc
Si deseas tener algo diferente, con Licenciamiento de Software es tan fácil como crear una función para generar claves únicas y consistentes y engancharla a un filtro llamado edd_sl_generate_license_key.
Los formatos de clave de licencia pueden ser realmente lo que desees, siempre que sean únicos y consistentes. Si deseas claves en este formato:
username_timestamp_licensekey sdavis2702_20151015120022_e0c7ccc47b2613c82d1073a4214deecc
Puedes usar esta función:
// Example shown how to base the MD5 off of the user's email and purchase date
function pw_edd_license_md5_user_and_date( $key, $license_id, $download_id, $payment_id, $cart_index ) {
$name = get_user_by( 'email', edd_get_payment_user_email( $payment_id ) );
$date = get_post_field( 'post_date', $payment_id );
$timestamp = strtotime($date);
$nice_date = date( 'Yndhis', $timestamp );
$license = md5( $license_id );
$key = $name->user_nicename . '_' . $nice_date . '_' . $license;
return $key;
}
add_filter( 'edd_sl_generate_license_key', 'pw_edd_license_md5_user_and_date', 10, 5 );
Una función más simple usa solo el nombre de usuario y la clave de licencia:
// prepend user's username to license key
function sd_edd_license_username_md5( $key, $license_id, $download_id, $payment_id, $cart_index ) {
$name = get_user_by( 'email', edd_get_payment_user_email( $payment_id ) );
$license = md5( $license_id );
$key = $name->user_nicename . '_' . $license;
return $key;
}
add_filter( 'edd_sl_generate_license_key', 'sd_edd_license_username_md5', 10, 5 );
Lo más importante que debes sacar de este documento es que puedes usar cualquier código que produzca cadenas únicas y consistentes y usar esas cadenas como claves de licencia.
Mostrar una lista de las claves de licencia del Cliente
El siguiente código te permitirá recuperar y mostrar una lista de claves de licencia para un Cliente específico.
Nota: El “$customer->id” debe ser reemplazado con el ID real del Cliente.
$licenses = edd_software_licensing()->licenses_db->get_licenses( array( 'number' => -1, 'customer_id' => $customer->id, 'orderby' => 'id', 'order' => 'ASC', ) );
¿Qué sucede si el dominio de mi tienda deja de funcionar?
Te animamos a usar el EDD Software Licensing SDK para administrar las licencias en tu plugin o tema de WordPress. El SDK no enviará solicitudes de API repetidas a tu sitio si no recibe una respuesta válida.
Si tienes la intención de cambiar de dominio o cerrar un nombre de dominio, lo mejor sería lanzar una actualización que use el nuevo dominio o elimine por completo las llamadas a la API.
Problemas Comunes
Personalizar código de ejemplo
El código de ejemplo que viene con Software Licensing puede usar prefijos de función como edd_ y edd_sl_. Estos deben cambiarse para que coincidan con tu propio plugin, y la búsqueda y reemplazo es una excelente manera de hacerlo, pero debes tener cuidado con tu cadena de búsqueda.
Hay funciones con prefijos como edd_action_ que no deben cambiarse. Asegúrate de que solo estás cambiando los prefijos de los nombres de tus propias funciones y no los prefijos principales de EDD.
Solución de Problemas de Actualización
Si estás viendo errores al intentar actualizar plugins y temas de tu tienda de Software Licensing, aquí hay algunas cosas que puedes verificar, dependiendo del error que se esté informando.
Personaliza tu actualizador
Si estás utilizando la clase de actualizador de plugins heredada proporcionada en versiones anteriores de Software Licensing, es probable que estés utilizando la clase EDD_SL_Plugin_Updater para administrar las licencias y las comprobaciones de actualización. Existe el riesgo de un "conflicto" si otro plugin incluye una versión diferente de la clase EDD_SL_Plugin_Updater de la que estás empaquetando con tu plugin. Puedes renombrar esta clase a algo único para tu plugin, de modo que evite conflictos. Por ejemplo, si el nombre de mi plugin es "My Custom Ads", podría renombrar EDD_SL_Plugin_Updater a MCA_Plugin_Updater y cambiar todas las referencias a ella. Alternativamente, usar el SDK de Easy Digital Downloads Software Licensing simplificará enormemente cómo puedes administrar las actualizaciones de plugins/temas.
Errores SSL
Hay muchos errores que pueden ser causados por problemas de conectividad SSL; los siguientes se ven comúnmente con Software Licensing.
SSL: el nombre del sujeto del certificado no coincide
Este error significa que el certificado SSL instalado en tu sitio no coincide con tu nombre de dominio principal. Esto puede suceder típicamente en entornos de alojamiento compartido y la solución más común es solicitar una dirección IP dedicada a tu proveedor de alojamiento. Si tu proveedor de alojamiento no admite direcciones IP dedicadas, deberás trabajar con tu proveedor de alojamiento para configurar una cadena SSL adecuada que coincida con tu dominio principal, en lugar de un certificado SSL comodín compartido.
SSL23_GET_SERVER_HELLO: fallo de apretón de manos de alerta sslv3
Este error de Handshake SSL ocurre cuando la versión de OpenSSL en el servidor del sitio que solicita la actualización está desactualizada y no admite los Protocolos SSL que requiere la tienda que entrega la actualización. Hay dos maneras de resolver este problema. La solución ideal es que el sitio que solicita la actualización verifique que su software OpenSSL esté actualizado para su plataforma. OpenSSL es un software de servidor que facilita la comunicación a través del protocolo HTTPS. Si esta no es una solución posible, puede trabajar con su proveedor de hosting o administrador de servidor para configurar su servidor web para que acepte estas versiones SSL desactualizadas, pero esto no es ideal ya que permite conexiones menos seguras a su servidor.
Error de cURL 35: Error de conexión SSL
Este error específico con Software Licensing al entregar actualizaciones generalmente se ve al usar la opción SSL Flexible de Cloudflare. Esta opción causa un problema de cadena con algunas versiones de cURL que existen en el servidor cliente que solicita la actualización. Hay un par de maneras de solucionar esto desde el lado del servidor (sin tener que solicitar al cliente que actualice su versión de cURL). La primera es actualizar a un SSL de pago de Cloudflare. Los Certificados SSL de nivel de pago de Cloudflare generalmente no presentan este problema. La otra solución es comprar un Certificado SSL de un tercero e instalarlo directamente en su servidor.
Descarga fallida. SSL: ningún nombre de sujeto de certificado alternativo coincide con el nombre del host de destino
An error occurred while updating Resurrect: Download failed. SSL: certificate subject name '*.example.com' does not match target host name 'anotherexample.com'
Esto ocurre cuando el sitio del cliente tiene una versión antigua de OpenSSL o cURL. Los dos sitios entonces no pueden comunicarse de forma segura y la actualización falla.
La única solución es que el sitio con la versión más antigua del software en su servidor se actualice a las últimas versiones.
Descarga fallida. Certificado SSL del par o clave remota SSH no fue OK
Si sus clientes ven este error al actualizar sus productos, deberá ponerse en contacto con su proveedor de hosting web para informarle que su certificado SSL está mal configurado:
Descarga fallida. Servicio no disponible
Verá este error cuando intente actualizar un plugin o tema en un sitio que también aloja este plugin o tema. Debido a la forma en que Software Licensing se integra con la API de Actualización de WordPress, actualmente no es posible actualizar sus propios temas o plugins desde el sitio que los vende. Cuando WordPress instala una actualización, pone temporalmente su sitio en modo de mantenimiento y, durante ese proceso, su sitio no puede instalar su propia actualización. Para actualizar un plugin o tema desde un sitio que también lo vende, deberá instalar la actualización manualmente.
Descarga fallida. No autorizado / Demasiadas redirecciones
Este error ocurre al actualizar tu plugin o tema a una nueva versión. Al subir tu nueva versión, si agregas un nuevo archivo con tu nueva versión y luego eliminas la fila del archivo anterior, en lugar de reemplazar la versión actual, es posible que ocurra este error. Actualmente somos conscientes de este error y estamos trabajando para resolverlo; sin embargo, la solución simple mientras tanto es hacer clic en el botón 'Actualizar' por segunda vez, para reescribir las claves del archivo, o reemplazar siempre el archivo actual en lugar de agregar tus nuevos archivos en una segunda fila de archivos.
Paquete de actualización no disponible
Cuando aparece este error, generalmente significa:
- Hay un problema con la activación de la licencia en el sitio del cliente. Hay pocas cosas que verificar si un cliente informa este error. Lo primero es que el dominio que intentan actualizar ha sido activado para la licencia. Puedes determinar esto yendo a Descargas → Licencias. Luego puedes buscar la clave de licencia que el usuario intenta actualizar y hacer clic en 'Administrar sitios' para asegurarte de que el dominio en el que se encuentran esté en la lista. Si no lo está, puedes agregarlo tú mismo desde el administrador, o hacer que el cliente visite su página de administración de licencias y lo active ellos mismos.
- El otro resultado es que una licencia está caducada o deshabilitada. Si este es el caso, el cliente necesita renovar su licencia, o un administrador del sitio la ha deshabilitado manualmente.
Nombre de carpeta largo y extraño después del actualizador
Esto sucede cuando el archivo .zip se crea de manera incorrecta. Al crear el archivo .zip final, es importante comprimir la carpeta *y* su contenido en lugar de solo el contenido de la carpeta.
La estructura del archivo zip debería verse algo así:
nombre_archivo.zip
– nombre-producto/
— archivo aquí
— otro archivo aquí
En otras palabras, los archivos deben estar en una carpeta y no en la parte superior del archivo zip. Vuelve a empaquetar tu archivo para incluir el nombre de la carpeta dentro y eso lo solucionará.
Integración con CloudFlare
Si estás utilizando CloudFlare como proveedor de CDN, Capa de Caché o SSL, te recomendamos configurar CloudFlare para omitir la caché de todas las URL que contengan la siguiente cadena:
/edd-sl
Este es el punto final de la API para verificar el estado de la licencia y entregar paquetes de actualización. Si estas URL de punto final se almacenan en caché, puede causar problemas para entregar correctamente las actualizaciones a tus clientes.
PCLZIP_ERR_BAD_FORMAT
Este error no es exclusivo de la plataforma EDD Software Licensing, pero tiene un par de soluciones que puedes verificar. La primera es que haya suficiente espacio en disco para que el archivo se descargue y descomprima (asume que necesitarás 2 veces el tamaño del archivo .zip para procesar la actualización). Si tu archivo .zip es de 1 MB, necesitarás poco más de 2 MB disponibles para procesar correctamente una actualización. Estos números no son exactamente 2 veces, pero es una buena medida para empezar.
La otra cosa a verificar es que el archivo .zip no esté corrupto. Puedes probar esto transfiriendo el archivo .zip a otra computadora (adjunto en un correo electrónico o a través de USB) y tratando de descomprimirlo allí también. Si no se descomprime en una computadora diferente, es probable que haya un problema con la creación del archivo .zip en la computadora original.
Este error también puede ser causado por un plugin o un script que está lanzando un error. Cuando la API de Licenciamiento de Software intenta crear el paquete zip, el error se agrega al archivo zip, rompiendo su estructura. Normalmente, esto significa que tu sitio web tiene WP_DEBUG configurado como TRUE en el archivo wp-config.php. Si bien es una buena manera de verificar cualquier error, es mejor tenerlo configurado como FALSE en un sitio web en vivo. Alternativamente, puedes mantenerlo habilitado pero registrar los errores en un archivo en tu servidor, en el archivo wp-contents/debug.log. Haz esto agregando las siguientes líneas al archivo wp-config.php:
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_display', false );
