Alle ausstehenden Aenderungen (Bilder, Texte) fuer den Server-Umzug uebernommen
This commit is contained in:
@@ -217,6 +217,171 @@ Auf `zugaenge.html` (verlinkt von `postfach.html`, wenn du als Owner eingeloggt
|
||||
- CORS ist aktuell offen (`*`) — sobald die finale Domain feststeht, in `src/lib/http.js` →
|
||||
`corsHeaders()` auf die echte Domain einschränken.
|
||||
|
||||
## Supporter-Abo (Dogfather) — Setup
|
||||
|
||||
Setzt `Dogfather_VanVan_Supporter_Abo.odt` um: eigener, öffentlicher
|
||||
Supporter-Bereich mit PayPal-Abo (4,99 €/Monat), 30-Monats-Prämienzyklus
|
||||
(Hasen-Teddys → Tasse & Autogrammkarte → Hoodie) und wechselnden
|
||||
Kollektionen. **Wichtig: Das Abo selbst gehört nur Dogfather** — die
|
||||
Teddy-Kollektion/Sammlerstücke entstehen in Kooperation mit VanVan, aber
|
||||
das Abonnement ist NICHT gemeinsames Branding (klargestellt 03.08.2026).
|
||||
Code ist **vollständig fertig implementiert**, kann aber
|
||||
erst wirklich Geld verarbeiten bzw. E-Mails verschicken, sobald folgende
|
||||
zwei externe Dienste eingerichtet sind — beides Dinge, die **nur der
|
||||
Website-Betreiber selbst** einrichten kann (eigene Identität/Bankkonto):
|
||||
|
||||
```
|
||||
src/lib/supporter-cycle.js Reine Rechenlogik: 30-Monats-Zyklus/Meilensteine
|
||||
src/lib/supporter-auth.js Registrierung/Login (E-Mail-Code, eigene Sessions)
|
||||
src/lib/supporter-mail.js Transaktions-E-Mails (Resend-Adapter)
|
||||
src/lib/paypal.js PayPal Subscriptions API + Webhook-Signaturprüfung
|
||||
src/routes/supporter.js Öffentlicher Supporter-Bereich (Profil/Prämien/Archiv)
|
||||
src/routes/supporter-paypal.js Abo starten/kündigen + Webhook-Verarbeitung
|
||||
src/routes/supporter-admin.js Interner Administrationsbereich (Abonnentenübersicht etc.)
|
||||
migrations/0003_supporter_abo.sql D1-Schema (komplett getrennt vom Team-Zugangssystem)
|
||||
```
|
||||
|
||||
### 1) D1-Migration ausführen (einmalig)
|
||||
|
||||
```bash
|
||||
npx wrangler d1 execute dogfather-universe-db --remote --file=migrations/0003_supporter_abo.sql
|
||||
```
|
||||
|
||||
### 2) PayPal-Business-Konto + Abo-Plan einrichten
|
||||
|
||||
1. PayPal-Business-Konto anlegen (falls noch nicht vorhanden): https://www.paypal.com/business
|
||||
2. Developer-App anlegen: https://developer.paypal.com/dashboard/applications → **Create App**
|
||||
(zuerst im **Sandbox**-Modus testen, siehe unten).
|
||||
3. Ein Produkt anlegen (Katalog-Produkt, Typ "Service") mit dem Namen
|
||||
**„Dogfather Supporter-Abo"**.
|
||||
4. Einen Abo-Plan zu diesem Produkt anlegen: 4,99 € / Monat, EUR, monatliche
|
||||
automatische Verlängerung, **keine** Testphase, **keine** Einrichtungsgebühr.
|
||||
5. Einen Webhook anlegen, Ziel-URL:
|
||||
`https://dogfather-universe-postfach.dogfather1608.workers.dev/supporter/paypal-webhook`
|
||||
Mindestens folgende Ereignisse abonnieren: `BILLING.SUBSCRIPTION.ACTIVATED`,
|
||||
`BILLING.SUBSCRIPTION.UPDATED`, `BILLING.SUBSCRIPTION.CANCELLED`,
|
||||
`BILLING.SUBSCRIPTION.SUSPENDED`, `BILLING.SUBSCRIPTION.EXPIRED`,
|
||||
`PAYMENT.SALE.COMPLETED`, `PAYMENT.SALE.DENIED`, `PAYMENT.SALE.REFUNDED`,
|
||||
`PAYMENT.SALE.REVERSED`.
|
||||
|
||||
Aus diesen Schritten bekommst du 4 Werte, die als Secrets gesetzt werden
|
||||
(NIE im Code, NIE im Repo):
|
||||
|
||||
```bash
|
||||
npx wrangler secret put PAYPAL_CLIENT_ID
|
||||
npx wrangler secret put PAYPAL_CLIENT_SECRET
|
||||
npx wrangler secret put PAYPAL_PLAN_ID
|
||||
npx wrangler secret put PAYPAL_WEBHOOK_ID
|
||||
```
|
||||
|
||||
Und in `wrangler.toml` unter `[vars]` (unkritisch, kein Geheimnis):
|
||||
|
||||
```toml
|
||||
PAYPAL_ENV = "sandbox" # später auf "live" umstellen, siehe Abschnitt 7 des Auftrags
|
||||
```
|
||||
|
||||
**Erst vollständig in der Sandbox testen** (eigenes Sandbox-Business- und
|
||||
Sandbox-Privatkonto unter https://developer.paypal.com/dashboard/accounts),
|
||||
danach `PAYPAL_ENV` auf `"live"` umstellen und Schritte 2-5 mit den echten
|
||||
Live-Zugangsdaten wiederholen. Solange die Secrets fehlen, antworten alle
|
||||
PayPal-Endpunkte kontrolliert mit `PAYPAL_NOT_CONFIGURED` statt abzustürzen.
|
||||
|
||||
**Zahlarten-Abdeckung (03.08.2026 ergänzt):** Das Frontend nutzt jetzt die
|
||||
offiziellen PayPal Smart Payment Buttons (`abonnieren.html`) statt einer
|
||||
reinen Weiterleitung — dadurch zeigt PayPal automatisch ALLE für die
|
||||
jeweilige Käuferin/den jeweiligen Käufer verfügbaren, in Deutschland
|
||||
gängigen Zahlarten an (PayPal-Guthaben/-Bankkonto, Kreditkarte auch als
|
||||
Gast ohne eigenes PayPal-Konto). Das ist bewusst PayPal selbst überlassen
|
||||
(kein eigenes Karten-/SEPA-/Klarna-Backend nötig) — das Geld landet dabei
|
||||
immer direkt auf **deinem eigenen** PayPal-Business-Konto (dieselben
|
||||
`PAYPAL_CLIENT_ID`/`PAYPAL_PLAN_ID` wie oben). Es ist keine zusätzliche
|
||||
Einstellung nötig — welche Zahlarten genau angezeigt werden, entscheidet
|
||||
PayPal automatisch je nach Land/Konto deiner Supporter.
|
||||
|
||||
### 3) "Mit Google anmelden" einrichten (optional, aber empfohlen)
|
||||
|
||||
Zusätzlich zum E-Mail-Code-Login gibt es jetzt einen "Mit Google anmelden"-
|
||||
Button (professionellerer, schnellerer Login — Google hat die E-Mail-Adresse
|
||||
bereits selbst bestätigt, kein Extra-Code nötig). Komplett optional: ohne
|
||||
`GOOGLE_CLIENT_ID` bleibt der Button einfach ausgeblendet, der normale
|
||||
E-Mail-Code-Login funktioniert unverändert.
|
||||
|
||||
1. https://console.cloud.google.com/apis/credentials öffnen (kostenloses
|
||||
Google-Konto reicht, keine Kreditkarte nötig).
|
||||
2. Falls noch nicht vorhanden: **OAuth-Zustimmungsbildschirm** einmalig
|
||||
einrichten (App-Name z.B. "Dogfather Supporter-Abo", externe Nutzer).
|
||||
3. **Anmeldedaten erstellen → OAuth-Client-ID → Webanwendung.**
|
||||
4. Unter **Autorisierte JavaScript-Quellen** deine echte Domain eintragen
|
||||
(sobald vorhanden) sowie zum Testen
|
||||
`https://dogfather-universe.dogfather1608.workers.dev`.
|
||||
5. Die erzeugte Client-ID (endet auf `.apps.googleusercontent.com`) als
|
||||
Secret setzen:
|
||||
|
||||
```bash
|
||||
npx wrangler secret put GOOGLE_CLIENT_ID
|
||||
```
|
||||
|
||||
Kein Client-Secret nötig — die Anmeldung läuft komplett über Googles
|
||||
"Sign In With Google"-Button im Browser, der Worker prüft das dabei
|
||||
ausgestellte Token nur gegen Googles öffentlichen `tokeninfo`-Endpunkt.
|
||||
|
||||
### 4) E-Mail-Versand einrichten (Resend, kostenloser Tier reicht)
|
||||
|
||||
Ohne E-Mail-Versand können sich Supporter nicht registrieren/einloggen
|
||||
(E-Mail-Bestätigung/Login-Code). Benötigt außerdem eine **eigene, per
|
||||
SPF/DKIM verifizierte Domain** (auf `*.workers.dev` allein funktioniert
|
||||
zuverlässiger E-Mail-Versand nicht).
|
||||
|
||||
1. Account auf https://resend.com anlegen (kostenlos bis 3.000 E-Mails/Monat).
|
||||
2. Eigene Domain hinzufügen und die angezeigten DNS-Einträge setzen.
|
||||
3. API-Key erstellen.
|
||||
|
||||
```bash
|
||||
npx wrangler secret put RESEND_API_KEY
|
||||
```
|
||||
|
||||
Und in `wrangler.toml` unter `[vars]`:
|
||||
|
||||
```toml
|
||||
RESEND_FROM = "Dogfather Team <[email protected]>"
|
||||
```
|
||||
|
||||
### 5) Deployen
|
||||
|
||||
```bash
|
||||
npx wrangler deploy
|
||||
```
|
||||
|
||||
### 6) Berechtigung für den Administrationsbereich vergeben
|
||||
|
||||
Auf `zugaenge.html` einer Rolle (oder dir selbst als Owner, der hat ohnehin
|
||||
alles) die neuen Rechte **„Supporter-Abonnenten ansehen"**, **„Supporter-
|
||||
Prämien & Versand verwalten"** und **„Supporter-Kollektionen verwalten"**
|
||||
zuweisen (Gruppe „Supporter-Abo" in der Rechteverwaltung).
|
||||
|
||||
### Verbindliche Prämienlogik (nicht verändern, Abschnitt 11-13 des Auftrags)
|
||||
|
||||
| Erfolgreich bezahlte Monate (im laufenden Zyklus) | Prämie |
|
||||
|---|---|
|
||||
| 6 | Kleiner Hasen-Teddy |
|
||||
| 12 | Mittelgroßer Hasen-Teddy |
|
||||
| 18 | Großer Hasen-Teddy |
|
||||
| 24 | Tasse & Autogrammkarte |
|
||||
| 30 | Exklusiver Hoodie — Zyklus abgeschlossen |
|
||||
| 31+ | Neuer 30-Monats-Zyklus, neue Kollektion, Fortschritt bei 0 (Gesamt-Mitgliedschaftsdauer bleibt erhalten) |
|
||||
|
||||
Testzahlungen (Sandbox) zählen **nie** als echter Monat. Jedes
|
||||
PayPal-Ereignis wird per `paypal_event_id` genau einmal verarbeitet
|
||||
(keine doppelte Anrechnung bei erneuter Zustellung).
|
||||
|
||||
### Bewusst noch nicht gebaut (nächste Ausbaustufe, nicht Teil der Abnahmekriterien)
|
||||
|
||||
Abschnitt 20 des Auftrags ("Zusätzliche Vorteile") beschreibt optionale
|
||||
Bonus-Features — Abstimmungen, Downloads, Supporter-Wand, Jubiläums-
|
||||
Videobotschaften. Die Datenbankstruktur lässt Raum dafür, sie sind aber
|
||||
bewusst **nicht** Teil dieser ersten Ausbaustufe, da sie in den
|
||||
"Verbindlichen Abnahmekriterien" (Abschnitt 34) nicht gefordert sind.
|
||||
|
||||
## Wartung
|
||||
|
||||
- Bewerbungen/Zugänge/Rollen: alles über `zugaenge.html` bzw. `postfach.html` als Owner.
|
||||
|
||||
Reference in New Issue
Block a user