Wallet & Zahlungen
Diese Anleitung behandelt das Kunden-Wallet-System, Zahlungsmethoden, Auto-Auflade-Funktionalitat und Zahlungsabwicklung. Das Verstandnis dieser Systeme ist fur Betreiber bei der Fehlerbehebung von Abrechnungsproblemen und fur Kunden bei der Verwaltung ihrer Zahlungspraferenzen unerlasslich.
Ubersicht
Das Zahlungssystem besteht aus drei Hauptkomponenten:
- Kunden-Wallet - Ein Guthabenkonto fur Fahrtzahlungen
- Zahlungsmethoden - Gespeicherte Kredit-/Debitkarten, die mit Stripe verknupft sind
- Auto-Aufladung - Automatische Wallet-Auffullung bei niedrigem Guthaben
Fahrten werden vom Wallet-Guthaben bezahlt. Wenn das Guthaben nicht ausreicht, kann das System automatisch die Standard-Zahlungsmethode des Kunden belasten.
Kunden-Wallet
Funktionsweise des Wallets
Jeder Kunde hat ein Wallet-Guthaben, das:
- Guthaben in USD speichert
- Zur Bezahlung von Fahrten verwendet wird
- Manuell oder automatisch aufgeladen werden kann
- Gutschriften aus Aktionscodes, Empfehlungen und Treuepunkt-Einlosung erhalt
Wallet-Guthaben-Fluss:
Gutschriften REIN:
- Manuelle Aufladung (Kunde fugt Guthaben hinzu)
- Auto-Aufladung (automatisch bei niedrigem Stand)
- Aktionscode-Einlosung
- Empfehlungspramien
- Treuepunkt-Einlosung
- Kundendienst-Gutschriften
Abbuchungen RAUS:
- Fahrtgebuhren
- Abonnement-Kaufe
- Paket-Kaufe
Wallet-Guthaben-Anzeige
Kunden sehen ihr Wallet-Guthaben:
- Auf dem Startbildschirm der mobilen App
- Vor dem Starten einer Fahrt
- Auf Fahrtquittungen
- In den Kontoeinstellungen
Format: Immer in Dollar mit 2 Dezimalstellen angezeigt (z.B. "25,00 $")
Mindestguthaben-Anforderungen
Um eine Fahrt zu starten, mussen Kunden haben:
- Positives Wallet-Guthaben, ODER
- Gultige Zahlungsmethode fur Auto-Aufladung, ODER
- Aktives Abonnement/Paket, das die Fahrt abdeckt
Wichtig
Wenn das Wallet eines Kunden leer ist und Auto-Aufladung deaktiviert ist, kann er keine Fahrt starten.
Manuelle Aufladung
Kunden-Auflade-Ablauf
- Kunde offnet Wallet-/Zahlungsbereich
- Wahlt oder gibt Aufladebetrag ein
- Wahlt Zahlungsmethode
- Bestatigt Zahlung
- Wallet-Guthaben wird sofort aktualisiert
Aufladebeträge
Betreiber konnen voreingestellte Betrage konfigurieren:
| Einstellung | Beschreibung | Beispiel |
|---|---|---|
| Voreingestellte Betrage | Schnellauswahl-Optionen | 10 $, 25 $, 50 $, 100 $ |
| Benutzerdefinierter Betrag | Beliebiger Betrag erlaubt | 15,00 $ (min. 5 $, max. 500 $) |
| Mindestaufladung | Niedrigster erlaubter Betrag | 5,00 $ |
| Hochstaufladung | Hochster erlaubter Betrag | 500,00 $ |
Auflade-Verarbeitung
Aufladungen werden uber Stripe verarbeitet:
- PaymentIntent mit Betrag erstellen
- Mit Zahlungsmethode des Kunden bestatigen
- Bei Erfolg: Wallet-Guthaben erhohen
- Wallet-Transaktionsdatensatz erstellen
- Bestatigung senden (E-Mail/Push)
Auto-Aufladung
Funktionsweise der Auto-Aufladung
Auto-Aufladung belastet automatisch den Kunden, wenn sein Wallet-Guthaben unter einen Schwellenwert fallt:
Wenn wallet_balance ≤ threshold:
Standard-Zahlungsmethode mit Aufladebetrag belasten
Guthaben zum Wallet hinzufugen
Wann sie auslost:
- Vor Fahrtbeginn (wenn Guthaben unzureichend)
- Nach Fahrtende (wenn Guthaben negativ wurde)
- Wahrend der Fahrt (fur Echtzeit-Abrechnung)
Konfigurationsanforderungen
Auto-Aufladung erfordert BEIDES:
- Kunden-Opt-in - Kunde aktiviert Auto-Aufladung in seinen Einstellungen
- Unterkonto aktiviert - Betreiber aktiviert Auto-Aufladung fur den Standort
| Ebene | Einstellung | Wer kontrolliert |
|---|---|---|
| Kunde | auto_topup_enabled | Kunde in der App |
| Unterkonto | auto_topup_enabled | Betreiber im Dashboard |
| Unterkonto | auto_topup_amount_cents | Betreiber im Dashboard |
| Unterkonto | auto_topup_threshold_cents | Betreiber im Dashboard |
Konfigurationsoptionen
Unterkonto-Einstellungen:
| Einstellung | Beschreibung | Standard | Beispiel |
|---|---|---|---|
auto_topup_enabled | Fur diesen Standort aktivieren | false | true |
auto_topup_amount_cents | Zu belastender Betrag | 1500 | 2000 (20 $) |
auto_topup_threshold_cents | Auslose-Schwellenwert | 500 | 1000 (10 $) |
Beispielkonfiguration:
- Schwellenwert: 5,00 $ (500 Cents)
- Aufladebetrag: 15,00 $ (1500 Cents)
Wenn das Wallet auf 5 $ oder darunter fallt, belastet das System automatisch 15 $.
Auto-Auflade-Ablauf
1. Prufen, ob Kunde Auto-Aufladung erlaubt (customer.auto_topup_enabled)
2. Prufen, ob Unterkonto Auto-Aufladung erlaubt (subaccount.auto_topup_enabled)
3. Schwellenwert und Betrag aus Unterkonto-Einstellungen abrufen
4. Wenn wallet_balance ≤ threshold:
a. Sperre erwerben (doppelte Abbuchungen verhindern)
b. Standard-Zahlungsmethode des Kunden abrufen
c. Stripe PaymentIntent erstellen
d. Zahlung bestatigen (off_session)
e. Wallet-Guthaben erhohen
f. Transaktion aufzeichnen
g. Sperre freigeben
Nebenlaufigkeitsschutz
Das System verhindert doppelte Abbuchungen durch eine Datenbanksperre:
| Feld | Beschreibung |
|---|---|
auto_topup_lock_id | Eindeutige Sperr-ID |
auto_topup_lock_expires_at | Sperrablaufzeit |
Sperr-Ablauf:
- Versuchen, Sperre zu erwerben (2-Minuten-TTL)
- Wenn Sperre erworben, mit Abbuchung fortfahren
- Wenn Sperre existiert (anderer Prozess belastet), warten und auf Guthabenerhohung prufen
- Sperre nach Abschluss freigeben
Fehlerbehandlung
| Fehler | Ursache | Losung |
|---|---|---|
| Karte abgelehnt | Unzureichendes Guthaben, abgelaufene Karte | Kunden benachrichtigen, Zahlung zu aktualisieren |
| Authentifizierung erforderlich | 3DS-Challenge benotigt | Kunden zur Authentifizierung auffordern |
| Keine Zahlungsmethode | Keine Karte hinterlegt | Kunden auffordern, Karte hinzuzufugen |
| Sperrkonflikt | Andere Abbuchung lauft | Auf Abschluss der anderen Abbuchung warten |
Zahlungsmethoden
Zahlungsmethoden speichern
Zahlungsmethoden werden uber Stripe gespeichert:
- Kunde gibt Kartendetails ein
- Karte wird von Stripe.js tokenisiert (PCI-konform)
- PaymentMethod wird an Stripe Customer angehangt
- Referenz wird in lokaler Datenbank gespeichert
Zahlungsmethoden-Tabelle
| Feld | Beschreibung |
|---|---|
stripe_payment_method_id | Stripe PM-Kennung |
last_four | Letzte 4 Ziffern der Karte |
brand | Kartenmarke (Visa, Mastercard, etc.) |
exp_month | Ablaufmonat |
exp_year | Ablaufjahr |
is_default | Standard fur Abbuchungen |
Standard-Zahlungsmethode
Eine Zahlungsmethode ist als Standard markiert:
- Wird fur Auto-Aufladung verwendet
- Wird fur manuelle Aufladung verwendet (ausser eine andere wird ausgewahlt)
- Wird fur Abonnement-Abbuchungen verwendet
Standard festlegen:
- Kunde wahlt "Als Standard festlegen" in der App
- System aktualisiert
is_default-Flag - Synchronisiert mit Stripes
invoice_settings.default_payment_method
Zahlungsmethoden verwalten
Karte hinzufugen:
- Kunde tippt auf "Zahlungsmethode hinzufugen"
- Stripe Elements erfasst Kartendetails
- Karte wird validiert und tokenisiert
- PaymentMethod wird erstellt und gespeichert
Karte entfernen:
- Kunde wahlt zu entfernende Karte
- System pruft, ob es nicht die einzige Karte ist (wenn Auto-Aufladung aktiviert)
- PaymentMethod wird von Stripe Customer getrennt
- Lokaler Datensatz wird geloscht
Karte aktualisieren: Karten konnen nicht aktualisiert werden - Kunde muss neue Karte hinzufugen und alte entfernen.
Wallet-Transaktionen
Transaktionstypen
| Typ | Beschreibung | Vorzeichen |
|---|---|---|
credit | Guthaben zum Wallet hinzugefugt | Positiv |
debit | Guthaben vom Wallet abgezogen | Negativ |
topup | Manuelle Aufladung | Positiv |
auto_topup | Automatische Aufladung | Positiv |
ride | Fahrtgebuhr | Negativ |
refund | Abbuchungsruckerstattung | Positiv |
promo | Aktionscode-Einlosung | Positiv |
referral | Empfehlungspramie | Positiv |
loyalty | Treuepunkt-Einlosung | Positiv |
adjustment | Manuelle Anpassung | Beides |
Transaktionsdatensatz
| Feld | Beschreibung |
|---|---|
customer_id | Kundenreferenz |
amount | Betrag in Dollar |
type | Transaktionstyp |
description | Menschenlesbare Beschreibung |
reference_type | Quelltyp (Fahrt, Promo, etc.) |
reference_id | Quell-ID |
balance_after | Wallet-Guthaben nach Transaktion |
stripe_payment_intent_id | Stripe PI (fur Zahlungen) |
created_at | Zeitstempel |
Transaktionshistorie anzeigen
Kunden konnen ihre Transaktionshistorie anzeigen:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WALLET-HISTORIE
Heute
─────
Fahrt abgeschlossen -7,35 $
Guthaben: 17,65 $
Gestern
─────────
Auto-Aufladung +15,00 $
Guthaben: 25,00 $
Fahrt abgeschlossen -8,50 $
Guthaben: 10,00 $
23. Dez.
─────────
Aktionscode HOLIDAY10 +10,00 $
Guthaben: 18,50 $
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Fahrtzahlungs-Ablauf
Guthabenprofung bei Fahrtstart
Wenn ein Kunde eine Fahrt startet:
- Wallet-Guthaben prufen - Ist es uber 0 $?
- Auto-Auflade-Berechtigung prufen - Ist sie aktiviert und hat Zahlungsmethode?
- Abdeckung prufen - Deckt Abonnement/Paket die Fahrt ab?
Wenn keines der oben genannten erfullt ist, kann die Fahrt nicht gestartet werden.
Zahlung bei Fahrtende
Wenn eine Fahrt endet:
1. Endgultige Fahrtgebuhr berechnen
2. Aktuelles Wallet-Guthaben prufen
3. Wenn Guthaben >= Gebuhr:
- Vom Wallet abziehen
- Transaktion aufzeichnen
4. Wenn Guthaben < Gebuhr UND Auto-Aufladung aktiviert:
- Zuerst Auto-Aufladung verarbeiten
- Dann Fahrtgebuhr abziehen
5. Wenn Guthaben < Gebuhr UND keine Auto-Aufladung:
- Verfugbares Guthaben abziehen
- Ausstehenden Betrag aufzeichnen
- Zahlungswiederholung planen
Zahlungswiederholungs-System
Wenn ein Kunde einen ausstehenden Betrag hat:
- Wiederholung planen - Zur Hintergrund-Wiederholungswarteschlange hinzufugen
- Wiederholungsversuche - Versuchen, im Laufe der Zeit einzuziehen
- Benachrichtigung - Kunden uber fehlgeschlagene Zahlung informieren
- Kontobeschrankung - Neue Fahrten blockieren, bis Guthaben ausgeglichen
Wiederholungszeitplan:
| Versuch | Verzogerung | Aktion |
|---|---|---|
| 1 | Sofort | Erster Abbuchungsversuch |
| 2 | 1 Stunde | Wiederholung mit Benachrichtigung |
| 3 | 24 Stunden | Wiederholung mit Warnung |
| 4 | 72 Stunden | Letzter Versuch |
| 5+ | Manuell | Erfordert Betreibereingriff |
Betreiber-Dashboard
Kunden-Wallet anzeigen
In der Kundendetailansicht:
| Feld | Beschreibung |
|---|---|
| Wallet-Guthaben | Aktuelles Guthaben in Dollar |
| Auto-Aufladung | Aktiviert/Deaktiviert-Status |
| Zahlungsmethoden | Liste gespeicherter Karten |
| Transaktionshistorie | Aktuelle Wallet-Aktivitat |
Manuelle Wallet-Anpassungen
Betreiber konnen Wallet-Guthaben anpassen:
Guthaben hinzufugen:
- Kundendienst-Gesten
- Ruckerstattungen fur Serviceprobleme
- Werbeguthaben
Guthaben entfernen:
- Betrugskorrekturen
- Fehlerkorrekturen
Alle Anpassungen erfordern:
- Betrag
- Grund/Beschreibung
- Betreiber-Authentifizierung
Transaktionsexport
Wallet-Transaktionen exportieren fur:
- Buchhaltungsabstimmung
- Kundenstreitigkeiten
- Prufungszwecke
Stripe-Integration
Test- vs. Live-Modus
Das System unterstutzt beide Stripe-Modi:
| Modus | Schlusseltyp | Anwendungsfall |
|---|---|---|
| Live | sk_live_* | Produktionstransaktionen |
| Test | sk_test_* | Interne Tests |
Testmodus-Auswahl:
@levyelectric.com-E-Mails verwenden Testmodus- Alle anderen Kunden verwenden Live-Modus
Verwendete Stripe-Objekte
| Objekt | Zweck |
|---|---|
| Customer | Verknupft lokalen Kunden mit Stripe |
| PaymentMethod | Gespeicherte Kartendetails |
| PaymentIntent | Einzelne Zahlung |
| SetupIntent | Karteneinrichtung ohne Abbuchung |
Webhooks
Stripe-Webhooks aktualisieren lokale Datensatze:
| Ereignis | Aktion |
|---|---|
payment_intent.succeeded | Wallet-Gutschrift bestatigen |
payment_intent.failed | Fehler protokollieren, Kunden benachrichtigen |
payment_method.attached | Zahlungsmethode lokal speichern |
payment_method.detached | Zahlungsmethode lokal entfernen |
Sicherheitsuberlegungen
PCI-Konformitat
- Kartennummern beruhren niemals unsere Server
- Alle Kartenerfassung uber Stripe.js/Elements
- Nur tokenisierte Referenzen speichern
Datenschutz
- Wallet-Guthaben im Ruhezustand verschlusselt
- Transaktionshistorie-Zugang kontrolliert
- Zahlungsmethoden-Zugang beschrankt
Betrugspravention
- Geschwindigkeitsbegrenzungen fur Aufladungen
- Erkennung ungewohnlicher Aktivitaten
- Manuelle Uberprufungsschwellenwerte
Technische Referenz
Datenbanktabellen
customers (Wallet-Felder)
| Spalte | Typ | Beschreibung |
|---|---|---|
wallet_balance | Decimal | Aktuelles Guthaben in Dollar |
stripe_customer_id | Text | Stripe-Kunden-ID |
auto_topup_enabled | Boolean | Auto-Auflade-Praferenz des Kunden |
auto_topup_lock_id | UUID | Nebenlaufigkeits-Sperr-ID |
auto_topup_lock_expires_at | Timestamp | Sperrablauf |
payment_methods
| Spalte | Typ | Beschreibung |
|---|---|---|
customer_uuid | UUID | Referenz zum Kunden |
stripe_payment_method_id | Text | Stripe PM-ID |
last_four | Text | Letzte 4 Kartenziffern |
brand | Text | Kartenmarke |
exp_month | Integer | Ablaufmonat |
exp_year | Integer | Ablaufjahr |
is_default | Boolean | Standard-Zahlungsmethode |
wallet_transactions
| Spalte | Typ | Beschreibung |
|---|---|---|
customer_id | UUID | Referenz zum Kunden |
amount | Decimal | Betrag in Dollar |
type | Text | Transaktionstyp |
description | Text | Beschreibung |
reference_type | Text | Quelltyp |
reference_id | UUID | Quell-ID |
balance_after | Decimal | Guthaben nach Transaktion |
stripe_payment_intent_id | Text | Stripe PI-ID |
subaccounts (Auto-Auflade-Felder)
| Spalte | Typ | Beschreibung |
|---|---|---|
auto_topup_enabled | Boolean | Fur Standort aktivieren |
auto_topup_amount_cents | Integer | Zu belastender Betrag |
auto_topup_threshold_cents | Integer | Auslose-Schwellenwert |
Kernfunktionen
| Funktion | Speicherort | Zweck |
|---|---|---|
processAutoTopup | src/lib/auto-topup.ts | Auto-Aufladeabbuchung ausfuhren |
canProcessAutoTopup | src/lib/auto-topup.ts | Prufen, ob Auto-Aufladung moglich |
incrementWalletCents | RPC-Funktion | Wallet atomar aktualisieren |
acquireAutoTopupLock | RPC-Funktion | Nebenlaufigkeitssperre erhalten |
releaseAutoTopupLock | RPC-Funktion | Nebenlaufigkeitssperre freigeben |
API-Endpunkte
| Methode | Endpunkt | Aktion |
|---|---|---|
| GET | /api/mobile/payment | Wallet & Zahlungsmethoden abrufen |
| POST | /api/mobile/payment/topup | Manuelle Aufladung |
| POST | /api/mobile/payment/methods | Zahlungsmethode hinzufugen |
| DELETE | /api/mobile/payment/methods/:id | Zahlungsmethode entfernen |
| PUT | /api/mobile/payment/methods/:id/default | Standard festlegen |
Fehlerbehebung
Auto-Aufladung funktioniert nicht
- Kundeneinstellung prufen - Ist
auto_topup_enabledtrue? - Unterkonto-Einstellung prufen - Ist Auto-Aufladung fur Standort aktiviert?
- Zahlungsmethode verifizieren - Gibt es eine Standard-Karte?
- Stripe-Kunden prufen - Ist
stripe_customer_idgultig? - Sperrstatus uberprufen - Gibt es eine veraltete Sperre, die blockiert?
Zahlung fehlgeschlagen
- Stripe-Fehler prufen - Karte abgelehnt? Abgelaufen? 3DS erforderlich?
- Zahlungsmethode verifizieren - Ist sie noch in Stripe gultig?
- Kontostatus uberprufen - Ist Stripe-Konto aktiv?
- Idempotenz prufen - Wurde dieselbe Abbuchung zweimal versucht?
Wallet-Guthaben falsch
- Transaktionshistorie uberprufen - Welche Transaktionen sind aufgetreten?
- Auf ausstehende Abbuchungen prufen - Gibt es laufende Zahlungen?
- Fahrtgebuhren verifizieren - Wurden Fahrten korrekt abgerechnet?
- Auf Duplikate prufen - Gibt es doppelte Transaktionen?
Kann Fahrt nicht starten
- Wallet-Guthaben prufen - Ist es 0 $ oder negativ?
- Auto-Aufladung verifizieren - Ist sie aktiviert und funktional?
- Zahlungsmethode prufen - Gibt es eine gultige Karte?
- Ausstehenden Betrag uberprufen - Gibt es unbezahlte Gebuhren?
Hilfe benotigt?
Fur Wallet- und Zahlungsunterstutzung kontaktieren Sie support@levyelectric.com.