Productos digitales y virtuales
Módulo 3: Productos · Tiempo de lectura: 11 minutos
Objetivo de aprendizaje: Tras esta lección podrá vender productos digitales y virtuales de forma segura: elegirá un método de descarga seguro, protegerá la carpeta de descargas, establecerá límites y gestionará correctamente el derecho de desistimiento en los contenidos digitales.
Conceptos clave: producto virtual, producto descargable, enlace de descarga, límite de descargas, caducidad, método de descarga (Forzar descargas, X-Accel-Redirect / X-Sendfile, Solo redirección), woocommerce_uploads, .htaccess, nginx, directorios de descarga aprobados (Approved download directories), acceso tras el pago, contenido digital, consentimiento expreso, renuncia al derecho de desistimiento
Virtual y descargable: dos casillas distintas
En un producto simple o en una variación verá dos casillas. Se parecen, pero hacen cosas diferentes:
- Virtual (Virtual) significa: no se envía nada. WooCommerce no cobra gastos de envío y no pide dirección de envío al finalizar la compra (si todo lo que hay en el carrito es virtual). Piense en una cata de té presencial, una tarjeta regalo que envía por correo electrónico o un taller en línea.
- Descargable (Downloadable) significa: tras el pago, el cliente recibe uno o varios archivos. WooCommerce crea un enlace de descarga por cliente y lo muestra en el correo de confirmación y en Mi cuenta > Descargas.
Un libro de recetas digital en pdf suele ser ambas cosas: no se envía nada por correo postal y hay un archivo. Un libro de recetas impreso con un pdf gratuito es descargable pero no virtual: el libro sí se envía por correo postal.
Theehuis Example vende el "Receptenboek Thee en Taart" (libro de recetas de té y tartas) en pdf por € 9,95. Casillas: virtual y descargable.
Cómo funciona una descarga y por qué importa el método
Si sube un archivo a un producto descargable, WooCommerce lo guarda en la carpeta wp-content/uploads/woocommerce_uploads/. Por defecto añade una cadena aleatoria de caracteres al nombre del archivo (ajuste "Append a unique string to filename for security", activado por defecto). El cliente nunca recibe esa dirección, sino un enlace a su tienda con una clave de pedido y un código de descarga. En cada clic, WooCommerce comprueba: ¿pertenece esta descarga a un pedido pagado, no se ha agotado el límite, no ha caducado? Solo entonces el cliente recibe el archivo.
Cómo llega después el archivo al cliente lo elige en WooCommerce > Ajustes > Productos > Productos descargables, en el método de descarga (File download method):
| Método | Cómo funciona | Seguridad |
|---|---|---|
| Forzar descargas (Force downloads, por defecto) | PHP lee el archivo y lo envía él mismo | La dirección real permanece oculta. Los archivos grandes pueden atascarse en algunos servidores o chocar con el límite de tiempo de PHP |
| X-Accel-Redirect / X-Sendfile | PHP comprueba, el servidor web envía el archivo | Igual de seguro y mejor para archivos grandes; el servidor web debe admitirlo (en Apache se necesita el módulo mod_xsendfile, nginx admite X-Accel-Redirect). Consulte a su proveedor de alojamiento |
| Solo redirección (Redirect only) | WooCommerce redirige al cliente a la dirección real del archivo | Inseguro: quien tenga la dirección puede compartirla y el archivo se puede obtener sin comprarlo. El propio WooCommerce lo califica de "Insecure" |
Elija por tanto Forzar descargas o X-Sendfile. La redirección es solo una solución de emergencia, y el ajuste "Allow using redirect mode (insecure) as a last resort" hace que WooCommerce recurra a la redirección si el otro método falla; déjelo desactivado salvo que sepa por qué lo necesita.
Proteger la carpeta
Con Forzar descargas o X-Sendfile, la carpeta woocommerce_uploads debe estar cerrada a los visitantes normales. De lo contrario, alguien que adivine el nombre del archivo o lo saque de un enlace filtrado podría descargar el archivo directamente. Por eso WooCommerce coloca dos archivos en esa carpeta durante la instalación:
- un
index.htmlvacío, para que la carpeta no muestre una lista de archivos; - un
.htaccesscondeny from all(con el método Solo redirección:Options -Indexes).
Ese archivo .htaccess funciona en Apache y LiteSpeed (como en WebOké y en muchos otros alojamientos compartidos). En nginx, el servidor web no lee .htaccess. Allí debe haber una regla en la configuración del servidor que bloquee la carpeta. En un alojamiento nginx gestionado, a veces se encarga el proveedor; en un VPS propio debe hacerlo usted. WooCommerce lo comprueba por sí mismo y muestra un aviso en la administración (y en Salud del sitio) si la carpeta no parece protegida.
Algunos puntos a tener en cuenta:
- Un 200 vacío no es una prueba. Si solicita la carpeta y ve una página en blanco, puede ser el
index.htmlvacío mientras los propios archivos siguen accesibles. Por eso, pruebe también un archivo (el ejercicio lo hace). - Archivos externos. En un producto también puede indicar un enlace a un archivo situado en otro lugar. Para ello WooCommerce tiene la lista de directorios de descarga aprobados (Approved download directories): solo los archivos de esas carpetas o de esas direcciones pueden usarse como descarga. Así nadie con permisos de administración sobre un producto puede ofrecer como descarga, por error o a propósito, cualquier archivo del servidor. Mantenga esa lista corta.
- Copias de seguridad y staging. La carpeta se incluye en su copia de seguridad. En un entorno de staging también están, por tanto, sus archivos de pago: proteja el staging (lección 7.3).
Límites y acceso
Para cada producto descargable o cada variación puede configurar:
- Límite de descargas (Download limit): cuántas veces puede descargar el cliente. Vacío significa ilimitado. Un límite de, por ejemplo, 5 limita que se comparta, pero genera quejas cuando alguien se compra un portátil nuevo. Elija algo razonable y ayude a los clientes que lo pidan.
- Caducidad de la descarga (Download expiry): tras cuántos días deja de funcionar el enlace.
Ajustes generales en Productos descargables:
- Las descargas requieren iniciar sesión (Downloads require login), desactivado por defecto. Activado significa que los invitados no pueden descargar nada; actívelo solo si también exige cuentas de cliente.
- Acceso tras el pago (Grant access to downloadable products after payment), activado por defecto: el cliente puede descargar en cuanto el pedido tiene el estado Procesando, es decir, justo después de un pago correcto. Si está desactivado, solo a partir de Completado.
Desistir en contenidos digitales
Con una tetera normal, el cliente tiene 14 días para pensárselo (lección 5.2). Con una descarga es complicado: quien tiene el pdf, lo tiene, también después de desistir. Por eso existe una excepción, pero solo con condiciones. En la UE figura en el artículo 16 de la Directiva 2011/83/UE; en los Países Bajos, en el artículo 6:230p, letra g, del Código Civil neerlandés (BW). No hay derecho de desistimiento en el contenido digital que no se suministra en un soporte material si:
- el suministro ha comenzado con el consentimiento expreso previo del consumidor;
- el consumidor ha declarado que con ello renuncia a su derecho de desistimiento; y
- usted ha facilitado una confirmación de ello (en la confirmación del contrato, en un soporte duradero como el correo del pedido).
Si falta cualquiera de las tres, el cliente conserva su derecho de desistimiento, aunque ya haya descargado. En Bélgica y Alemania rige la misma norma de la UE en su propia legislación (véase la lección 5.2). En España, la misma norma de la UE se recoge en el Texto refundido de la Ley General para la Defensa de los Consumidores y Usuarios (TRLGDCU).
WooCommerce no lo gestiona automáticamente. Necesita:
- una casilla obligatoria al finalizar la compra, solo cuando haya contenido digital en el carrito, con un texto como "Acepto que el suministro comience de inmediato y sé que con ello pierdo mi derecho de desistimiento";
- el mismo texto como confirmación en el correo del pedido para esos productos;
- la frase adecuada en su información sobre el desistimiento indicando que esto se aplica a las descargas.
Hay extensiones que añaden una casilla así; el bloque de finalizar compra también ofrece opciones para campos adicionales. Evalúelas como cualquier plugin. Una casilla que viene marcada de antemano no cuenta como consentimiento expreso (lección 5.4).
Tenga en cuenta la diferencia con los servicios virtuales, como un taller en una fecha concreta. Ahí se aplican las normas de los servicios, con otras excepciones. Lea la lección 5.2.
Resumen
- Virtual = no se envía nada; descargable = archivos tras el pago. Un pdf suele ser ambas cosas.
- Elija Forzar descargas o X-Accel-Redirect / X-Sendfile; Solo redirección es inseguro.
- La carpeta
woocommerce_uploadsdebe estar cerrada:.htaccessen Apache y LiteSpeed, una regla del servidor en nginx. Pruebe un archivo real, no solo la carpeta. - Mantenga corta la lista de directorios de descarga aprobados y establezca límites razonables.
- Sin derecho de desistimiento en las descargas solo con consentimiento expreso, renuncia al derecho y una confirmación; WooCommerce no lo hace automáticamente. En España, esta norma figura en el TRLGDCU.
Cuestionario
Ejercicio
Ejercicio A3.3: ¿Están protegidas sus descargas? Este ejercicio solicita rutas que no están enlazadas y, por eso, solo funciona con su propia tienda. Primero demuestra que el dominio es suyo: crea un registro TXT _weboke-cursus.<su dominio> con el código que recibe, o coloca un archivo /.well-known/weboke-cursus-<code>.txt con ese código dentro. Después introduzca la dirección de su tienda y, si lo desea, la ruta de un archivo descargable tal como WooCommerce la muestra en el producto (empieza por /wp-content/uploads/woocommerce_uploads/). El programa solicita la carpeta (sin seguir redirecciones, solo el principio) y, si introdujo una ruta, una sola vez las cabeceras de ese archivo. Verde si la carpeta devuelve 401, 403 o 404, o una página sin lista de archivos, y el archivo devuelve 401, 403 o 404. Naranja si no introdujo ningún archivo: entonces solo se ha comprobado la carpeta, y una página en blanco no dice lo suficiente. Rojo si la carpeta muestra una lista de archivos, o si el archivo se puede descargar sin más (200): en ese caso cualquiera con la dirección puede obtenerlo sin comprarlo. El programa solo guarda los códigos de estado, nunca el archivo.
Pregunta para usted (no se corrige): ¿qué método de descarga está configurado en su tienda y cómo ha resuelto el desistimiento en sus productos digitales?
Para saber más
- Digital and downloadable product handling (woocommerce.com, en inglés): https://woocommerce.com/document/digital-downloadable-product-handling/
- Curso gratuito de WordPress 7.4: Reforzar la seguridad del sitio: permisos, cabeceras y plugins de seguridad
- Prohibido (403): No tiene permiso para acceder a / en este servidor
- Código Civil neerlandés (Burgerlijk Wetboek), libro 6, artículo 6:230p (wetten.overheid.nl, en neerlandés): https://wetten.overheid.nl/BWBR0005289/
La base de conocimientos describe la situación en WebOké (LiteSpeed, .htaccess funciona); con otros proveedores funciona de forma similar, salvo en nginx.
