Guides

Produkte und Kurse verkaufen

Produkte, Checkout, Gutscheine und Rechnungen — samt der Stellen, an denen still Geld verloren geht.

Created 22 Aug 2026

Alles, was du brauchst, um für ein Produkt Geld zu nehmen — einmalig, als Abo, als Ratenplan oder als „zahl, was du willst" — mit Checkout, Gutscheincode, nummerierter Rechnung und einem Zugang, der bei Zahlung automatisch freigeschaltet wird.

Zuerst die Rechnungseinstellungen

Jede Rechnung friert deine Geschäftsdaten in dem Moment ein, in dem sie ausgestellt wird. Dein erster Verkauf trägt also genau das, was dann in den Feldern steht.

Admin → General Settings → Tab Branding: Business Name und die Felder unter Address. Bank Statement Name ist freiwillig — bleibt es leer, sehen Käufer deinen Business Name auf dem Kontoauszug. Sieh dir die Zeile „Buyers see:" darunter an: 22 Zeichen sind bei beiden Anbietern die harte Grenze, Akzente werden aufgelöst und Sonderzeichen fallen weg, ein ungültiger Eintrag lässt die Zahlung selbst scheitern — und nach der ersten Belastung ist er nicht mehr änderbar.

Admin → General Settings → Tab General:

  • Tax Rate (VAT) — ein Satz für die ganze Installation, Voreinstellung 0.
  • Price Display — lass das auf Gross (incl. tax). Kein Weg durch den Checkout schlägt Steuer auf deinen Preis auf; die Rechnung rechnet aus dem belasteten Betrag zurück. Mit Net (excl. tax) passen deine Rechnungssummen nicht mehr zu dem, was du tatsächlich eingenommen hast.
  • Invoice details — Tax number, VAT ID, Register entry, Bank details. Vor einem Verkauf prüft das niemand, eine unvollständige Rechnung geht also kommentarlos raus.
  • Invoice languageSite default language plus Englisch, Deutsch und Spanisch; nur für diese drei gibt es vollständige Übersetzungen. Läuft deine Seite in einer anderen Sprache, kommt Englisch heraus.
  • Small business (§19 UStG) — setzt den Steuersatz auf der Rechnung auf 0 und druckt statt der Steuerzeile den vorgeschriebenen Hinweis.

Eine Steuerlogik gibt es nicht: ein pauschaler Satz, keine Sätze pro Land, kein Reverse Charge, kein OSS, kein Stripe Tax. Grenzüberschreitendes EU-Geschäft mit Privatkunden musst du woanders lösen.

Stripe, PayPal oder beides verbinden

Admin → Integrations, dann die Karte für Stripe oder PayPal. Die beiden Dialoge sind unterschiedlich beschriftet, und das ist der häufigste Grund, im falschen Feld zu suchen:

  • Stripe: Schalter Enable Stripe, darunter die Blöcke Test Keys und Live Keys. Der Button Test Connection erscheint pro Block erst, wenn dort ein Secret Key gespeichert ist.
  • PayPal: Schalter Enable PayPal, darunter Live credentials und Sandbox credentials, jeweils mit einem Button Test.

Die Schlüssel liegen verschlüsselt in der Datenbank, Webhooks werden automatisch angelegt und bei jedem Serverstart nachgeprüft — du musst nirgends eine URL eintragen.

Ein Anbieter taucht im Checkout nur auf, wenn er eingeschaltet ist und der passende Schlüssel gespeichert ist — bei Stripe heißt das: der Live Secret Key. Test-Schlüssel allein reichen nicht. Sind nur sie gespeichert, gilt Stripe als nicht verfügbar, auch im Testbetrieb; die Auswahl bietet Card dann nie an, und der Kaufbutton fällt auf PayPal zurück. Trag also beide Stripe-Secret-Keys ein, den Test- und den Live-Schlüssel, bevor du irgendetwas probst. PayPal ist großzügiger und nimmt entweder die Live- oder die Sandbox-Client-ID.

Sind beide Anbieter nutzbar, bekommt der Käufer die Auswahl Payment method mit Card und PayPal. Was hinter Card steckt, stellst du im Stripe-Dashboard ein — und was Stripe dann wirklich anzeigt, hängt zusätzlich von Land, Währung und Betrag des Käufers ab. Eine Zahlart, die bei einem Käufer fehlt, ist deshalb kein Fehler.

Beide decken alle vier bezahlten Modi ab, aber nicht auf dieselbe Weise:

  • Ratenpläne. PayPal bucht einen Plan als Abo und zieht ihn selbst ein. Stripe belastet nur die erste Rate; der Rest liegt als geplante Einträge, die von außen angestoßen werden müssen — siehe letzter Abschnitt.
  • Rechnungsadressen. Stripe verlangt eine, PayPal bei Einmalzahlungen nicht. Eine über PayPal entstandene Rechnung kann also mit wenig oder ganz ohne Käuferadresse gedruckt werden.
  • Nullbeträge. PayPal lehnt alles unter 0,01 ab und weist auch einen Gutschein zurück, der ein Abo auf null zieht.
  • Verzögerte Zahlarten. SEPA-Lastschrift, Überweisung und manche Klarna-Wege brauchen Stunden bis Tage. Zugang und Bestätigungsmail warten auf das Geld, und die Erfolgsseite behauptet solange auch nichts anderes. Wenn jemand „pending" meldet, ist das kein Fehler.
  • Der Widerrufsverzicht. Die Checkbox nach § 356 Abs. 5 BGB sperrt den Kaufbutton für alle. Protokolliert wird der zugestimmte Text — mit IP und User Agent — aber nur auf dem Stripe-Weg für Einmalzahlungen. PayPal, Abos, Ratenpläne und freiwillige Zahlungen nehmen das Häkchen ohne Nachweis entgegen.

Das Produkt anlegen

Admin → Products → Tab Products → Add Product. Sechs Tabs, in dieser Reihenfolge: General, Pricing, Cost & Profit, Stripe, Permission, After purchase.

General — Title, Type (Live Webinar, Course, Workshop, Ebook, Membership, Coaching, Template, Licence, Other), Category (Pflichtfeld, freier Text) und Description. Alle vier verhindern das Anlegen, ebenso Price, sobald du einen bezahlten Typ ankreuzt — das Formular bricht beim ersten fehlenden Feld ab und sagt dir, welches es ist. Ein Slug-Feld gibt es nicht; die URL entsteht aus dem Titel und steht als Vorschau unter Auto-generated URLs. Benennst du das Produkt später um, wandert der Slug mit: die alte /products/…-Adresse bekommt automatisch eine Weiterleitung, die Adresse im Mitgliederbereich nicht — Zugangslinks in bereits verschickten Mails gehen damit ins Leere. Auf demselben Tab sitzt unter Recovery der Schalter Send an abandoned checkout email, ab Werk aus; er wird scharf, sobald der Checkout beginnt, und fällt weg, wenn die Person innerhalb einer Stunde kauft.

Pricing — setz ein oder mehrere Häkchen bei Payment Types: Free, Voluntary, One-time, Subscription, Installments. Free schließt die anderen aus; hakst du es an, verschwinden die bezahlten. Der Rest lässt sich kombinieren, der Käufer wählt dann auf der Verkaufsseite. Dann Price und Currency (22 Optionen, voreingestellt die Währung deiner Installation).

  • Subscription — bis zu vier Billing options, jede mit Intervall, Preis und Mindestlaufzeit in Perioden. In diesem Block sitzt auch der Schalter Enable Stripe Customer Portal, der nichts bewirkt: er wird gespeichert, aber nichts wertet ihn aus. Abos werden im Mitgliederbereich verwaltet.
  • InstallmentsNumber of Installments (2 bis 24) und Installment Frequency (Monthly oder Quarterly).
  • VoluntaryMinimum Amount, Voreinstellung 1. Unter 1,00 weist der Anbieter den Aufruf direkt ab. Setzt du das Feld auf 0 und jemand gibt 0 ein, landet er im Formular für die kostenlose Registrierung statt auf einer Zahlungsseite.

Cost & Profit — was dich die Erfüllung kostet. Der Wert wird auf jeden Verkauf mitgeschrieben, und darauf beruht später „Erstattung minus Kosten".

Stripe — hier gibt es nur den Schalter TEST Mode / LIVE Mode und die Stripe-IDs zum Lesen. Jedes neue Produkt entsteht im TEST Mode, läuft auf Sandbox-Schlüsseln und nimmt kein echtes Geld an. Obwohl der Schalter auf dem Stripe-Tab sitzt und in Stripe-Begriffen beschriftet ist, gilt er für beide Anbieter — PayPal-Bestellungen, -Abos und -Ratenpläne laufen gegen PayPals Sandbox, solange das Produkt im TEST Mode steht. Verkaufst du nur über PayPal, ist das trotzdem der Schalter, den du umlegen musst, und man übersieht ihn leicht, weil auf der PayPal-Seite nichts davon steht. Er gilt pro Produkt: eines kann live sein, während das nächste still im Test bleibt. Denselben Schalter findest du auch als farbigen Button direkt auf der Produktkarte in der Liste. Wenn Verkäufe nicht auftauchen: hier zuerst nachsehen.

Permission — die Zeichenkette, die Inhalte freischaltet; vergeben wird sie bei Zahlung, die Inhalte liegen unter /myarea/mycontent/<slug>. Lässt du das Feld leer, enthält die Bestätigungsmail keinen Zugangslink, und die Seite im Mitgliederbereich leitet auf eine Adresse weiter, die es nicht gibt: der Käufer sieht einen 404, keinen Hinweis.

After purchaseSuccess message, Next steps und optional ein Produkt unter Upsell.

Die Lektionen baust du über den Button Builder auf der Produktkarte; ohne Inhalte landet der Zugangslink auf einem leeren Platzhalter.

Veröffentlichen

Ein neues Produkt ist ein Draft, und /products/<slug> liefert 404, bis du es veröffentlichst. Der Schalter steckt nicht im Dialog: es ist der Button unten auf der Produktkarte in der Liste, der im Ruhezustand Draft heißt und beim Überfahren mit der Maus Publish. Sales Page und Member Page bleiben bis dahin ausgegraut. Ob das Produkt im Katalog erscheint, steuert davon getrennt Show on products page auf dem Tab General.

Gutscheine

Admin → Products → Tab Coupons → Add Coupon. Gutscheine liegen in Lasersites eigener Datenbank; Stripe bekommt pro Checkout-Session einen Wegwerf-Rabatt. Vergib einen Code (oder lass dir über Generate einen achtstelligen erzeugen) und einen Name — beides ist Pflicht, ohne das wird nicht gespeichert; der Name ist intern, den Code tippt der Käufer ein. Dann ein Discount Type — Percentage, Fixed Amount oder Free Access — und der Wert, danach Nutzungsgrenzen, ein Mindestbestellwert, optional ein Zeitraum und der Scope: global oder auf ausgewählte Produkte und Event-Vorlagen beschränkt.

  • Bei Payment Type Restrictions steht „Leave empty to allow all payment types" — ein neuer Gutschein kommt aber mit Paid, Subscription und Installments angehakt und Voluntary Amount nicht. Auf einem „zahl, was du willst"-Produkt wird der Code deshalb abgelehnt, bis du Voluntary Amount anhakst oder alle vier leerst.
  • Beim Anlegen des Checkouts wird diese Einschränkung gegen den primären Zahlungstyp des Produkts geprüft, nicht gegen den, den der Käufer gewählt hat — auf allen Wegen, bei jedem Rabatt-Typ und bei beiden Anbietern. Der Button, mit dem der Käufer den Code einlöst, prüft dagegen gegen seine tatsächliche Auswahl. Auf einem Produkt mit mehreren Zahlungstypen sieht der Rabatt also aus, als greife er, und der Kauf bricht danach mit einer Meldung über den Zahlungstyp ab.
  • Groß- und Kleinschreibung spielt beim Einlösen keine Rolle, und Grenzen pro Person zählen nach E-Mail-Adresse — wer zwei Adressen hat, hat zwei Einlösungen.
  • Ein Gutschein, der bestimmten Kontakten vorbehalten ist, blockt im Zweifel: ohne eingetragene E-Mail bekommt der Käufer den Hinweis, dass der Code reserviert ist, und wird nach der Adresse gefragt, für die er ausgestellt wurde.
  • Ein globaler Gutschein lässt sich für ein einzelnes Produkt abschalten, ohne seine globale Geltung zu verlieren. Auf kostenlosen Produkten sind Gutscheine grundsätzlich ausgeschlossen.
  • Free Access überspringt den Zahlungsanbieter und schickt den Käufer ins Formular für die kostenlose Registrierung; das wird serverseitig noch einmal geprüft, der Code lässt sich also nicht fälschen.
  • Auf der Stripe-Checkout-Seite steht der CODE, nicht der Name, den du vergeben hast. Der Käufer liest INTERNAL-TEST-40 — der praktische Grund, die interne Bezeichnung in Name zu schreiben und die kundenseitige in Code.
  • Max Uses wird geprüft, bevor der Käufer beim Anbieter ankommt, hochgezählt aber erst bei abgeschlossener Zahlung. Zwei Leute, die bei der letzten freien Nutzung gleichzeitig starten, kommen beide durch — für etwas wirklich Knappes ist das keine harte Grenze.

Gutscheine mit festem Betrag haben drei Macken. Der Rabatt nimmt die Standardwährung deiner Installation — ein Währungsfeld gibt es im Formular nicht — während die Position in der Währung des Produkts steht; bei einem Produkt in einer anderen Währung passt das bei Stripe nicht zusammen. Bei einem Abo mit mehreren Plänen wird er aus Basispreis und Basisintervall des Produkts berechnet, nicht aus dem Plan, den der Käufer gewählt hat — bei beiden Anbietern. Und bei einem PayPal-Abo gilt er dauerhaft für jeden Zyklus, während Stripe ihn nach einer berechneten Zahl von Perioden auslaufen lässt. Prozentuale Gutscheine auf Produkten mit nur einem Plan sind unauffällig.

Was nach einer Zahlung passiert

Beide Anbieter münden in denselben Ablauf, und ein doppelt gelieferter Webhook wird ignoriert statt zweimal ausgeführt. Bei einem abgeschlossenen Kauf greifen zwei Automationen: Purchase Confirmation (Bestellnummer, Zugangslink, Rechnungslink), die bei jedem Kauf erneut geht, und die Welcome Email fürs Konto, die pro Kontakt nur einmal geht. Verlängerungen und Raten nutzen eine eigene Vorlage, geschaltet über Receipt email for recurring charges in Admin → General Settings → Tab General.

Ein Kauf legt kein Login an. Kontakte und Benutzerkonten sind zwei verschiedene Dinge, und der einzige Weg zu einem Konto im Kaufablauf ist das Passwortfeld auf der Erfolgsseite (mindestens 8 Zeichen). Gibt es zu der Adresse schon ein Konto, zeigt die Seite gar kein Passwortfeld, sondern Sign in to open it und einen Anmeldebutton. Wer den Tab schließt, bevor er ein Passwort gesetzt hat, kommt weder an seine Inhalte noch an seine Rechnung, bis er sich auf anderem Weg ein Login besorgt. Schreib das auf die Erfolgsseite.

Kostenlose und verschenkte Zugänge laufen einen schwächeren Weg. Eine kostenlose Anmeldung oder ein mit einem Free-Access-Gutschein geschenkter Kauf nimmt einen eigenen Ablauf. Die Berechtigung wird vergeben, und die Bestätigungsmail trägt weiterhin die Bestellnummer und — sofern beim Produkt eine Permission gesetzt ist — den Zugangslink. Was fehlt, ist die Rechnung: eine Registrierung über null wird nie in Rechnung gestellt. In der HTML-Mail bleibt der Link Download Invoice trotzdem stehen und führt ins Leere. Wenn du Zugänge verschenkst, rechne mit Nachfragen, die du von Hand beantworten musst.

Rechnungen, Erstattungen und Kündigungen

Rechnungen sind nach dem Muster 2026-0001 nummeriert; Verkäufe im TEST Mode ziehen aus einer eigenen Serie TEST-2026-0001, Proben verbrauchen also nie eine echte Nummer. Eine Rechnung wird einmal ausgestellt und dann eingefroren, und nur ein abgeschlossener, teilerstatteter oder strittiger Kauf über null bekommt eine — kostenlose Anmeldungen nie. Kunden laden ihre unter /myprofile/orders/<id>/invoice herunter, solange sie angemeldet sind.

Admin → Purchases listet die Transaktionen und erstattet bei beiden Anbietern auf drei Arten: voll, voll minus deiner erfassten Kosten, oder ein frei gewählter Betrag. Die Erstattung ist nur halb synchron — Lasersite ruft den Anbieter auf und kehrt zurück; der Statuswechsel wird erst geschrieben, wenn dessen Webhook eintrifft. Kommt der nie an, ist das Geld weg und der Verkauf steht trotzdem weiter auf „completed". Sieh im Dashboard des Anbieters nach, bevor du ein zweites Mal erstattest.

Kunden kündigen ihr Abo selbst im Mitgliederbereich, eine vereinbarte Mindestlaufzeit wird aber vorher geprüft; der Zugang läuft dann bis zum Ende der bezahlten Periode. Manuell erfasste Verkäufe und kostenlose Anmeldungen stehen beide mit „stripe" als Anbieter in der Datenbank, weil keiner der beiden Wege das Feld setzt — lies es also nicht als Beleg dafür, wie jemand bezahlt hat. Ein Produkt, an dem Verkäufe hängen, lässt sich nicht löschen, nur archivieren; Löschen würde die Verkäufe, Zahlungen und Referrals dahinter mitreißen.

Bevor du live gehst

  1. Rechnungsdaten und Steuersatz in Admin → General Settings → Tab General; Business Name, Adresse und Bank Statement Name in Tab Branding.
  2. Anbieter in Admin → Integrations eingeschaltet, Verbindungstest grün — bei Stripe zusätzlich der Live Secret Key gespeichert, nicht nur der Test-Key, sonst bietet der Checkout Stripe gar nicht erst an und Punkt 4 ist nicht durchführbar.
  3. Produkt gebaut, Permission gesetzt, Inhalte im Builder, die Texte unter After purchase geschrieben.
  4. Ein vollständiger Probekauf im TEST Mode — der Verkauf taucht auf, beide Mails kommen an, die Berechtigung wird vergeben, die Inhalte öffnen sich, die Rechnung lädt.
  5. Der Schalter TEST Mode / LIVE Mode auf dem Stripe-Tab auf LIVE Mode gestellt. Gilt pro Produkt — und er steuert PayPal mit, nicht nur Stripe.
  6. Das Produkt veröffentlicht. Drafts liefern 404.
  7. Wenn ein Produkt Stripe-Ratenpläne nutzt: den wiederkehrenden Job einrichten, der sie einzieht. Ohne ihn belastest du Rate 1 und nie Rate 2 — es gibt keinen eingebauten Scheduler und keine Warnung. Wer deinen Server betreibt, ruft planmäßig GET /api/installments/process mit dem Header Authorization: Bearer <secret> auf; pro Aufruf werden bis zu 50 fällige Zahlungen abgearbeitet. Setz CRON_SECRET ausdrücklich — lässt du die Variable leer, wird stattdessen ein abgeleiteter Wert erwartet, den du nicht erraten kannst, und die Aufrufe kommen mit 401 zurück. PayPal-Pläne sind davon nicht betroffen.

Die Währung eines Produkts bleibt auch nach dem Start änderbar. Eine Änderung legt beim Anbieter ein neues Preisobjekt an; bereits getätigte Verkäufe behalten die Währung, in der sie gemacht wurden.

Was this helpful?

Comments

Produkte und Kurse verkaufen | lasersite.ai