SupportMitarbeiter-Handbuch

Plan-Upgrade & All-Inclusive

Pilot

Wie der Kunde im Self-Service-Portal von Trial auf Subscription oder auf das All-Inclusive-Bundle upgraded, und welche Stripe-Events dabei getriggert werden.

Phase 2 · 1st-Level-Hilfe

Welche Upgrade-Pfade gibt es?

VonNachAusloeser
TrialSubscription (Single-Plugin)Stripe-Checkout → konkrete Plugin-Price-ID
TrialAll-Inclusive-BundleStripe-Checkout → PriceIdAllInclusive
Subscription (Single)All-InclusiveStripe-Checkout → PriceIdAllInclusive (Downgrade alter Sub in Stripe)
Grace PeriodSubscription (re-aktiv)Stripe-Checkout → gewuenschte Price-ID, alte Subscription vorher storniert
SuspendedSubscription (re-aktiv)Erfolgreicher Stripe-Checkout reaktiviert das Konto automatisch (vgl. SubscriptionUpdatedHandler)

Wie der Kunde upgraded (Schritt-fuer-Schritt)

1

Plugin-Detail-Seite im Portal

Kunde oeffnet https://portal.sellx.dev/plugins/{slug} und klickt „Upgrade to {Plan}“.

2

Stripe-Checkout startet

Portal ruft POST /api/v2/checkout/create (CheckoutController) auf. sellx_central erzeugt eine Stripe-Checkout-Session mit mode: subscription, success_url und cancel_url.

3

Kunde bezahlt im Stripe-Widget

Kunde wird zu Stripe-Checkout weitergeleitet, gibt Zahlungsdaten ein, stimmt zu. Bei Erfolg: Redirect auf success_url = portal.sellx.dev/checkout/success.

4

Webhook verarbeitet Subscription

Stripe sendet checkout.session.completed + customer.subscription.created + invoice.payment_succeeded an /api/v2/webhooks/stripe. HMAC-validiert, idempotent.

5

Lizenz-Activation (oder Bundle-Sync)

SubscriptionCreatedHandler prueft die priceId:

  • Bei PriceIdAllInclusive IAllInclusiveService.ActivateAllInclusiveAsync
  • Sonst → LicenseService.CreateLicenseAsync mit license_model = subscription
6

Hub aktiviert nach naechstem Heartbeat

Der Hub sieht die neue Lizenz im naechsten Heartbeat (max. 60s), laedt .sql.enc herunter, entschluesselt, Plugin ist sofort nutzbar.

Was beim Upgrade von Trial auf Subscription passiert

Beim ersten erfolgreichen invoice.payment_succeeded waehrend aktiver Trial-Phase triggert der SubscriptionUpdatedHandler den Auto-Convert:

C#auto-convert.cs
// Pseudo: handler-Logik
if (customer.subscription_status == "trialing"
    && invoice.status == "paid")
{
    await db.Licenses
        .Where(l => l.CustomerId == customer.Id
                 && l.LicenseModel == LicenseModel.Trial)
        .ExecuteUpdateAsync(setters => setters
            .SetProperty(l => l.LicenseModel, LicenseModel.Subscription)
            .SetProperty(l => l.ExpiresAt, subscription.CurrentPeriodEnd)
        );
    auditLog.Info("license.auto_converted", customer.Id);
}

Kunde sieht im Portal sofort „Subscription aktiv“statt „Trial aktiv“. Trial-Resttage verfallen — es zaehlt nur noch die Stripe-Subscription-Periode.

Was beim Wechsel auf All-Inclusive passiert

All-Inclusive ist additiv — bestehende Single-Plugin-Lizenzen bleiben erhalten, der Kunde bekommt zusaetzlich alle aktuellen + kuenftigen Plugins.

  1. 1. Stripe-Subscription mit PriceIdAllinclusive wird angelegt (parallel zur bestehenden Single-Plugin-Sub, falls vorhanden).
  2. 2. Atomic-Activation ueber IAllInclusiveService fuegt pro aktuellem Plugin eine all_inclusive_inclusions-Zeile ein.
  3. 3. AuditLog all_inclusive.activation mit Plugin-Liste als Target.
  4. 4. SyncNewPluginAsync (Background-Job) sorgt dafuer, dass auch neue Plugins aus sellx_distribution automatisch inkludiert werden.

FAQ

Was kostet der Wechsel von Subscription auf All-Inclusive?

Stripe rechnet automatisch ab: alte Subscription wird sofort storniert (keine Rueckerstattung fuer ungenutzte Tage), All-Inclusive startet mit neuer Periode.

Wann sehe ich das Plugin im Hub nach dem Upgrade?

Nach naechstem Hub-Heartbeat — bis zu 60 Sekunden. Der Hub holt die Lizenz automatisch und entschluesselt die .sql.enc-Files ohne Neustart.

Kann ich jederzeit zurueck von All-Inclusive auf Single-Plugin?

Ja — Stripe-Checkout auf Single-Plugin-Price-ID startet. Beim Periodenwechsel deaktiviert sellx_central automatisch die All-Inclusive-Inklusionen fuer Plugins ohne Single-Lizenz.

Funktioniert Upgrade auch ohne Kreditkarte (im Trial)?

Nein — Upgrade erfordert Stripe-Checkout mit gueltigem Zahlungsmittel. SEPA (Mollie) folgt in Phase 3, aktuell nur Kreditkarte.

Haeufige Probleme