Zum Inhalt

Zahlungen verwalten

Der Shop unterstützt mehrere Zahlungsmethoden mit eigenem Provider-System.

Ort

Dashboard → Zahlungen

Zahlungsmethoden

Methode Code Beschreibung
Vorkasse transfer Kunde überweist vor Lieferung
PayPal paypal Automatische Zahlungsabwicklung
Rechnung invoice Zahlung auf Rechnung
Barzahlung cash Bei Abholung oder Lieferung

Provider-System

Zahlungsanbieter werden über apps/payment/providers.py verwaltet:

# apps/payment/providers.py
class ProviderManager:
    providers = {
        "transfer": TransferProvider,
        "paypal": PayPalProvider,
        "invoice": InvoiceProvider,
        "cash": CashProvider,
    }

Jeder Provider implementiert: - get_payment_url() — Zahlungsseite (z.B. PayPal-Weiterleitung) - process_response() — Rückkehr aus der Zahlung - validate_payment() — Validierung des Zahlungseingangs

Zahlungen einsehen

  1. Dashboard → Zahlungen
  2. Liste zeigt:
Spalte Beschreibung
ID Eindeutige Zahlungs-ID
Bestellung Verknüpfte Bestellnummer
Betrag Zahlbetrag
Methode Zahlungsart
Status Offen / Bezahlt / Fehlgeschlagen
Datum Zahlungsdatum

Zahlungsstatus ändern

Manuelle Statusänderung

  1. Zahlung öffnen
  2. Status-Dropdown:
    • OffenBezahlt
    • BezahltOffen (Rückbuchung)
  3. Optional: Transaktions-ID und Betrag eintragen
  4. Speichern

Automatische Statusänderung

Bei PayPal-Zahlungen erfolgt die Statusänderung automatisch über process_response(). Bei Vorkasse und Rechnung muss der Status manuell gesetzt werden.

Zahlung einer Bestellung zuordnen

  1. Bestellung öffnen → Abschnitt „Zahlung“
  2. Auf „Zahlung hinzufügen“ klicken
  3. Methode und Betrag auswählen
  4. Speichern

Bankverbindung (Vorkasse)

Bei Zahlungsmethode „Vorkasse“ wird die Bankverbindung des Kunden gespeichert:

# apps/checkout/mixins.py
def handle_payment(self, order_number, total, **kwargs):
    if getattr(self, "bank_account", None):
        user_address = self.request.user.addresses.get(
            id=self.checkout_session.billing_user_address_id()
        )
        user_address.default_bank_account = self.bank_account
        user_address.save()

Zahlungsfehler

Bei fehlgeschlagener Zahlung (z.B. PayPal-Ablehnung):

  1. Die Bestellung wird im Status „Zahlung ausstehend“ angelegt
  2. Der Kunde sieht eine Fehlermeldung
  3. Dashboard-Nutzer können den Zahlungsstatus manuell auf „Bezahlt“ setzen, wenn die Zahlung auf anderem Weg eingegangen ist

Interne E-Mail-Codes

Nach erfolgreicher Bestellung werden je nach Zahlungsart unterschiedliche E-Mail-Codes verwendet:

Zahlungsart E-Mail-Code
Alle ORDER_PLACED_MACHINE1
Vorkasse ORDER_PLACED_INTERNAL_TRANSFER
Mit Bankverbindung ORDER_PLACED_INTERNAL_WITH_BANK
Ohne Bankverbindung ORDER_PLACED_INTERNAL_WITHOUT_BANK

Diese Codes steuern, welche E-Mail-Templates für interne Benachrichtigungen verwendet werden.