Cashier transforme votre serveur Jellyfin en service payant. Un visiteur choisit une formule, paie avec Stripe et le compte Jellyfin devient actif aussitôt ; quand un renouvellement n’est pas payé, le compte est suspendu jusqu’au paiement de la facture. Il fonctionne avec Registration, qui fournit la page d’inscription et la création de compte.
Ce qu’il fait
- Des formules que vous définissez, mensuelles et annuelles, selon le nombre d’appareils pouvant lire en même temps (par exemple 1 à 4 écrans), avec un essai gratuit facultatif pour le premier abonnement.
- Des paiements avec votre propre compte Stripe : carte, Apple Pay / Google Pay et les méthodes locales proposées par Stripe ; les données de carte ne transitent jamais par votre serveur. Codes promotionnels, adresse de facturation et Stripe Tax en option.
- Compte actif dès le paiement : dès que Stripe confirme le paiement, le compte est activé avec les limites de la formule.
- Le non-paiement suspend : après un échec de paiement, le compte reste actif pendant un délai de grâce (3 jours par défaut) pendant que Stripe réessaie, puis il est désactivé ; le paiement de la facture le réactive. La suppression des comptes suspendus depuis longtemps est facultative et désactivée par défaut.
- Garde-fou de limite de flux : la lecture au-delà du nombre d’appareils de la formule est arrêtée.
- E-mails aux abonnés : rappel de facture, reçu, échec de paiement, suspension avec le lien de paiement et réactivation, via les paramètres SMTP de Registration.
- Administration : abonnés, paiements et un journal dans le tableau de bord de Jellyfin ; une réconciliation avec Stripe a lieu toutes les 15 minutes au cas où un webhook serait manqué.
Exigences
- Jellyfin Server 12.2 ou plus récent.
- Registration, installé et sous licence (Cashier utilise sa page d’inscription, ses paramètres e-mail et sa création de compte).
- Un compte Stripe (ouverture gratuite ; Stripe prélève ses propres frais par paiement) et le serveur joignable en HTTPS, pour que Stripe puisse appeler le webhook.
Questions fréquentes
Puis-je facturer l’accès à mon serveur Jellyfin ? Oui : Registration fournit la page d’inscription et Cashier l’abonnement. Les visiteurs choisissent une formule, paient via votre compte Stripe et leur compte est activé aussitôt ; un renouvellement impayé le suspend. Voir le guide.
Sans licence Cashier valide, que deviennent les abonnés existants ? Aucune nouvelle inscription payante n’est acceptée tant que la licence n’est pas redevenue valide ; rien n’est supprimé.
Ce qu’il envoie où
- Stripe (
api.stripe.com, avec la clé secrète / restreinte de votre propre compte Stripe) — le seul prestataire de paiement :- Session Stripe Checkout (page hébergée par Stripe ; abonnement) : le prix de la formule, les URL de retour vers votre serveur, l’identifiant utilisateur Jellyfin, l’identifiant du serveur et le nom d’utilisateur (métadonnées), l’adresse e-mail du client (depuis Cashier ou la demande d’inscription) ou l’identifiant client Stripe existant, la langue ; en option : période d’essai, codes promotionnels, adresse de facturation et taxe automatique (désactivée par défaut).
- Création du produit et des prix (nom du service, montant, devise, intervalle, nombre d’appareils), configuration du portail client Stripe (changer de carte/de formule, factures, résiliation).
- Le webhook Stripe vers votre serveur — seulement si vous cliquez sur « create webhook automatically » (nécessite une adresse HTTPS publique) ; sinon le serveur lit les événements Stripe toutes les 15 min (aucun port ouvert nécessaire).
- Résiliation de l’abonnement Stripe lorsque vous supprimez un utilisateur avec un abonnement actif.
- Les données de carte n’atteignent jamais votre serveur : les coordonnées de paiement ne sont saisies que sur les pages de Stripe.
- Webhook entrant (
/Cashier/Stripe/Webhook) : signature Stripe vérifiée, 256 Ko max. - E-mail (via le SMTP du plugin Registration) : au client — échéance de facture (3 jours avant), échec de paiement, paiement réussi, compte suspendu, compte réactivé (tout activé par défaut), contenant le nom du service, le nom d’utilisateur, le montant, la date, le lien de la facture Stripe et un lien de paiement signé (7 jours) ; à l’administrateur — paiements et échecs, via les canaux de Registration (e-mail / Telegram).
- La page de paiement et le QR TV sont servis par le plugin (QR généré sur le serveur, aucune ressource externe). La page d’administration ne contient que des liens vers le tableau de bord Stripe.
- Plus le client de licences, identique dans chaque plugin : voir Licences et confidentialité dans nos plugins.
Stocké localement :
data/secrets.json(exclu de la configuration envoyée au navigateur) : clé secrète Stripe, secret du webhook, clé HMAC des liens de paiement.data/subscriptions.json: par abonné — identifiant et nom d’utilisateur, e-mail, identifiants client/abonnement Stripe, statut, formule, dates de période ; paiements (identifiant de facture, montant, devise, résultat, lien de facture ; 5000 max), journal (2000 max), identifiants d’événements traités (30 jours).- Configuration : formules/prix, identifiants Stripe (produit, portail, webhook, compte), adresse publique.
- Conservation : la ligne d’abonné est supprimée avec l’utilisateur du serveur ; les comptes suspendus ne sont pas supprimés automatiquement (valeur par défaut).
Compatibilité avec les clients
- La suspension/réactivation de compte et la limite de flux simultanés par formule sont côté serveur : 🟢 tout client. La limite est appliquée nativement (MaxActiveSessions) à la connexion / au démarrage de lecture.
- Page client (
/Cashier/Page) : tout navigateur ; les TV paient depuis un téléphone via QR. ✅ de bout en bout contre un simulateur Stripe (25/25, y compris TV → téléphone → paiement → TV connectée automatiquement). - ❔ Pas encore testé contre le vrai Stripe dans la suite automatisée (simulateur seulement) ; applications Jellyfin natives : ❔ non testé.
Légende : ✅ vérifié (test de bout en bout ou sur appareil) · 🟢 côté serveur, fonctionne avec tout client (par conception, pas de test par client) · ➖ sans objet · ❔ non testé.
Licences
Le plugin est open source (GPL-3.0). Les versions compilées prêtes à installer sont publiques, comme le code source. Ce que vous achetez, c’est l’abonnement : la licence d’utilisation du plugin sur un serveur Jellyfin, les mises à jour comprises dans votre formule et le support — chaque mise à jour tant que l’abonnement est actif, via votre dépôt de plugins privé, plus de l’aide quand quelque chose ne fonctionne pas. Le plugin vérifie la clé d’abonnement une fois par jour ; sans abonnement valide, il s’arrête jusqu’au renouvellement (rien n’est supprimé). Mensuel, annuel ou à vie (la licence à vie comprend un an de mises à jour), ou inclus dans le pack Jellyfin. Essai gratuit de 30 jours.
Code source. Pour chaque version, le code source complet correspondant est public, à côté de la version compilée, dans l’historique des versions, ainsi que dans votre compte (Compte → Licences, Code source) ; chaque archive contient le texte complet de la GPL-3.0 (LICENSE). Si vous avez besoin du code source d’une version que vous ne pouvez plus télécharger, écrivez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).
Droits sur le contenu
Cashier prélève vos utilisateurs via votre propre compte Stripe. Vous êtes seul responsable de détenir les droits sur le contenu ou le service facturé (par exemple les films, séries ou chaînes de votre serveur) ; MediaLab Works fournit uniquement le logiciel et n’est pas partie à vos ventes. Stripe peut fermer ou restreindre un compte qui facture du contenu sans en détenir les droits — voir la liste des activités restreintes de Stripe.