PS PrestaShop Mittel

Mitgliederbereich & Bezahlinhalte (dfmembership) — Vollständige Anleitung

Einen Mitgliederbereich und kostenpflichtige geschützte Inhalte installieren, konfigurieren und betreiben: auf Kundengruppen abgebildete Tarife, zeitlich begrenzter Zugang (Cron) oder wiederkehrendes Abonnement (Stripe), Bibliothek mit Paywall und SEO-Schema für PrestaShop 8 und 9.

Aktualisiert Modulversion 1.0.0

Überblick

Das Modul Mitgliederbereich & Bezahlinhalte (dfmembership) macht aus Ihrem Shop eine Mitgliedschaftsplattform: Sie verkaufen Abonnements, die den Zugang zu einem Mitgliederbereich und zu geschützten Inhalten (Artikel, Videos, Dateien, Links), zu Gruppenpreisen oder zu privaten CMS-Seiten freischalten. Jeder Tarif ist mit einer nativen PrestaShop-Kundengruppe verknüpft, sodass der Shop Katalogsichtbarkeit und Gruppenpreise nativ verwaltet; das Modul ergänzt darüber die Abrechnung, die Paywall, die Bibliothek, den automatischen Ablauf und die Gruppensynchronisation.

Zwei Geschäftsmodelle stehen schon in der ersten Version zur Verfügung und werden je Tarif gewählt: ein zeitlich begrenzter Zugang (der Kunde zahlt einmal für N Tage, der Zugang läuft automatisch ab) und ein echtes wiederkehrendes Abonnement über Stripe Billing (Verlängerung und Kündigung per Webhooks gesteuert).

Kompatibilität

  • PrestaShop 8.0 bis 9.x
  • PHP 7.4 bis 8.3
  • Einzel- und Multishop
  • 5 Sprachen: FR, EN, ES, DE, IT
  • Classic-Theme und individuelle Themes
  • Keine Abhängigkeiten: weder Composer noch eingebettetes Stripe-SDK (native cURL-API-Aufrufe)

Zentrale Konzepte

Ein Tarif entspricht einer Kundengruppe

Ein Tarif steht für eine Mitgliedschaftsstufe (zum Beispiel „Premium“ oder „Pro jährlich“). Jeder Tarif ist einer PrestaShop-Kundengruppe zugeordnet: Wird ein Kunde Mitglied, wird er dieser Gruppe hinzugefügt; läuft sein Abonnement ab oder wird es gekündigt, wird er daraus entfernt. So erben Sie die gesamte native Mechanik von PrestaShop: gruppenspezifische Preise, Versandbeschränkungen, Kategoriesichtbarkeit und mehr — ohne zusätzliche Konfiguration im Modul.

Legen Sie zuerst Ihre Kundengruppen unter Kunden > Gruppen an und ordnen Sie sie dann Ihren Tarifen zu. Dieselbe Gruppe kann sowohl Ihre Gruppenpreise als auch die Inhaltsbeschränkung tragen.

Die zwei Abrechnungsmodi

  • Begrenzte Dauer: Der Kunde zahlt einmal und erhält Zugang für die Dauer des Tarifs (in Tagen). Eine Cron-Aufgabe lässt abgelaufene Zugänge verfallen. Ideal für einen einmaligen Pass, einen saisonalen Zugang oder zeitlich begrenzte Inhalte. Bei vorzeitiger Verlängerung wird die Restzeit aufaddiert.
  • Stripe-Abonnement: ein echtes wiederkehrendes Abonnement, verwaltet von Stripe Billing. Verlängerung, Zahlungsausfall und Kündigung werden über Webhooks empfangen und automatisch auf den Zugang des Kunden angewendet. Ideal für wiederkehrende Umsätze (MRR).

Installation

  1. Öffnen Sie im Backoffice Module > Modul-Manager.
  2. Klicken Sie auf Modul hochladen und wählen Sie die Datei dfmembership.zip.
  3. Klicken Sie nach der Installation auf Konfigurieren.

Bei der Installation legt das Modul seine Tabellen an (Tarife, Abonnements, Inhalte), registriert seine Hooks, erzeugt einen zufälligen Cron-Token und fügt unter Verkaufen ein Menü Membership mit drei Unterreitern hinzu: Tarife, Abonnements und Inhalte. Im Kundenkonto erscheint ein Link Meine Mitgliedschaft.

Allgemeine Konfiguration

Die Konfigurationsseite des Moduls bündelt die globalen Einstellungen sowie die zwei Integrations-URLs (Stripe-Webhook und Cron), die Sie in Ihre externen Werkzeuge übernehmen.

Stripe-Einstellungen

  • Stripe-Geheimschlüssel: Ihr Schlüssel sk_live_… (oder sk_test_… im Testmodus). Für die wiederkehrende Abrechnung erforderlich.
  • Veröffentlichbarer Stripe-Schlüssel: Ihr Schlüssel pk_….
  • Signaturgeheimnis der Webhooks: der Wert whsec_…, den Stripe für den Endpunkt bereitstellt. Er dient dazu, die Signatur jedes eingehenden Webhooks zu prüfen.

Inhalte und Paywall

  • Geschützte CMS-Seiten: die durch Kommas getrennte Liste der CMS-Seiten-IDs, die Mitgliedern vorbehalten sind (zum Beispiel 4,7,9). Nicht-Mitglieder, die darauf zugreifen wollen, werden zur Bibliothek umgeleitet.
  • SEO-Schema der Paywall: fügt strukturierte Daten mit isAccessibleForFree auf false zu geschützten Inhalten hinzu, damit sie für Google indexierbar bleiben, ohne als Cloaking zu gelten.
  • Teaser-Länge (Wörter): Anzahl der Wörter, die vor der Paywall angezeigt werden, wenn für einen Inhalt kein expliziter Teaser hinterlegt ist.
  • Cron-Token neu erzeugen: ersetzt den Token der Cron-URL (nützlich, falls er kompromittiert wurde).

Der Geheimschlüssel und das Webhook-Geheimnis sind sensibel. Verwenden Sie die Test-Schlüssel, solange Sie den Ablauf prüfen, und wechseln Sie in der Produktion zu den Live-Schlüsseln. Geben Sie die Cron-URL mit ihrem Token niemals öffentlich weiter.

Einen Tarif anlegen

Fügen Sie unter Membership > Tarife eine Stufe hinzu und füllen Sie aus:

  • Name, Slogan, Beschreibung (mehrsprachig): werden auf der Abo-Seite und im Startseiten-Block angezeigt.
  • Abrechnungsmodus: „Zeitlich begrenzter Zugang (Cron)“ oder „Wiederkehrendes Abonnement (Stripe)“.
  • Preis: der dem Kunden angezeigte Betrag.
  • Dauer (Tage): die Zugangsdauer im Modus begrenzte Dauer.
  • Testphase (Tage): eine optionale Testphase (0 = keine). Im Stripe-Modus wird die Testphase an das Stripe-Abonnement übergeben.
  • Stripe Price ID: die Kennung price_… des in Stripe angelegten wiederkehrenden Preises (nur Stripe-Modus).
  • Zugeordnete Kundengruppe: die Gruppe, in die das Mitglied eingeordnet wird, solange sein Zugang aktiv ist.
  • Position und Aktiv: Anzeigereihenfolge und Verfügbarkeit des Tarifs.

Modus begrenzte Dauer und Cron

Im Dauer-Modus wird das Abonnement angelegt und dann für die Dauer des Tarifs aktiviert; sein Enddatum wird ab dem Aktivierungsdatum berechnet. Kostenlose Tarife (Preis null) werden sofort aktiviert, und ein Tarif mit Testphase öffnet zunächst ein Testfenster.

Um abgelaufene Zugänge automatisch zu schließen, planen Sie die in der Konfiguration angezeigte Cron-URL (durch einen Token geschützt). Ein täglicher Lauf genügt:

curl "https://ihr-shop/index.php?fc=module&module=dfmembership&controller=cron&token=IHR_TOKEN"

Der Cron setzt jedes Dauer-Abonnement, dessen Enddatum überschritten ist, auf „abgelaufen“ und synchronisiert anschließend die Gruppen des betroffenen Kunden neu. Ohne Cron laufen die Zugänge nicht von selbst ab: Denken Sie daran, ihn einzuplanen.

Modus Stripe-Abonnement

Im Stripe-Modus wird der Kunde zu einer Stripe-Checkout-Seite im Abo-Modus weitergeleitet. Nach Abschluss der Zahlung benachrichtigt Stripe Ihren Shop per Webhook, und der Zugang wird aktiviert. Der gesamte Lebenszyklus wird danach von Stripe gesteuert.

Einrichtung

  1. Erstellen Sie in Stripe ein Produkt und einen wiederkehrenden Preis (monatlich, jährlich …) und kopieren Sie dessen price_… in den entsprechenden Tarif.
  2. Tragen Sie Ihre Stripe-Schlüssel und das Webhook-Geheimnis in der Modulkonfiguration ein.
  3. Fügen Sie in Stripe einen Webhook-Endpunkt hinzu, der auf die in der Konfiguration angezeigte URL zeigt, und abonnieren Sie die Ereignisse: checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated und customer.subscription.deleted.

Was die Webhooks tun

  • checkout.session.completed: aktiviert das Abonnement und speichert die Stripe-Abonnement-ID.
  • invoice.paid: verlängert den Zugang und schiebt das Periodenenddatum vor.
  • invoice.payment_failed: behält den Zugang während der von Stripe verwalteten Mahnfrist (Dunning) bei.
  • customer.subscription.updated: spiegelt eine zum Periodenende geplante Kündigung oder eine Datumsänderung wider.
  • customer.subscription.deleted: schließt den Zugang endgültig und entfernt den Kunden aus seiner Gruppe.

Jeder Webhook wird mit dem Geheimnis whsec_… per Signatur geprüft. Ist die Signatur ungültig oder das Geheimnis leer, wird die Anfrage abgewiesen. Prüfen Sie diese Einstellung zuerst, falls Abonnements nicht aktiviert werden.

Inhaltsbibliothek und Paywall

Legen Sie unter Membership > Inhalte die geschützten Elemente an. Jeder Inhalt hat:

  • Typ: Artikel, Video, Datei oder Link.
  • Titel, Teaser, Inhalt (mehrsprachig). Der Teaser ist die öffentliche Vorschau vor der Paywall; bleibt er leer, wird er automatisch aus den ersten Wörtern des Inhalts erzeugt (einstellbare Länge).
  • Medien-URL: die Video-Einbettung, die herunterladbare Datei oder der externe Link.
  • Erforderlicher Tarif: der Tarif, der Zugang zum Inhalt gewährt. Der Wert „Jedes aktive Mitglied“ öffnet den Inhalt für jedes laufende Abonnement.
  • Drip-Verzögerung (Tage): Anzahl der Tage nach Abo-Beginn, bevor der Inhalt freigeschaltet wird, um eine Bibliothek schrittweise auszuspielen (Drip-Content).

Im Shop listet die Bibliothek die Inhalte mit ihrem Teaser. Ein Mitglied sieht den vollständigen Inhalt; ein Besucher oder Nicht-Mitglied sieht den Teaser und dann eine Paywall, die zum Abonnieren einlädt. Die Zugangskontrolle kombiniert den erforderlichen Tarif und die Drip-Verzögerung.

Auffindbarkeit der geschützten Inhalte

Ist die SEO-Schema-Option aktiviert, fügt das Modul auf freigeschaltetem Inhalt strukturierte Daten hinzu, die kennzeichnen, dass es sich um Bezahlinhalte handelt (Flexible Sampling von Google). Der reservierte Block wird mit einer eigenen CSS-Klasse markiert, sodass Google die Seite indexieren kann, ohne den Unterschied zwischen dem, was Crawler und Mitglied sehen, zu bestrafen.

Reservierte CMS-Seiten

Um bestehende CMS-Seiten zu reservieren (eine Ressourcenseite, einen privaten Bereich …), tragen Sie ihre IDs unter Geschützte CMS-Seiten ein. Ein Nicht-Mitglied, das eine dieser Seiten öffnet, wird automatisch zur Bibliothek umgeleitet, wo es die Tarife entdecken kann. Mitglieder greifen normal darauf zu.

Mitgliederbereich

Unter Mein Konto > Meine Mitgliedschaft findet der Kunde seine laufenden Abonnements: Tarif, Status, Abrechnungsmodus, Verlängerungs- oder Enddatum. Er kann die Bibliothek öffnen und gegebenenfalls ein Abonnement kündigen. Die Kündigung erfolgt zum Periodenende: Der Zugang bleibt bis zum bereits bezahlten Termin offen und schließt dann. Im Stripe-Modus wird die Anfrage an Stripe weitergeleitet; im Dauer-Modus wird der Zugang einfach nicht verlängert.

Abonnements verwalten (Backoffice)

Unter Membership > Abonnements sehen Sie alle Abonnements (Kunde, E-Mail, Tarif, Status, Modus, Daten) mit Suche und Export. In der Detailansicht können Sie bei Bedarf einen Status erzwingen (aktiv, abgelaufen, gekündigt): eine Kulanz, eine Korrektur, ein Streitfall. Jede Statusänderung synchronisiert sofort die Gruppe des Kunden neu.

Die Gruppen werden außerdem bei der Kundenanmeldung und bei der Bestellbestätigung neu synchronisiert, damit der Zugang stets die tatsächlich aktiven Abonnements widerspiegelt.

Weitergehende Möglichkeiten

Die Abrechnungsarchitektur ist erweiterbar: Ein neuer Anbieter (zum Beispiel wiederkehrendes PayPal) wird hinzugefügt, indem man die Schnittstelle BillingManagerInterface aus dem Ordner src/Billing/ implementiert und in der Fabrik BillingManagerFactory registriert, ohne den Rest des Moduls anzufassen. Mögliche Weiterentwicklungen sind: KI-generierte Teaser, Mahn-E-Mails, Geschenk-Mitgliedschaften, Tarifwechsel mit anteiliger Berechnung oder ein MRR-/Churn-Dashboard.

FAQ und Fehlerbehebung

Ein Kunde hat bezahlt, hat aber keinen Zugang

Prüfen Sie im Stripe-Modus zuerst das Webhook-Geheimnis und dass der Endpunkt im Stripe-Dashboard (Reiter Webhooks) tatsächlich Ereignisse empfängt. Die Aktivierung hängt vom Ereignis checkout.session.completed ab. Prüfen Sie im Dauer-Modus, ob das Abonnement aktiv geworden ist; Sie können es in der Detailansicht erzwingen.

Zugänge laufen nie ab

Der Dauer-Modus beruht auf dem Cron. Stellen Sie sicher, dass Sie die Cron-URL geplant haben (täglich) mit dem richtigen Token. Sie können sie zum Testen manuell aufrufen: Die JSON-Antwort gibt die Zahl der abgelaufenen Abonnements an.

Wie verknüpfe ich den Tarif mit reduzierten Preisen?

Ordnen Sie den Tarif einer Kundengruppe zu und legen Sie dann spezifische Preise für diese Gruppe auf Ihren Produktseiten fest (oder über eine Katalogpreisregel). Solange das Mitglied aktiv ist, gehört es zur Gruppe und profitiert automatisch von diesen Preisen.

Sind geschützte Inhalte für Google indexierbar?

Ja, wenn die SEO-Schema-Option aktiviert ist: Bezahlinhalte werden über strukturierte Daten als solche gekennzeichnet, was den Google-Empfehlungen zum Flexible Sampling entspricht. Sie behalten die Indexierung, ohne die kostenpflichtige Natur zu verbergen.

Kann ich eine kostenlose Testphase anbieten?

Ja. Hinterlegen Sie eine Anzahl Testtage im Tarif. Im Dauer-Modus wird ein Testfenster geöffnet; im Stripe-Modus wird die Testphase an das Stripe-Abonnement übergeben (trial_period_days).

Wird PayPal unterstützt?

Version 1 implementiert die Modi Dauer und Stripe. Wiederkehrendes PayPal lässt sich dank der erweiterbaren Abrechnungsschnittstelle ergänzen, ohne das Modul neu zu schreiben.

Ist es mit PrestaShop 9 kompatibel?

Ja. Das Modul ist mit PrestaShop 8 und 9 kompatibel, im Multishop und mehrsprachig (FR, EN, ES, DE, IT).

War diese Seite hilfreich?

Immer noch nicht weiter? Support kontaktieren