Saltar al contenido
pcreative Commerce

Vender productos descargables

Un libro en PDF, un pack de fuentes, un curso en vídeo, una plantilla.

Un libro en PDF, un pack de fuentes, un curso en vídeo, una plantilla. Subes el fichero a una variante y esa variante se vende como descarga: sin envío, con un enlace propio para cada comprador y solo cuando el pago esté cobrado.

Se hace en la ficha del producto, en cada variante: Descarga digital.

Subir el fichero

Eliges la variante y subes el fichero. A partir de ahí:

  • No se envía. La variante deja de pedir porte y dirección de envío. Si quitas el último fichero, vuelve a ser un producto físico.
  • Va por variante, no por producto. Así puedes vender el mismo curso «solo vídeo» y «vídeo + material» con ficheros distintos, o un libro en papel y en PDF dentro del mismo producto.
  • Una variante puede llevar varios ficheros. El comprador recibe todos.

El tope por fichero es de 100 MB. Se cambia con PCC_TOPE_DIGITAL_MB en el .env del backend. Para algo más grande, un curso entero por ejemplo, parte el contenido en varios ficheros.

Los ficheros se guardan en privado/digital, fuera de lo que se sirve en público. Nadie llega a ellos con una URL: solo con el enlace firmado de su pedido. En Docker viven en el volumen privado, así que sobreviven a actualizar.

Lo que no se puede subir

exe, msi, bat, cmd, com, scr, ps1, vbs, js, jar, sh, app, dmg y apk se rechazan.

No es que no puedas vender programas: es que un ejecutable que se baja suelto desde tu dominio es exactamente lo que el navegador y el antivirus del cliente tratan como sospechoso, y a quien le salta el aviso deja de fiarse de tu tienda. Empaquétalo en un ZIP y súbelo así.

El nombre del fichero se limpia al subirlo: se quedan letras, números, espacios, puntos, guiones y paréntesis, hasta 120 caracteres. Es el nombre con el que se descarga.

Cuántas veces y durante cuánto tiempo

Dos ajustes por variante, y los dos pueden quedar vacíos:

  • Descargas por compra. Vacío es sin límite. Con un número, cada descarga resta una y, al llegar a cero, el enlace deja de funcionar.
  • Días de acceso. Vacío es sin caducidad. Con un número, el comprador puede bajarlo durante esos días, contados desde que hace el pedido, no desde que se cobra.

Un límite sirve para que un enlace compartido en un foro no dé para mil descargas. Pero si lo pones muy bajo, lo que llega es el correo del cliente al que se le cortó la conexión a medias. Tres o cinco suele bastar.

Los enlaces caducan a los 15 minutos

El comprador no recibe un enlace al fichero. Recibe un correo que le manda a la página de su pedido —llevando dentro la prueba de que el pedido es suyo—, y es ahí donde se genera el enlace de descarga, firmado y válido durante 15 minutos.

Así, un enlace que se copia, se reenvía o se queda en el historial deja de servir enseguida. Si caduca, se vuelve al pedido y sale otro. La cuota de descargas y los días de acceso siguen contando igual: el enlace es solo la puerta, no el permiso.

La firma se hace con PCC_CLAVE_CIFRADO o, si no está, con JWT_SECRET. Si cambias esa clave, los enlaces que estuvieran abiertos dejan de valer. Como duran 15 minutos, no pasa nada: basta con volver al pedido.

Cada descarga queda apuntada con su fecha y la IP desde la que se hizo.

Nada se descarga antes de cobrar

El acceso se crea al hacer el pedido, pero bloqueado. Se abre cuando el pago se marca como cobrado, y es entonces cuando sale el correo «Tus descargas del pedido».

Un pedido por transferencia entra antes que el dinero. Si la descarga se abriera al pedir, cualquiera podría encargar, bajarse el fichero y no pagar nunca. Con un producto físico todavía tienes el paquete; con uno digital, en cuanto se baja ya no hay nada que retener.

Si devuelves el pedido entero, el acceso se retira. Con una devolución parcial se mantiene.

El consentimiento antes de entregar, en la UE

En la Unión Europea (y en el Espacio Económico Europeo, Reino Unido y Turquía), quien compra a distancia tiene 14 días para desistir. Para el contenido digital hay una excepción: el derecho se pierde si el cliente pidió expresamente que se le entregara ya y aceptó que al hacerlo lo perdía.

Por eso, en esos países, el checkout enseña una casilla y no deja cerrar el pedido sin marcarla. El texto por defecto viene en inglés y en español, en el idioma del cliente; cualquier otro idioma recibe el inglés. En inglés:

I ask for the digital content to be supplied now, before the withdrawal period ends, and I understand that as soon as the download starts I lose my right of withdrawal for that part of the purchase.

En español:

Pido que el contenido digital se me entregue ya, antes de que termine el plazo de desistimiento, y sé que en cuanto empiece la descarga pierdo el derecho a desistir de esa parte de la compra.

La aceptación se guarda en el pedido, con la fecha, el texto que se aceptó y su versión. Y en cuanto empieza la primera descarga, esa línea del pedido deja de admitir el desistimiento: el formulario de desistimiento la excluye y dice por qué.

Sin la casilla, el cliente podría bajarse el fichero y desistir después. Y tendrías que devolverle el dinero sin poder recuperar lo que se llevó.

La confirmación viaja en el correo del pedido

Marcar la casilla no acaba el trámite. Las mismas normas que quitan el derecho de desistimiento piden además que al comprador se le dé confirmación de ese consentimiento en un soporte duradero. Aquí ese soporte es el correo de confirmación del pedido, el que sale en cuanto se cierra la compra.

Cuando el pedido lleva el consentimiento, ese correo incluye una sección Contenido digital con:

  • el texto exacto que se aceptó, tal y como quedó guardado y sin traducir. Es la constancia de lo que la persona leyó, así que traducirlo lo convertiría en otro texto. Lo que lo rodea —el rótulo, la frase que lo presenta, la fecha— sí va en el idioma del pedido, de modo que un pedido hecho en inglés enseña un rótulo en inglés sobre un texto en español si eso es lo que leyó el cliente.
  • la fecha en que se marcó la casilla.
  • la versión del texto.

Va en las dos versiones del correo, la de HTML y la de texto plano, porque hay programas de correo que solo enseñan la segunda.

Un pedido sin consentimiento digital no lleva esa sección: ni un bloque vacío ni un rótulo suelto.

El orden en que pasan las cosas lo sostiene la cola de eventos: el correo de confirmación cuelga de pedido creado, mientras que las descargas, las claves de juego y las licencias las abre pago capturado, que siempre entra en la cola después. La confirmación por escrito sale, por tanto, antes de entregar el contenido.

En Ajustes → Facturación → Devoluciones y contenido digital decides dos cosas:

  • Pedir permiso antes de entregar una descarga. Viene según el país de la tienda: encendido en la UE, apagado donde la ley no lo pide. Puedes encenderlo en cualquier país.
  • Texto de la casilla, si quieres otras palabras. Tu texto sustituye a los dos de serie y se enseña tal cual lo escribiste, en todos los idiomas. Que siga diciendo las dos cosas: que se entrega ya y que se pierde el desistimiento. Si falta una, la casilla no sirve de nada.

Subir una versión nueva

Si subes un fichero con el mismo nombre que uno que ya tiene la variante, no se añade: es una versión nueva que sustituye a la anterior.

  • Todos los que ya lo compraron pasan a bajarse el nuevo, desde el mismo pedido. No hay que avisar a nadie a mano ni reenviar nada.
  • Se les renueva la cuota: vuelven a tener todas las descargas de la variante y los días de acceso cuentan otra vez desde hoy. Quien ya había gastado sus descargas, o dejado caducar el acceso, tiene que poder bajarse la corrección que acabas de publicar.
  • Se guarda la primera vez que cada comprador descargó. Ese dato no se toca con la versión nueva, porque es el que dice que el contenido ya se entregó y el desistimiento no aplica.
  • Quien tenga el acceso retirado, por ejemplo por una devolución, no lo recupera.

Con otro nombre, el fichero se añade como uno más, y los que ya compraron no lo reciben. Si quieres que les llegue la actualización, respeta el nombre: guia.pdf y no guia-v2.pdf.

Quitar un fichero

Un fichero al que algún comprador todavía tiene acceso no se puede borrar. El panel te dice cuántos son y te propone subir una versión nueva.

Borrarlo dejaría a esa gente con un pedido pagado y nada que bajar. Si lo que querías era corregirlo, la versión nueva lo hace sin dejar a nadie fuera.

Lo que hace falta

  • Correo configurado (SMTP_*). Sin él, la descarga se abre igual al cobrar, pero el aviso se queda en la cola hasta que haya por dónde mandarlo.
  • STOREFRONT_URL, para que el correo lleve el enlace a la página del pedido. Sin ella, el correo solo dice el número de pedido.
  • Un tema que enseñe las descargas en la página del pedido. Las pide a GET /tienda/pedidos/:id/descargas, y esa ruta contesta 403 sin la prueba de que el pedido es de quien pregunta. La prueba llega en el enlace del correo (?acceso=), con checkout.complete, o escribiendo el comprador el correo con el que compró; el tema la manda después en la cabecera x-pcc-pedido. Los cuatro temas de fábrica hacen todo eso, y el contrato de comercio también (getDownloads(orderId, access) y requestOrderAccess). Un tema que lo ignore recibe una lista vacía y el comprador no ve ninguna descarga.

PCC_DIAS_FICHEROS no tiene que ver con esto, aunque lo parezca: son los días que se guardan los ficheros que suben los clientes al personalizar un producto (90 por defecto). No afecta a lo que tú vendes como descarga.