Cashier — bezahlte Nextcloud-Konten installieren und einrichten

Installation

  1. Stelle sicher, dass eine Registrierungs-App installiert, aktiviert und lizenziert ist: Sign-up 1.0 oder neuer oder IDRegister 2.1 oder neuer (Cashier nutzt deren Registrierungsseite, deren E-Mail-Bestätigung und deren Kontoerstellung). Ohne eine davon bietet Cashier nur eine eigene, einfache Registrierungsseite; Verwaltung → Übersicht (Prüfung „Cashier (registration page)“) und der Abschnitt Registration page in den Cashier-Einstellungen sagen, was fehlt.
  2. Melde dich in deinem MediaLab-Works-Konto an, öffne Lizenzen und lade das App-Archiv cashier-x.y.z.tar.gz herunter.
  3. Entpacke es in den Nextcloud-Ordner apps/ (oder custom_apps/), sodass du apps/cashier/ erhältst, im Besitz des Webserver-Benutzers.
  4. Aktiviere es: sudo -u www-data php occ app:enable cashier oder über die Seite Apps.
  5. Verwaltungseinstellungen → Cashier → License: Füge deinen Lizenzschlüssel ein und speichere. Die App bindet sich an diese Nextcloud-Instanz und zeigt Active an.

Lizenz

Die Lizenz wird einmal täglich geprüft. Ohne Internet arbeitet die App 7 Tage nach der letzten erfolgreichen Prüfung weiter. Ohne gültige Lizenz werden keine neuen kostenpflichtigen Registrierungen oder Bezahlvorgänge akzeptiert und der Hintergrund-Job läuft nicht, aber bestehende Konten und Abonnements bleiben unberührt: Stripe zieht weiter ein, der Webhook zeichnet weiter Verlängerungen, fehlgeschlagene Zahlungen und Kündigungen auf, und Abonnenten behalten ihre Seite Persönliche Einstellungen → Subscription und das Stripe-Kundenportal (Karte, Rechnungen, Kündigung). Die Verwaltungsseiten zeigen einen Hinweis und den Abschnitt License. Nichts wird gelöscht.

Der kostenpflichtige Pfad braucht außerdem eine gültige Lizenz der Registrierungs-App (Sign-up oder IDRegister): Ohne sie ist die Registrierungsseite nicht verfügbar und neue kostenpflichtige Registrierungen stoppen, während bestehende Abonnenten erneut unberührt bleiben. Eine Zahlung, die bereits lief, als die Registrierungs-App ihre Lizenz verlor, bekommt ihr Konto trotzdem (Cashier erstellt es selbst).

Stripe verbinden

  1. Im Stripe-Dashboard → Developers → API keys: Kopiere den Publishable Key und erstelle einen Restricted Key mit Schreibzugriff auf Customers, Checkout Sessions, Customer portal, Products, Prices, Subscriptions und Webhook Endpoints sowie Lesezugriff auf Invoices (optional auch Account, lesen, damit die Einstellungsseite Kontoname und Währung anzeigt).
  2. Verwaltungseinstellungen → Cashier → Stripe: Füge beide Schlüssel ein. Starte mit Testschlüsseln (pk_test_…, rk_test_…) und wechsle zu Live-Schlüsseln, wenn alles funktioniert.
  3. Klicke auf Create webhook: Cashier registriert https://<your-cloud>/index.php/apps/cashier/webhook bei Stripe mit den Ereignissen, die es braucht, und speichert das Signier-Geheimnis. (Manuelle Alternative: Füge den Endpunkt selbst hinzu und füge das whsec_…-Geheimnis ein.)
  4. Die Einrichtungsprüfung „Cashier (Stripe)“ unter Verwaltung → Übersicht wird grün, sobald ein verifiziertes Ereignis eingetroffen ist: Mach eine Testzahlung oder sende eines mit der Stripe-CLI (stripe trigger checkout.session.completed) oder von der Webhook-Seite im Dashboard.

Tarife

Verwaltungseinstellungen → Cashier → Plans → Add plan:

  • Name und description auf Englisch und Rumänisch.
  • Price: monatlich, jährlich oder beides, in der Währung deines Stripe-Kontos. Wenn du Stripe Tax oder Managed Payments nutzt, wird die MwSt. auf der Stripe-Bezahlseite berechnet und hinzugefügt (die Tarife werden mit einem Tax Code angelegt); die Registrierungsseite zeigt den Preis ohne Steuer an und weist darauf hin.
  • Storage quota (zum Beispiel 100 GB) und die groups, denen der Abonnent hinzugefügt wird.
  • Free trial days (optional; die Karte wird trotzdem erfasst).
  • Visible auf der Registrierungsseite oder hidden (nur über einen direkten Link, z. B. für ein Firmenangebot).

Tarife werden automatisch in Stripe angelegt; das Ändern eines Preises erstellt einen neuen Stripe-Price und hält bestehende Abonnenten auf dem alten, bis sie den Tarif wechseln.

Die Registrierungsseite

Mit Sign-up (empfohlen für einfache kostenpflichtige Registrierung): Die Seite von Sign-up (/index.php/apps/signup/) bietet deine Tarife neben dem kostenlosen Konto an oder an seiner Stelle (Sign-up → Registration). Der Besucher wählt einen Tarif, füllt das Formular von Sign-up aus (persönliche Daten und Passwort), bestätigt die Adresse, zahlt auf der Stripe-Seite und kommt angemeldet zu einem von Sign-up erstellten Konto mit dem Kontingent und den Gruppen des Tarifs zurück. Siehe die Sign-up-Anleitung.

Mit IDRegister: Wenn Cashier lizenziert ist und mindestens ein sichtbarer Tarif existiert, bietet die Registrierungsseite von IDRegister (/index.php/apps/idregister/) unter der Ausweis-Option „Pay a plan instead of scanning an ID“ auf Telefonen und Computern an. Ein Besucher, der zahlt:

  1. wählt einen Tarif und einen Abrechnungszeitraum (monatlich oder jährlich);
  2. gibt eine E-Mail-Adresse ein, akzeptiert die AGB und bestätigt die Adresse mit dem sechsstelligen Code von IDRegister;
  3. zahlt auf der Stripe-Seite (Karte, Apple Pay / Google Pay und die Methoden, die Stripe anbietet);
  4. kehrt zur Registrierungsseite zurück, die ein paar Sekunden auf die Bestätigung von Stripe wartet: Das Konto wird von IDRegister erstellt, als verified by payment gekennzeichnet, erhält das Kontingent und die Gruppen des Tarifs, Benutzername und Passwort werden einmalig angezeigt und der Browser meldet sich von selbst an. Eine Willkommens-E-Mail mit einem Link zur Wahl eines Passworts wird ebenfalls gesendet.

Auf diesem Weg erstellte Konten überspringen Ausweis, Selfie und die Freigabe durch den Administrator; die E-Mail-Adresse ist fest, der Name kann vom Benutzer geändert werden. Unter Verwaltungseinstellungen → IDRegister → Paid registration kannst du das kostenpflichtige Angebot abschalten oder „Require the identity check only for the free path“ deaktivieren, damit zahlende Besucher ebenfalls zuerst ihr Dokument zeigen und das Selfie machen (der daraus gelesene Name ist dann fest).

Cashiers eigener Link /index.php/apps/cashier/signup und der Direktlink eines verborgenen Tarifs (…/signup/plan/<token>) führen zur Registrierungsseite, bei einem Direktlink mit bereits gewähltem Tarif. Wenn Sign-up und IDRegister beide installiert sind, entscheidet Rules → Paid sign-up page, wohin diese Links gehen (automatisch: zuerst Sign-up); beide Seiten verkaufen die Tarife auf jeden Fall. Ein Besucher, der auf der Stripe-Seite abbricht, kommt zurück zu den Tarifen, und es wird nichts berechnet. Ein bestehender Benutzer kauft einen Tarif stattdessen unter Persönliche Einstellungen → Subscription.

Wenn eine Zahlung fehlschlägt

  • Stripe versucht den Karteneinzug gemäß deinen Stripe-Einstellungen erneut.
  • Der Benutzer bekommt eine Benachrichtigung und eine E-Mail mit einem Link zum Aktualisieren der Karte; das Konto funktioniert während der Kulanzfrist weiter (Verwaltung → Cashier → Rules, 0 bis 90 Tage, standardmäßig 7; bei 0 greift die Regel unten, sobald eine Zahlung fehlschlägt).
  • Nach der Kulanzfrist wird das Konto schreibgeschützt (Kontingent auf den belegten Platz reduziert) oder deaktiviert (gesperrt), je nach deiner Wahl. Über Sign-up registrierte Konten folgen der Regel von Sign-up (standardmäßig gesperrt). Der Benutzer bekommt eine E-Mail mit dem Link zur Zahlung der offenen Rechnung; ein gesperrter Benutzer, der sie verloren hat, kann sie auf der öffentlichen Seite /index.php/apps/cashier/billing erneut anfordern (verlinkt von der Sign-up-Seite). Eine erfolgreiche Zahlung stellt das Konto sofort wieder her, mit einer E-Mail.
  • Wegen einer unbezahlten Rechnung wird niemals etwas gelöscht: Dateien, Freigaben und Daten bleiben, wie sie sind; Konten löscht nur ein Administrator.
  • E-Mails: Neben den oben genannten bekommen Abonnenten eine „New invoice“-Nachricht, wenn eine Verlängerungsrechnung ausgestellt wird, und einen Beleg, wenn sie bezahlt ist (Rules → „E-mail the subscribers about their invoices“; Stripe kann auch eigene Belege senden). Bestehende Webhooks erhalten das neue Rechnungs-Ereignis nach dem Update auf 1.2 automatisch.
  • Ein gekündigtes Abonnement bleibt bis zum Ende des bezahlten Zeitraums aktiv.

Für Benutzer

Persönliche Einstellungen → Subscription zeigt den Tarif, die nächste Zahlung und die Rechnungen und öffnet das Stripe-Kundenportal, um den Tarif zu wechseln, die Karte zu aktualisieren oder zu kündigen.

Verwaltung

Die Einstellungsseite (Verwaltungseinstellungen → Cashier) ist eine gewöhnliche Nextcloud-Einstellungsseite mit den Abschnitten License, Registration page (welche App — Sign-up oder IDRegister — die kostenpflichtige Registrierung ausführt), Stripe, Plans, Rules und Subscribers.

  • Subscribers: Benutzer, Tarif, Status (active, trialing, past due, canceled), nächste Zahlung, insgesamt gezahlt; Filter und Suche.
  • Give or extend: Einen Tarif kostenlos vergeben oder verlängern (für Freunde, Familie oder einen Support-Fall) — keine Stripe-Gebühr.
  • Jede Zeile verlinkt auf den Kunden und das Abonnement im Stripe-Dashboard.

Fehlerbehebung

  • Zahlungen kommen an, aber das Konto wird nicht aktiviert: Der Webhook erreicht deinen Server nicht. Prüfe die Einrichtungsprüfung, dass die Adresse öffentlich über HTTPS erreichbar ist, und das Zustell-Log des Endpunkts in Stripe. Die Registrierungsseite wartet weiter und sagt dem Besucher, dass eine E-Mail folgt, sobald das Konto bereit ist.
  • Die Einrichtungsprüfung bleibt gelb („No event from Stripe has arrived yet“): Mach eine Testzahlung oder führe stripe trigger checkout.session.completed aus; sie wird nach dem ersten verifizierten Ereignis grün.
  • „Signature verification failed“ im Nextcloud-Log: Das Webhook-Geheimnis ist falsch — klicke erneut auf Create webhook oder füge das aktuelle whsec_… ein.
  • Die kostenpflichtige Option erscheint nicht auf der Registrierungsseite: Die Registrierungs-App fehlt, ist zu alt (Sign-up 1.0 / IDRegister 2.1), unlizenziert oder hat ihre kostenpflichtige Option abgeschaltet; kein Tarif ist sichtbar (oder Stripe ist nicht verbunden); oder die Cashier-Lizenz ist nicht aktiv. Die Prüfung „Cashier (registration page)“ in Verwaltung → Übersicht nennt die Ursache.

Inhaltsrechte

Cashier berechnet deinen Benutzern Gebühren über dein eigenes Stripe-Konto. Du allein bist dafür verantwortlich, die Rechte an dem Inhalt oder der Dienstleistung zu besitzen, für den bzw. die du Gebühren erhebst (zum Beispiel die Filme, Serien oder Kanäle auf deinem Server); MediaLab Works stellt nur die Software bereit und ist nicht Partei deines Verkaufs. Stripe kann ein Konto sperren oder einschränken, das für Inhalte ohne die entsprechenden Rechte Gebühren erhebt — siehe Stripes Liste der restricted businesses.

Für den Download brauchst du eine Lizenz oder den kostenlosen 30-tägigen Testzeitraum.