Cashier — installer et configurer des comptes Nextcloud payants
Installation
- Assurez-vous qu’une application d’inscription est installée, activée et sous licence : Sign-up 1.0 ou plus récent ou IDRegister 2.1 ou plus récent (Cashier utilise sa page d’inscription, sa confirmation d’e-mail et sa création de compte). Sans l’une d’elles, Cashier n’offre qu’une page d’inscription basique propre ; la vérification « Cashier (page d’inscription) » dans Administration → Vue d’ensemble et la section Page d’inscription des paramètres Cashier indiquent ce qui manque.
- Connectez-vous à votre compte MediaLab Works, ouvrez Licences et téléchargez l’archive de l’application
cashier-x.y.z.tar.gz. - Extrayez-la dans le dossier
apps/(oucustom_apps/) de Nextcloud pour obtenirapps/cashier/, dont le propriétaire est l’utilisateur du serveur web. - Activez-la :
sudo -u www-data php occ app:enable cashier, ou depuis la page Applications. - Paramètres d’administration → Cashier → Licence : collez votre clé de licence et enregistrez. L’application se lie à cette instance Nextcloud et affiche Active.
Licence
La licence est vérifiée une fois par jour. Sans internet, l’application continue de fonctionner 7 jours après la dernière vérification réussie. Sans licence valide, aucune nouvelle inscription payante ni aucun nouveau paiement n’est accepté et la tâche de fond ne s’exécute pas, mais les comptes et abonnements existants ne sont pas touchés : Stripe continue de débiter la carte, le webhook continue d’enregistrer les renouvellements, les paiements échoués et les résiliations, et les abonnés conservent leur page Paramètres personnels → Abonnement et le portail client Stripe (carte, factures, résiliation). Les pages d’administration affichent un avertissement et la section Licence. Rien n’est supprimé.
La voie payante nécessite aussi une licence valide de l’application d’inscription (Sign-up ou IDRegister) : sans elle, la page d’inscription est indisponible et les nouvelles inscriptions payantes s’arrêtent, tandis que les abonnés existants ne sont là non plus pas touchés. Un paiement déjà en cours lorsque l’application d’inscription a perdu sa licence reçoit quand même son compte (Cashier le crée lui-même).
Connexion de Stripe
- Dans le Stripe Dashboard → Developers → API keys, copiez la clé publiable et créez une clé restreinte avec accès en écriture à Customers, Checkout Sessions, Customer portal, Products, Prices, Subscriptions et Webhook Endpoints, et en lecture à Invoices (optionnellement aussi Account, en lecture, pour que la page des paramètres affiche le nom et la devise du compte).
- Paramètres d’administration → Cashier → Stripe : collez les deux clés. Commencez avec les clés de test (
pk_test_…,rk_test_…) et passez aux clés live quand tout fonctionne. - Cliquez sur Créer un webhook : Cashier enregistre
https://<your-cloud>/index.php/apps/cashier/webhookdans Stripe avec les événements dont il a besoin et enregistre le secret de signature. (Alternative manuelle : ajoutez vous-même le point de terminaison et collez le secretwhsec_….) - La vérification « Cashier (Stripe) » sous Administration → Vue d’ensemble devient verte dès qu’un événement vérifié est arrivé : faites un paiement de test, ou envoyez-en un avec la Stripe CLI (
stripe trigger checkout.session.completed) ou depuis la page webhook du Dashboard.
Plans
Paramètres d’administration → Cashier → Plans → Ajouter un plan :
- Nom et description en anglais et en roumain.
- Prix : mensuel, annuel ou les deux, dans la devise de votre compte Stripe. Si vous utilisez Stripe Tax ou Managed Payments, la TVA est calculée et ajoutée sur la page de paiement Stripe (les plans sont créés avec un code fiscal) ; la page d’inscription affiche le prix hors taxes et le précise.
- Quota de stockage (par exemple 100 Go) et groupes auxquels l’abonné est ajouté.
- Jours d’essai gratuit (facultatif ; la carte est quand même demandée).
- Visible sur la page d’inscription ou masqué (uniquement par lien direct, par exemple pour une offre destinée à une entreprise).
Les plans sont créés automatiquement dans Stripe ; changer un prix crée un nouveau prix Stripe et conserve les abonnés existants sur l’ancien jusqu’à ce qu’ils changent de plan.
La page d’inscription
Avec Sign-up (recommandé pour une inscription payante simple) : la page de Sign-up (/index.php/apps/signup/) propose vos plans à côté du compte gratuit, ou à la place (Sign-up → Inscription). Le visiteur choisit un plan, remplit le formulaire de Sign-up (données personnelles et mot de passe), confirme l’adresse, paie sur la page Stripe et revient connecté à un compte créé par Sign-up avec le quota et les groupes du plan. Voir le guide de Sign-up.
Avec IDRegister : avec Cashier sous licence et au moins un plan visible, la page d’inscription d’IDRegister (/index.php/apps/idregister/) propose « Payer un plan plutôt que de scanner un acte » sous l’option de la carte d’identité, sur téléphone comme sur ordinateur. Un visiteur qui paie :
- choisit un plan et une période de facturation (mensuelle ou annuelle) ;
- saisit une adresse e-mail, accepte les conditions et confirme l’adresse avec le code à six chiffres d’IDRegister ;
- paie sur la page Stripe (carte, Apple Pay / Google Pay et les moyens proposés par Stripe) ;
- revient sur la page d’inscription, qui attend quelques secondes la confirmation de Stripe : le compte est créé par IDRegister, marqué vérifié par paiement, reçoit le quota et les groupes du plan, le nom d’utilisateur et un mot de passe sont affichés une seule fois et le navigateur se connecte tout seul. Un e-mail de bienvenue avec un lien pour choisir un mot de passe est également envoyé.
Les comptes créés ainsi sautent l’étape de la carte d’identité, du selfie et de l’approbation par l’administrateur ; l’adresse e-mail est verrouillée, le nom peut être changé par l’utilisateur. Dans Paramètres d’administration → IDRegister → Inscription payante, vous pouvez désactiver l’offre payante, ou désactiver « Exiger le contrôle d’identité uniquement pour la voie gratuite » pour que les visiteurs payants montrent aussi leur document et fassent le selfie d’abord (le nom lu sur le document est alors verrouillé).
Le lien propre de Cashier /index.php/apps/cashier/signup et le lien direct d’un plan masqué (…/signup/plan/<token>) mènent à la page d’inscription, le plan étant déjà choisi pour un lien direct. Quand Sign-up et IDRegister sont installés tous les deux, Règles → Page d’inscription payante choisit la destination de ces liens (automatique : Sign-up d’abord) ; les deux pages vendent les plans de toute façon. Un visiteur qui annule sur la page Stripe revient aux plans et rien n’est débité. Un utilisateur existant achète plutôt un plan depuis Paramètres personnels → Abonnement.
Quand un paiement échoue
- Stripe réessaie la carte selon vos paramètres Stripe.
- L’utilisateur reçoit une notification et un e-mail avec un lien pour mettre à jour la carte ; le compte continue de fonctionner pendant le délai de grâce (Administration → Cashier → Règles, de 0 à 90 jours, 7 par défaut ; 0 applique la règle ci-dessous dès qu’un paiement échoue).
- Après le délai de grâce, le compte devient en lecture seule (quota réduit à l’espace utilisé) ou désactivé (suspendu), selon votre choix. Les comptes inscrits via Sign-up suivent la règle de Sign-up (suspendu par défaut). L’utilisateur reçoit un e-mail avec le lien pour payer la facture ouverte ; un utilisateur suspendu qui l’a perdu peut le redemander sur la page publique
/index.php/apps/cashier/billing(liée depuis la page de Sign-up). Un paiement réussi rétablit le compte immédiatement, avec un e-mail. - Rien n’est jamais supprimé pour une facture impayée : fichiers, partages et données restent tels quels ; seul un administrateur supprime des comptes.
- E-mails : outre ceux ci-dessus, les abonnés reçoivent un message « Nouvelle facture » quand une facture de renouvellement est émise et un reçu quand elle est payée (Règles → « Envoyer un e-mail aux abonnés à propos de leurs factures » ; Stripe peut aussi envoyer ses propres reçus). Les webhooks existants reçoivent le nouvel événement de facture automatiquement après la mise à jour vers 1.2.
- Un abonnement résilié reste actif jusqu’à la fin de la période payée.
Pour les utilisateurs
Paramètres personnels → Abonnement affiche le plan, le prochain paiement et les factures, et ouvre le portail client Stripe pour changer de plan, mettre à jour la carte ou résilier.
Administration
La page des paramètres (Paramètres d’administration → Cashier) est une page de paramètres Nextcloud classique avec les sections Licence, Page d’inscription (quelle application — Sign-up ou IDRegister — gère l’inscription payante), Stripe, Plans, Règles et Abonnés.
- Abonnés : utilisateur, plan, statut (actif, en essai, en retard, résilié), prochain paiement, total payé ; filtres et recherche.
- Attribuer ou prolonger un plan gratuitement (pour des amis, la famille ou un cas de support) — sans débit Stripe.
- Chaque ligne contient un lien vers le client et l’abonnement dans le Stripe Dashboard.
Dépannage
- Les paiements passent mais le compte n’est pas activé : le webhook n’atteint pas votre serveur. Vérifiez la vérification de configuration, que l’adresse est publique en HTTPS et le journal de livraison du point de terminaison dans Stripe. La page d’inscription continue d’attendre et dit au visiteur qu’un e-mail suivra une fois le compte prêt.
- La vérification reste jaune (« Aucun événement de Stripe n’est encore arrivé ») : faites un paiement de test ou exécutez
stripe trigger checkout.session.completed; elle devient verte après le premier événement vérifié. - « Signature verification failed » dans le journal Nextcloud : le secret du webhook est erroné — cliquez à nouveau sur Créer un webhook ou collez le
whsec_…actuel. - L’option payante n’apparaît pas sur la page d’inscription : l’application d’inscription manque, est trop ancienne (Sign-up 1.0 / IDRegister 2.1), n’a pas de licence ou a son option payante désactivée ; aucun plan n’est visible (ou Stripe n’est pas connecté) ; ou la licence Cashier n’est pas active. La vérification « Cashier (page d’inscription) » dans Administration → Vue d’ensemble nomme la cause.
Droits sur le contenu
Cashier débite vos utilisateurs via votre propre compte Stripe. Vous êtes seul responsable de la détention des droits sur le contenu ou le service pour lequel vous facturez (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 les droits — voir la liste des activités restreintes de Stripe.