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¶
- Dashboard → Zahlungen
- 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¶
- Zahlung öffnen
- Status-Dropdown:
- Offen → Bezahlt
- Bezahlt → Offen (Rückbuchung)
- Optional: Transaktions-ID und Betrag eintragen
- 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¶
- Bestellung öffnen → Abschnitt „Zahlung“
- Auf „Zahlung hinzufügen“ klicken
- Methode und Betrag auswählen
- 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):
- Die Bestellung wird im Status „Zahlung ausstehend“ angelegt
- Der Kunde sieht eine Fehlermeldung
- 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.