WebBlocks Memberships

Memberships 0.2.0 riunisce account dei visitatori, pacchetti di iscrizione gratuiti o assegnati manualmente, abbonamenti a pagamento e rinnovi automatici in un unico plugin. Richiede WebBlocks CMS 1.100.0 o successivo della serie 1.x. La fatturazione utilizza facoltativamente i provider di pagamento di Commerce 0.16.0; le iscrizioni gratuite e manuali continuano a funzionare senza Commerce.

Requisiti e installazione

Questa guida documenta Memberships 0.2.0. Sono necessari PHP 8.4 o successivo e WebBlocks CMS ^1.100.0. I piani a pagamento utilizzano anche Commerce ^0.16.

Scarica lo ZIP compatibile dalla pagina di Memberships nel catalogo. Installalo in Sistema → Plugin, attivalo e verifica che la configurazione del database sia stata completata correttamente. Prima di invitare visitatori, configura il dominio canonico del sito e la posta in uscita del CMS. Apri Memberships e scegli il sito di cui vuoi gestire account e pacchetti.

Account degli iscritti

Usa il blocco nativo Account o il percorso del sito /plugins/webblocks-memberships/account per registrazione, accesso, reimpostazione della password e consultazione delle iscrizioni. L'adesione ai pacchetti e i contenuti riservati richiedono la verifica dell'indirizzo email. Servono un dominio canonico e la posta in uscita del CMS configurata. I link di verifica scadono dopo 24 ore e quelli di reimpostazione dopo un'ora. GET mostra un modulo di conferma; soltanto un POST protetto da CSRF consuma il link. La reimpostazione della password e la disattivazione dell'account invalidano le sessioni esistenti dell'iscritto.

Pacchetti e accesso

Il pannello Memberships gestisce pacchetti e assegnazioni di iscrizione nell'ambito del sito. I pacchetti possono consentire l'adesione gratuita autonoma o richiedere l'assegnazione da parte di un operatore. Gli operatori impostano inizio e fine in UTC o con uno scostamento di fuso esplicito, estendono o revocano assegnazioni e attivano o disattivano account. Gli account dei visitatori sono separati dagli amministratori del CMS.

Dal pannello puoi rendere una pagina pubblica, accessibile agli iscritti verificati o ai titolari di un determinato pacchetto. Se Memberships non è disponibile, le pagine protette restano chiuse e non compaiono nella ricerca pubblica, nella sitemap o negli elenchi e nella navigazione delle pagine automatiche. Ripristinare una revisione dei contenuti non rimuove la protezione attuale. Anche le copie la mantengono. Un downgrade del CMS sotto 1.99.0 non può applicare queste nuove regole: ritira dalla pubblicazione le pagine protette prima del downgrade. Le pagine protette esportate sono bozze; i diritti dei pacchetti importati devono essere riassegnati esplicitamente a un pacchetto locale prima di consentire l'accesso.

Il controllo di accesso protegge la pagina renderizzata, non un URL di file già pubblico. I media riservati richiedono un disco del filesystem privato e non pubblico. Un media privato usato da un blocco pubblicato su una pagina protetta può essere servito tramite /plugins/webblocks-memberships/downloads/{page}/{media} con lo stesso controllo dell'iscrizione.

Integrazione con Appointments

Appointments utilizza Memberships facoltativamente. L'accesso può precompilare i dati del cliente e associare una prenotazione all'iscritto verificato. Un servizio può richiedere un iscritto verificato o un pacchetto attivo. Senza Memberships funzionano le normali prenotazioni degli ospiti; i servizi riservati restano indisponibili. I dati del cliente conservati nelle prenotazioni precedenti rimangono invariati.

Gestione tramite API

L'Internal Content API espone /webadmin/api/plugins/webblocks-memberships?site_id=... con memberships.read. Le operazioni POST richiedono memberships.write e una site_id autorizzata indicata esplicitamente: package, package/{id}, grant, revoke/{id}, member/{id} e access. I token API personali devono anche rispettare l'ambito del sito attualmente delegato.

La precedente versione 0.1.0 supporta iscrizioni gratuite e manuali senza fatturazione a pagamento. I cataloghi delle lingue includono i testi sorgente inglesi e le traduzioni turche; gli altri cataloghi usano attualmente testi di ripiego in inglese.

La registrazione raccoglie prima nome ed email. Il POST di verifica imposta la password e invalida le sessioni precedenti, impedendo a terzi di conservare una password scelta prima della verifica della proprietà dell'email. Le richieste di reimpostazione per account in attesa generano invece un link di verifica.

Questa fase rimane all'interno di Memberships. Richiede il contratto di pagamento del CMS 1.100.0 e l'implementazione dei provider di Commerce 0.16.0. Appointments 0.16.1 accetta Memberships 0.1 e 0.2 tramite la directory degli iscritti esistente.

Configura le credenziali di pagamento una sola volta in Commerce. Memberships non le duplica. Crea nel pannello un piano mensile o annuale con prezzo intero in unità monetarie minime, valuta e scelta del provider. EUR 1000 significa EUR 10.00. Il numero di intervalli mensili è 1–12; per gli anni è 1. I prezzi degli abbonamenti esistenti restano fissi. Un nuovo piano non modifica silenziosamente un'autorizzazione già concessa.

Un iscritto verificato autorizza esplicitamente il rinnovo. PayPal usa il proprio flusso di approvazione e fatturazione degli abbonamenti. SumUp ottiene consenso e token della carta salvata tramite il suo componente di pagamento; l'addebito temporaneo di configurazione di 1 unità viene rimborsato e non acquista un'iscrizione. L'accesso inizia dopo la verifica server di un pagamento dell'abbonamento; le assegnazioni manuali restano indipendenti. I pacchetti a pagamento funzionano anche per i servizi riservati di Appointments senza copiarvi la logica dei pagamenti.

Esegui ogni minuto lo scheduler Laravel dell'host. Memberships registra riconciliazioni ogni cinque minuti ed elaborazione autorizzata dei rinnovi SumUp. I rinnovi PayPal sono eseguiti da PayPal e riconciliati localmente. Un rifiuto o un periodo pagato scaduto non concede accesso. Le richieste dall'esito sconosciuto vengono verificate con lo stesso riferimento del provider invece di ripetere l'addebito alla cieca. Un periodo SumUp completamente saltato richiede una nuova adesione. L'annullamento ferma le richieste future di rinnovo; gli addebiti già richiesti possono completarsi. L'annullamento resta in attesa finché la cessazione dell'accordo esterno non è confermata. L'accesso pagato dura fino alla fine del periodo, tranne per i periodi rimborsati o stornati.

Aggiungi gli eventi relativi ad abbonamenti e vendite al webhook PayPal esistente di Commerce. I pagamenti SumUp utilizzano il callback Memberships del sito canonico. Prima di attivare piani reali, verifica permessi dell'esercente, comportamento delle carte salvate/SCA e consegna dei callback nella sandbox dello stesso esercente. Annulla gli accordi esterni prima di rimuovere definitivamente i plugin di fatturazione o la configurazione del provider.

L'ambito API del sito e memberships.read/memberships.write esistenti coprono piani, abbonamenti e cronologia dei pagamenti. POST /plugins/webblocks-memberships/plan crea un piano; /stop-plan/{id} lo chiude e richiede l'annullamento dei rinnovi. POST /plugins/webblocks-memberships/billing/{subscription-uuid}/refresh oppure /cancel riconcilia o annulla un abbonamento del sito di propria competenza. Importi, appartenenza dell'iscritto e ambito del pacchetto sono verificati sul server; token delle carte e segreti di approvazione/richiesta sono esclusi dall'output API.

Contratti dei provider: abbonamenti PayPal, frequenze di fatturazione PayPal, tokenizzazione SumUp, prove di pagamenti e transazioni SumUp.

Se l'email dell'account non arriva, controlla la posta in uscita del CMS e il dominio canonico prima di richiedere un altro messaggio di verifica. Se un iscritto non apre una pagina riservata, verifica email, stato attivo dell'account, pacchetto richiesto e date dell'assegnazione. L'accesso a pagamento richiede anche una prova di pagamento verificata dal provider; attivare un piano non concede da solo l'accesso.

Torna alla panoramica dei plugin, configura i provider con la guida di Commerce oppure consulta l'integrazione facoltativa con Appointments.