WebBlocks Memberships
Memberships 0.2.0 réunit les comptes visiteurs, les formules d'adhésion gratuites ou attribuées manuellement, les abonnements payants et le renouvellement automatique dans une seule extension. Il nécessite WebBlocks CMS 1.100.0 ou ultérieur dans la série 1.x. La facturation utilise facultativement les prestataires de paiement de Commerce 0.16.0 ; les adhésions gratuites et manuelles fonctionnent toujours sans Commerce.
Prérequis et installation
Ce guide décrit Memberships 0.2.0. PHP 8.4 ou ultérieur et WebBlocks CMS ^1.100.0 sont nécessaires. Les offres payantes utilisent également Commerce ^0.16.
Téléchargez le ZIP compatible depuis la fiche Memberships du catalogue. Installez-le dans Système → Extensions, activez-le et vérifiez que l'installation de la base de données s'est terminée correctement. Configurez le domaine canonique du site et l'envoi d'e-mails du CMS avant d'inviter des visiteurs. Ouvrez Memberships et sélectionnez le site dont vous souhaitez gérer les comptes et les formules.
Comptes membres
Utilisez le bloc natif Account ou la route du site /plugins/webblocks-memberships/account pour l'inscription, la connexion, la réinitialisation du mot de passe et la consultation des adhésions. La souscription à une formule et les contenus réservés exigent une adresse e-mail vérifiée. Le site doit disposer d'un domaine canonique et de l'envoi d'e-mails du CMS configuré. Les liens de vérification expirent après 24 heures, ceux de réinitialisation après une heure. GET affiche un formulaire de confirmation ; seul un POST protégé contre CSRF consomme le lien. La réinitialisation du mot de passe et la désactivation du compte invalident les sessions existantes du membre.
Formules et accès
Le panneau Memberships gère les formules et les droits d'adhésion à l'échelle du site. Une formule peut autoriser l'inscription gratuite autonome ou imposer une attribution par un opérateur. Les opérateurs définissent les dates de début et de fin en UTC ou avec un décalage horaire explicite, prolongent ou révoquent les droits et activent ou désactivent les comptes. Les comptes visiteurs sont distincts des administrateurs du CMS.
Le panneau permet de rendre une page publique, accessible aux membres vérifiés ou aux détenteurs d'une formule donnée. Si Memberships est indisponible, les pages protégées restent fermées et n'apparaissent ni dans la recherche publique, ni dans le sitemap, ni dans les listes et la navigation des pages automatiques. Restaurer une révision de contenu ne supprime pas la protection actuelle. Les copies la conservent. Un retour à une version du CMS antérieure à 1.99.0 ne peut pas appliquer ces nouvelles règles ; dépubliez les pages protégées avant cette opération. Les pages protégées exportées sont des brouillons ; les droits de formules importés doivent être explicitement réaffectés à une formule locale avant d'autoriser l'accès.
Le contrôle d'accès protège la page affichée, pas une URL de fichier déjà publique. Les médias confidentiels nécessitent un disque de système de fichiers privé et non public. Un média privé utilisé par un bloc publié sur une page protégée peut être servi via /plugins/webblocks-memberships/downloads/{page}/{media} avec le même contrôle d'adhésion.
Intégration avec Appointments
Appointments utilise Memberships de manière facultative. La connexion peut préremplir les coordonnées du client et associer une réservation au membre vérifié. Un service peut exiger un membre vérifié ou une formule active. Sans Memberships, les réservations ordinaires des invités fonctionnent toujours ; les services restreints restent indisponibles. Les coordonnées conservées dans les anciennes réservations sont préservées.
Gestion par API
L'Internal Content API expose /webadmin/api/plugins/webblocks-memberships?site_id=... avec memberships.read. Les opérations POST nécessitent memberships.write et une site_id autorisée indiquée explicitement : package, package/{id}, grant, revoke/{id}, member/{id} et access. Les jetons API personnels doivent également respecter le périmètre de site actuellement délégué.
La version précédente, 0.1.0, prend en charge les adhésions gratuites et manuelles sans facturation payante. Les catalogues de langues contiennent les textes sources anglais et leur traduction turque ; les autres utilisent actuellement l'anglais comme texte de repli.
L'inscription recueille d'abord le nom et l'adresse e-mail. Le POST de vérification définit le mot de passe et invalide les sessions antérieures : un tiers ne peut donc pas conserver un mot de passe choisi avant la preuve de propriété de l'adresse. Les demandes de réinitialisation pour un compte en attente produisent à la place un lien de vérification.
Abonnements payants (0.2.0)
Cette phase reste intégrée à Memberships. Elle nécessite le contrat de paiement de CMS 1.100.0 et l'implémentation des prestataires de Commerce 0.16.0. Appointments 0.16.1 accepte Memberships 0.1 et 0.2 via l'annuaire des membres existant.
Configurez une seule fois les identifiants de paiement dans Commerce. Memberships ne les duplique pas. Créez une offre mensuelle ou annuelle dans le panneau avec un prix entier en unités monétaires minimales, une devise et un prestataire. EUR 1000 signifie EUR 10.00. Le nombre d'intervalles mensuels est compris entre 1–12 ; il est de 1 pour les années. Le prix des abonnements existants reste fixe. Une nouvelle offre ne modifie pas silencieusement une autorisation antérieure.
Le membre vérifié autorise explicitement le renouvellement. PayPal utilise son propre processus d'approbation et de facturation des abonnements. SumUp recueille le consentement et un jeton de carte enregistrée via son composant de paiement ; le paiement temporaire de configuration de 1 unité est remboursé et n'achète pas d'adhésion. L'accès commence après vérification serveur d'un paiement d'abonnement ; les droits manuels restent indépendants. Les formules payantes fonctionnent également pour les services restreints d'Appointments sans y copier la logique de paiement.
Exécutez le planificateur Laravel de l'hôte chaque minute. Memberships enregistre un rapprochement toutes les cinq minutes et le traitement autorisé des renouvellements SumUp. PayPal gère ses propres renouvellements, rapprochés localement. Un refus ou une période payée expirée ne donne aucun accès. Les demandes au résultat inconnu sont vérifiées avec la même référence de prestataire au lieu de relancer un débit à l'aveugle. Une période SumUp entièrement manquée nécessite une nouvelle souscription. L'annulation arrête les futures demandes de renouvellement ; les débits déjà demandés peuvent aboutir. L'annulation reste en attente jusqu'à confirmation de la résiliation de l'accord externe. L'accès payé dure jusqu'à la fin de la période, sauf pour les périodes remboursées ou annulées financièrement.
Ajoutez les événements d'abonnement et de vente au webhook PayPal existant de Commerce. Les paiements SumUp utilisent le callback Memberships du site canonique. Avant d'activer des offres réelles, vérifiez les autorisations du marchand, le comportement carte enregistrée/SCA et la réception des callbacks dans la sandbox de ce marchand. Résiliez les accords externes avant de supprimer définitivement les extensions de facturation ou la configuration de leurs prestataires.
Le périmètre de site API et les capacités memberships.read/memberships.write existants couvrent offres, abonnements et historique des paiements. POST /plugins/webblocks-memberships/plan crée une offre ; /stop-plan/{id} la ferme et demande l'arrêt des renouvellements. POST /plugins/webblocks-memberships/billing/{subscription-uuid}/refresh ou /cancel rapproche ou annule un abonnement appartenant au site. Les montants, l'appartenance du membre et le périmètre de la formule sont contrôlés sur le serveur ; les jetons de carte et les secrets d'approbation/de requête sont exclus des réponses API.
Contrats des prestataires : abonnements PayPal, fréquences de facturation PayPal, tokenisation SumUp, preuves de paiements et de transactions SumUp.
Dépannage et guides associés
Si les e-mails du compte n'arrivent pas, vérifiez l'envoi d'e-mails du CMS et le domaine canonique avant de demander une nouvelle vérification. Si un membre ne peut pas ouvrir une page restreinte, contrôlez la vérification de l'adresse, l'activité du compte, la formule requise et les dates du droit accordé. L'accès payant exige aussi une preuve de paiement vérifiée par le prestataire ; activer une offre ne suffit pas à donner accès.
Revenez à la présentation des extensions, configurez les prestataires avec le guide Commerce ou consultez l'intégration facultative avec Appointments.