Vender cuentas de Nextcloud con Stripe: planes, cuotas y período de gracia

Guía práctica para autohospedadores que quieren cobrar por cuentas de Nextcloud: conecta tu propia cuenta de Stripe, define planes con cuotas y grupos, y gestiona renovaciones, IVA y pagos fallidos.

Si ya ejecutas Nextcloud para ti, la siguiente pregunta suele ser si puede pagarse su propio disco. Cashier, un plugin de MediaLab Works, convierte tu instancia en un pequeño servicio de pago: un visitante elige un plan, paga con tarjeta a través de tu propia cuenta de Stripe y recibe una cuenta con la cuota y los grupos correctos, con la sesión iniciada al momento. Sin verificación de identidad, sin aprobación manual, sin hoja de cálculo de quién pagó hasta cuándo.

Esta guía trata del enfoque de nube de pago: planes con cuota y grupos, cuentas creadas al pagar, mejoras para usuarios existentes, el período de gracia cuando falla una tarjeta y el IVA mediante Stripe Tax o Managed Payments. Se da por hecho que te manejas con occ, cron y el panel de Stripe. La referencia completa está en la guía de Cashier; esto es el recorrido práctico por ella. Puedes leer más sobre el plugin en la página del producto.

Antes de vender nada: derechos, IVA y tu propia cuenta de Stripe

Hay dos cosas que van antes de cualquier configuración.

Primero, el lado legal. Cashier cobra a tus usuarios a través de tu propia cuenta de Stripe, y solo tú eres responsable de tener los derechos sobre el contenido o el servicio por el que cobras. MediaLab Works proporciona el software y no es parte en tus ventas. Stripe mantiene una lista de negocios restringidos y puede cerrar o restringir una cuenta que cobra por contenido sin los derechos, así que limita tu oferta a medios que poseas o tengas licencia para usar.

Segundo, el lado del dinero. Abre una cuenta de Stripe (abrirla es gratis; Stripe cobra su propia comisión por pago) y asegúrate de que tu instancia sea accesible por HTTPS, porque Stripe tiene que llamar al webhook. Los precios en Cashier están en la moneda de tu cuenta de Stripe. Si activas Stripe Tax o Managed Payments, el IVA se calcula y se añade en la página de pago de Stripe: los planes se crean con un código de impuestos, y la página de registro muestra el precio sin impuestos y lo indica.

Requisitos previos

  • Nextcloud 30 a 34, PHP 8.1 o superior y un cron en funcionamiento para las tareas en segundo plano.
  • Una app de registro de MediaLab Works, instalada, activada y con licencia: Sign-up 1.0 o superior o IDRegister 2.1 o superior. Cashier usa su página de registro, su confirmación por correo y su creación de cuentas. Sin una de ellas, Cashier solo tiene su propia página de registro básica.
  • Una licencia de Cashier (una por instancia de Nextcloud, prueba gratis de 30 días).
  • Una cuenta de Stripe y HTTPS, como se ha indicado.

Paso 1: Instalar y licenciar Cashier

Descarga el archivo cashier-x.y.z.tar.gz desde Licenses en tu cuenta de MediaLab Works, extráelo para obtener apps/cashier/ con propietario el usuario del servidor web y actívalo:

sudo -u www-data php occ app:enable cashier

Abre Administration settings → Cashier → License, pega tu clave y guarda. La app se vincula a esta instancia y muestra Active. La licencia se comprueba una vez al día; sin conexión, sigue funcionando durante 7 días después de la última comprobación correcta.

Conviene saberlo antes de confiar en ella: sin una licencia válida no se aceptan nuevos registros de pago ni checkouts y la tarea en segundo plano no se ejecuta, pero las cuentas y suscripciones existentes no se tocan. Stripe sigue cobrando, el webhook sigue registrando renovaciones, pagos fallidos y cancelaciones, y los suscriptores conservan su página de Subscription y el portal de clientes de Stripe. No se elimina nada. Lo mismo ocurre si la app de registro pierde su licencia: se detienen los nuevos registros de pago, los suscriptores existentes se mantienen, y un pago ya en curso recibe igualmente su cuenta.

Paso 2: Conectar Stripe

En el panel de Stripe, abre Developers → API keys, copia la clave publicable y crea una clave restringida con acceso de escritura a Customers, Checkout Sessions, Customer portal, Products, Prices, Subscriptions y Webhook Endpoints, y de lectura a Invoices (opcionalmente Account, lectura, para que la página de ajustes pueda mostrar el nombre y la moneda de la cuenta).

Pega ambas claves en Administration settings → Cashier → Stripe. Empieza con claves de prueba (pk_test_…, rk_test_…) y cambia a claves en vivo cuando todo funcione.

Después pulsa Create webhook. Cashier registra https://<your-cloud>/index.php/apps/cashier/webhook en Stripe con los eventos que necesita y guarda el secreto de firma. Si prefieres hacerlo a mano, añade el endpoint tú mismo y pega el secreto whsec_….

La comprobación de configuración Cashier (Stripe) en Administration → Overview se pone en verde cuando ha llegado un evento verificado. Haz un pago de prueba, o envía uno con la CLI de Stripe (stripe trigger checkout.session.completed) o desde la página de webhooks del panel.

Paso 3: Definir tus planes

Ve a Administration settings → Cashier → Plans → Add plan. Para cada plan defines:

  • Name y description en inglés y rumano.
  • Price: mensual, anual o ambos, en la moneda de tu cuenta de Stripe. Con Stripe Tax o Managed Payments, el IVA se añade en la página de pago.
  • Cuota de almacenamiento, por ejemplo 100 GB, y los grupos a los que se une el suscriptor.
  • Días de prueba gratis, opcional; la tarjeta se sigue recogiendo.
  • Visible en la página de registro, u oculto y accesible solo mediante un enlace directo, lo que resulta práctico para una oferta de empresa.

Los planes se crean en Stripe automáticamente. Cambiar un precio crea un nuevo precio en Stripe y mantiene a los suscriptores existentes en el antiguo hasta que cambien de plan, así que puedes subir precios sin reescribir la suscripción de todos de la noche a la mañana.

Paso 4: Elegir la página de registro

Con Sign-up (recomendado para el registro de pago simple), la página en /index.php/apps/signup/ ofrece tus planes junto a la cuenta gratuita, o en su lugar (Sign-up → Registration). El visitante elige un plan, rellena el formulario de Sign-up con sus datos personales y contraseña, confirma la dirección, paga en la página de Stripe y vuelve con la sesión iniciada a una cuenta creada por Sign-up con la cuota y los grupos del plan.

Con IDRegister, una vez que Cashier tiene licencia y al menos un plan es visible, la página de registro en /index.php/apps/idregister/ ofrece "Pay a plan instead of scanning an ID" bajo la opción del documento de identidad, tanto en móviles como en ordenadores. El visitante elige un plan y un período de facturación, introduce una dirección de correo, acepta los términos y la confirma con el código de seis dígitos de IDRegister, paga en Stripe y vuelve a una página que espera unos segundos la confirmación de Stripe. IDRegister crea entonces la cuenta marcada como verified by payment, con la cuota y los grupos del plan; el nombre de usuario y una contraseña se muestran una vez, el navegador inicia sesión y llega un correo de bienvenida con un enlace para elegir contraseña. Estas cuentas se saltan el documento de identidad, la selfie y la aprobación del administrador; la dirección de correo queda bloqueada y el nombre lo puede cambiar el usuario.

En Administration settings → IDRegister → Paid registration puedes desactivar la oferta de pago, o desactivar "Require the identity check only for the free path" para que los visitantes que pagan también muestren su documento y se hagan la selfie primero. Si ambas apps están instaladas, Rules → Paid sign-up page decide a dónde van los enlaces propios de Cashier (/index.php/apps/cashier/signup y el enlace directo de un plan oculto …/signup/plan/<token>, con el plan ya elegido). Un visitante que cancela en la página de Stripe vuelve a los planes y no se le cobra nada.

Paso 5: Mejoras para usuarios existentes

Una cuenta gratuita o verificada por IDRegister puede comprar un plan para obtener más espacio. Los usuarios existentes no pasan por la página de registro: compran desde Personal settings → Subscription, donde también ven su plan actual, el próximo pago y las facturas, y pueden cambiar de plan, actualizar la tarjeta o cancelar a través del portal de clientes de Stripe. Dirige a la gente ahí en tus respuestas de soporte; ahorra muchas idas y venidas.

Paso 6: Renovaciones, pagos fallidos y el período de gracia

Las renovaciones amplían la cuenta automáticamente. Cuando falla un pago, Stripe reintenta la tarjeta según tu configuración de Stripe, y el usuario recibe una notificación y un correo con un enlace para actualizar la tarjeta. La cuenta sigue funcionando durante el período de gracia, configurado en Administration → Cashier → Rules de 0 a 90 días (7 por defecto); 0 aplica la siguiente regla en cuanto falla un pago.

Tras el período de gracia, la cuenta pasa a solo lectura (cuota reducida al espacio usado) o a suspendida, según lo que hayas elegido. Las cuentas registradas mediante Sign-up siguen la regla de Sign-up, que por defecto es suspensión. El usuario recibe un correo con el enlace para pagar la factura pendiente. Un usuario suspendido que perdió ese enlace puede volver a solicitarlo en la página pública /index.php/apps/cashier/billing, enlazada desde la página de Sign-up. Un pago correcto restaura la cuenta de inmediato, con un correo.

La promesa importante que debes hacer a tus usuarios: nunca se elimina nada por una factura impagada. Los archivos, las comparticiones y los datos se quedan como están.

Paso 7: Vigilar el lado de administración

Administration → Cashier lista tus suscriptores y los ingresos mensuales, y te permite ampliar una suscripción manualmente o dar a un usuario un plan gratuito. Cada entrada enlaza con el pago en Stripe. Las comprobaciones en Administration → Overview cubren tanto Stripe como la página de registro, así que un webhook roto o una app de registro ausente aparecen ahí y no en un ticket de soporte.

Consejos y solución de problemas

  • La comprobación de configuración sigue en rojo. Todavía no ha llegado ningún evento verificado de Stripe. Haz un pago de prueba o lanza uno con la CLI de Stripe, y confirma que la URL del webhook es accesible por HTTPS.
  • No aparecen registros de pago. Comprueba la licencia de Cashier y la de Sign-up o IDRegister, y confirma que al menos un plan es visible. La sección Registration page de los ajustes de Cashier indica qué falta.
  • Un visitante pagó pero no tiene cuenta. Busca el pago en Stripe y revisa las entregas del webhook. Un pago que estaba en curso cuando la app de registro perdió su licencia recibe igualmente su cuenta, porque Cashier la crea él mismo.
  • El IVA parece incorrecto en la página de registro. Esa página muestra los precios sin impuestos por diseño cuando Stripe Tax o Managed Payments están activados; el impuesto se añade en la página de pago de Stripe.
  • Has cambiado un precio. Los suscriptores existentes se quedan en el precio antiguo de Stripe hasta que cambien de plan. Es el comportamiento esperado, no un fallo.
  • Dudas de privacidad. Los datos de la tarjeta solo los gestiona Stripe. Cashier guarda los identificadores de cliente y suscripción de Stripe, el plan y las fechas de pago, y las cuentas creadas mediante pago se marcan como "verified by payment", no por documento de identidad.

Conclusión

Cashier es una herramienta concreta que hace un solo trabajo: conecta una página de registro de Nextcloud con tu propia cuenta de Stripe, de modo que un plan se convierte en una cuenta con la cuota y los grupos correctos, y una tarjeta fallida se convierte en un período de gracia en lugar de un usuario eliminado. Define un par de planes, prueba con las claves de prueba de Stripe, observa cómo las comprobaciones del overview se ponen en verde y tendrás una pequeña nube de pago que funciona sobre infraestructura que ya entiendes. Si algo no cuadra, la base de conocimiento y las FAQ son el siguiente paso, y siempre puedes contactarnos. Las notas de versión están en el changelog.

Esta publicación se redactó con ayuda de IA a partir de la documentación de nuestros productos o de las fuentes indicadas y se revisó automáticamente antes de publicarse.

Sigue leyendo

¿Usas Emby, Jellyfin o Nextcloud?

Nuestros plugins y apps añaden TV en directo, subtítulos, registro de usuarios y seguridad a tu propio servidor, con prueba gratuita.