Cashier — instalare și conturi plătite în Nextcloud
Instalare
- Asigură-te că o aplicație de înregistrare este instalată, activată și licențiată: Înscriere 1.0 sau mai nou ori IDRegister 2.1 sau mai nou (Cashier folosește pagina ei de înregistrare, confirmarea e-mailului și crearea contului). Fără una dintre ele, Cashier oferă doar o pagină simplă de înregistrare proprie; Administrare → Prezentare generală (verificarea „Cashier (pagina de înregistrare)”) și secțiunea Pagina de înregistrare din setările Cashier spun ce lipsește.
- Autentifică-te în contul MediaLab Works, deschide Licențe și descarcă arhiva aplicației
cashier-x.y.z.tar.gz. - Dezarhiveaz-o în folderul
apps/(saucustom_apps/) al Nextcloud, ca să obțiiapps/cashier/, cu proprietar utilizatorul serverului web. - Activeaz-o:
sudo -u www-data php occ app:enable cashiersau din pagina Aplicații. - Setări de administrare → Cashier → Licență: lipește cheia de licență și salvează. Aplicația se leagă de această instanță Nextcloud și afișează Activă.
Licență
Licența se verifică o dată pe zi. Fără internet, aplicația funcționează încă 7 zile după ultima verificare reușită. Fără o licență validă nu se mai acceptă înregistrări plătite sau plăți noi și sarcina de fundal nu rulează, dar conturile și abonamentele existente nu sunt atinse: Stripe continuă să încaseze, webhook-ul înregistrează în continuare reînnoirile, plățile eșuate și anulările, iar abonații își păstrează pagina Setări personale → Abonament și portalul de client Stripe (card, facturi, anulare). Paginile de administrare arată un avertisment și secțiunea Licență. Nu se șterge nimic.
Varianta plătită are nevoie și de o licență validă a aplicației de înregistrare (Înscriere sau IDRegister): fără ea pagina de înregistrare nu e disponibilă și înregistrările plătite noi se opresc, iar abonații existenți nu sunt nici de data asta atinși. O plată aflată deja în curs când aplicația de înregistrare și-a pierdut licența primește totuși contul (îl creează Cashier).
Conectarea Stripe
- În Stripe Dashboard → Developers → API keys, copiază cheia publicabilă și creează o cheie restricționată cu drept de scriere pentru Customers, Checkout Sessions, Customer portal, Products, Prices, Subscriptions și Webhook Endpoints și drept de citire pentru Invoices (opțional și Account, citire, ca pagina de setări să arate numele contului și moneda).
- Setări de administrare → Cashier → Stripe: lipește ambele chei. Începe cu cheile de test (
pk_test_…,rk_test_…) și treci la cele live când totul merge. - Apasă Creează webhook: Cashier înregistrează în Stripe adresa
https://<cloud-ul-tău>/index.php/apps/cashier/webhookcu evenimentele necesare și salvează secretul de semnare. (Varianta manuală: adaugi singur adresa și lipești secretulwhsec_….) - Verificarea „Cashier (Stripe)” din Administrare → Prezentare generală devine verde după ce a sosit un eveniment verificat: fă o plată de test sau trimite unul cu Stripe CLI (
stripe trigger checkout.session.completed) ori din pagina webhook-ului din Dashboard.
Planuri
Setări de administrare → Cashier → Planuri → Adaugă plan:
- Nume și descriere în română și engleză.
- Preț: lunar, anual sau ambele, în moneda contului tău Stripe. Dacă folosești Stripe Tax sau Managed Payments, TVA-ul se calculează și se adaugă în pagina de plată Stripe (planurile se creează cu un cod fiscal); pagina de înregistrare arată prețul fără taxe și spune asta.
- Cota de stocare (de exemplu 100 GB) și grupurile în care intră abonatul.
- Zile de probă gratuită (opțional; cardul se cere oricum).
- Vizibil în pagina de înregistrare sau ascuns (doar prin link direct, de exemplu pentru o ofertă pentru o firmă).
Planurile se creează automat în Stripe; schimbarea prețului creează un preț nou în Stripe, iar abonații existenți rămân pe cel vechi până își schimbă planul.
Pagina de înregistrare
Cu Înscriere (recomandat pentru o înscriere plătită simplă): pagina Înscriere (/index.php/apps/signup/) oferă planurile tale lângă contul gratuit sau în locul lui (Înscriere → Înregistrare). Vizitatorul alege un plan, completează formularul Înscriere (date personale și parolă), confirmă adresa, plătește în pagina Stripe și revine autentificat într-un cont creat de Înscriere, cu cota și grupurile planului. Vezi ghidul Înscriere.
Cu IDRegister: cu Cashier licențiat și cel puțin un plan vizibil, pagina de înregistrare IDRegister (/index.php/apps/idregister/) oferă „Plătește un plan în loc să scanezi actul” sub varianta cu actul de identitate, pe telefon și pe calculator. Un vizitator care plătește:
- alege un plan și perioada de facturare (lunar sau anual);
- introduce o adresă de e-mail, acceptă condițiile și confirmă adresa cu codul de șase cifre trimis de IDRegister;
- plătește în pagina Stripe (card, Apple Pay / Google Pay și metodele oferite de Stripe);
- revine în pagina de înregistrare, care așteaptă câteva secunde confirmarea de la Stripe: contul e creat de IDRegister, marcat verificat prin plată, primește cota și grupurile planului, numele de utilizator și o parolă se arată o singură dată, iar browserul se autentifică singur. Se trimite și un e-mail de bun venit cu un link pentru alegerea parolei.
Conturile create astfel sar peste actul de identitate, selfie și aprobarea administratorului; adresa de e-mail se blochează, numele poate fi schimbat de utilizator. În Setări de administrare → IDRegister → Înregistrare cu plată poți opri oferta plătită sau poți opri „Cere verificarea cu actul doar pentru varianta gratuită”, ca și cei care plătesc să arate întâi actul și să facă selfie-ul (numele citit din act se blochează atunci).
Linkul propriu Cashier /index.php/apps/cashier/signup și linkul direct al unui plan ascuns (…/signup/plan/<token>) duc la pagina de înregistrare, cu planul deja ales în cazul linkului direct. Un vizitator care renunță în pagina Stripe revine la planuri și nu i se încasează nimic. Un utilizator existent cumpără un plan din Setări personale → Abonament.
Când o plată eșuează
- Stripe reîncearcă plata după regulile din contul tău Stripe.
- Utilizatorul primește o notificare și un e-mail cu link de actualizare a cardului; contul funcționează în perioada de grație (Administrare → Cashier → Reguli, 0–90 de zile, implicit 7; 0 aplică regula de mai jos imediat ce o plată eșuează).
- După perioada de grație contul devine doar-citire (cota redusă la spațiul folosit) sau dezactivat (suspendat), după cum ai ales. Conturile înregistrate prin Înscriere urmează regula din Înscriere (implicit: suspendare). Utilizatorul primește un e-mail cu linkul de plată a facturii; un utilizator suspendat care l-a pierdut îl poate cere din nou în pagina publică
/index.php/apps/cashier/billing(legată din pagina Înscriere). O plată reușită repune imediat contul în funcțiune, cu e-mail. - Nu se șterge niciodată nimic pentru o factură neplătită: fișierele, partajările și datele rămân cum sunt; doar un administrator șterge conturi.
- E-mailuri: pe lângă cele de mai sus, abonații primesc mesajul „Factură nouă” când se emite o factură de reînnoire și o confirmare când este plătită (Reguli → „Trimite abonaților e-mailuri despre facturi”; Stripe poate trimite și propriile chitanțe). Webhook-urile existente primesc automat noul eveniment de factură după actualizarea la 1.2.
- Un abonament anulat rămâne activ până la sfârșitul perioadei plătite.
Pentru utilizatori
Setări personale → Abonament arată planul, următoarea plată și facturile și deschide portalul de client Stripe pentru schimbarea planului, actualizarea cardului sau anulare.
Administrare
Pagina de setări (Setări de administrare → Cashier) este o pagină de setări Nextcloud obișnuită, cu secțiunile Licență, Pagina de înregistrare (care aplicație — Înscriere sau IDRegister — se ocupă de înregistrarea plătită), Stripe, Planuri, Reguli și Abonați.
- Abonați: utilizator, plan, stare (activ, în probă, restant, anulat), următoarea plată, total plătit; filtre și căutare.
- Acordă sau prelungește gratuit un plan (pentru prieteni, familie sau un caz de suport), fără încasare în Stripe.
- Fiecare rând are link spre client și abonament în Stripe Dashboard.
Probleme frecvente
- Plățile trec, dar contul nu se activează: webhook-ul nu ajunge la server. Verifică verificarea din Prezentare generală, că adresa e publică prin HTTPS, și jurnalul de livrări al adresei în Stripe. Pagina de înregistrare continuă să aștepte și îi spune vizitatorului că primește un e-mail când contul e gata.
- Verificarea rămâne galbenă („Nu a sosit încă niciun eveniment de la Stripe”): fă o plată de test sau rulează
stripe trigger checkout.session.completed; devine verde după primul eveniment verificat. - „Signature verification failed” în jurnalul Nextcloud: secretul webhook-ului e greșit; apasă din nou Creează webhook sau lipește secretul
whsec_…curent. - Varianta plătită nu apare în pagina de înregistrare: aplicația de înregistrare lipsește, e prea veche (Înscriere 1.0 / IDRegister 2.1), nu are licență sau are oprită varianta plătită; niciun plan nu e vizibil (sau Stripe nu e conectat); ori licența Cashier nu e activă. Verificarea „Cashier (pagina de înregistrare)” din Administrare → Prezentare generală spune cauza.