PayPal Integration
PayPal-Zahlung im Buchungsformular einrichten
PayPal Integration
Uebersicht
Mit der PayPal-Integration koennen Ihre Kunden Kursbuchungen direkt mit ihrem PayPal-Konto bezahlen.
Sprint 43 Feature
| Feature | Beschreibung |
|---|---|
| Zahlungsart | PayPal Checkout mit Redirect |
| Umgebungen | Sandbox (Test) + Live (Produktion) |
| Webhook | Automatische Zahlungsbestaetigung |
| Rueckerstattung | Manuell ueber PayPal Dashboard |
Voraussetzungen
- PayPal Business-Konto (oder Developer-Konto fuer Tests)
- PayPal REST API Zugangsdaten (Client ID + Secret)
- Aktiviertes PayPal-Modul im Plugin
PayPal Developer-Konto erstellen
Sandbox-Zugangsdaten (Test)
- Gehen Sie zu developer.paypal.com
- Loggen Sie sich ein oder erstellen Sie ein Developer-Konto
- Unter Apps & Credentials → Sandbox → Create App
- App-Name eingeben (z.B. "Kurs-Booking Test")
- Client ID und Secret notieren
Live-Zugangsdaten (Produktion)
- Bei developer.paypal.com einloggen
- Unter Apps & Credentials → Live → Create App
- App-Name eingeben (z.B. "Kurs-Booking")
- Client ID und Secret notieren
Modul aktivieren
Pfad: Einstellungen → Module
┌─ Zahlungs-Module ───────────────────────────┐
│ │
│ [x] PayPal │
│ Zahlung mit PayPal-Konto. │
│ Konfiguration unter Zahlungen. │
│ │
└─────────────────────────────────────────────┘
API-Keys konfigurieren
Pfad: Einstellungen → Zahlungen
Sandbox-Modus (Test)
┌─ PayPal Konfiguration ──────────────────────┐
│ │
│ Umgebung: [x] Sandbox (Test) │
│ │
│ Sandbox Client ID: │
│ [ASjBla7f2kN... ] │
│ │
│ Sandbox Secret: │
│ [EHT8kj... ] │
│ │
│ [ Verbindung testen ] │
│ │
└─────────────────────────────────────────────┘
Live-Modus (Produktion)
┌─ PayPal Konfiguration ──────────────────────┐
│ │
│ Umgebung: [ ] Sandbox (Test) │
│ │
│ Live Client ID: │
│ [AZprod7f2kN... ] │
│ │
│ Live Secret: │
│ [EProd8kj... ] │
│ │
│ [ Verbindung testen ] │
│ │
└─────────────────────────────────────────────┘
Webhook einrichten
Der Webhook wird automatisch unter folgender URL erreichbar:
https://ihre-domain.de/wp-json/kurs-booking/v1/webhook/paypal
Webhook in PayPal registrieren (optional)
Fuer automatische Zahlungsbenachrichtigungen:
- developer.paypal.com → Ihre App oeffnen
- Webhooks → Add Webhook
- URL eingeben:
https://ihre-domain.de/wp-json/kurs-booking/v1/webhook/paypal - Events auswaehlen:
CHECKOUT.ORDER.APPROVEDPAYMENT.CAPTURE.COMPLETEDPAYMENT.CAPTURE.REFUNDED- Save
Zahlungsablauf
Kunde im Buchungsformular
1. Kunde waehlt Tickets
↓
2. Kunde gibt Daten ein
↓
3. Kunde waehlt "PayPal" als Zahlungsart
↓
4. Kunde klickt "Zahlungspflichtig buchen"
↓
5. Weiterleitung zu PayPal
↓
6. Kunde loggt sich bei PayPal ein
↓
7. Kunde bestaetigt Zahlung
↓
8. Rueckleitung zur Website (Erfolgsseite)
Technischer Ablauf
Buchung erstellt (Status: pending)
↓
PayPal Order erstellt
↓
Redirect zu PayPal Approval URL
↓
Kunde bestaetigt bei PayPal
↓
PayPal leitet zurueck + Token
↓
REST API captured Order
↓
Webhook: PAYMENT.CAPTURE.COMPLETED
↓
Buchung aktualisiert (Status: completed)
↓
Bestaetigungs-E-Mail gesendet
Im Buchungsformular
Wenn PayPal aktiviert ist, erscheint es als Zahlungsoption:
Zahlungsart waehlen
─────────────────────────────────────
○ Ueberweisung
Zahlung per Ueberweisung nach Erhalt der Rechnung
○ PayPal
Sichere Zahlung mit Ihrem PayPal-Konto
Buchungs-Metadaten
Nach erfolgreicher PayPal-Zahlung werden folgende Daten gespeichert:
| Meta-Feld | Beschreibung |
|---|---|
_buchung_payment_method |
paypal |
_buchung_payment_status |
completed |
_paypal_order_id |
PayPal Order-ID |
_paypal_capture_id |
PayPal Capture-ID |
_paypal_payer_id |
PayPal Payer-ID |
_paypal_payer_email |
E-Mail des PayPal-Kontos |
_paypal_completed_at |
Zeitpunkt der Zahlung |
Rueckerstattungen
Rueckerstattungen erfolgen manuell ueber das PayPal-Dashboard:
- Bei paypal.com einloggen
- Transaktion suchen
- "Geld zuruecksenden" klicken
- Betrag eingeben (Voll oder Teil)
- Bestaetigen
Der Webhook aktualisiert automatisch den Buchungsstatus auf "refunded".
Fehlerbehebung
"PayPal-Verbindung fehlgeschlagen"
Moegliche Ursachen: - Falsche Client ID oder Secret - Sandbox-Keys im Live-Modus (oder umgekehrt) - API-Zugang in PayPal deaktiviert
Loesung: 1. Keys in PayPal Developer Dashboard pruefen 2. Richtigen Modus (Sandbox/Live) auswaehlen 3. "Verbindung testen" klicken
"Order konnte nicht erstellt werden"
Moegliche Ursachen: - Ungueltige Preise (z.B. 0,00 EUR) - PayPal-Account nicht verifiziert - API-Limits erreicht
Loesung: 1. Buchungspreis pruefen 2. PayPal-Account Status pruefen 3. PayPal-Support kontaktieren
Webhook-Events kommen nicht an
Moegliche Ursachen: - Webhook-URL falsch - SSL-Zertifikat ungueltig - Firewall blockiert PayPal IPs
Loesung: 1. Webhook-URL in PayPal pruefen 2. SSL-Zertifikat pruefen (muss gueltig sein) 3. PayPal IPs in Firewall erlauben
Sandbox-Test
Test-Accounts
PayPal stellt automatisch Sandbox-Accounts bereit: - Buyer: Simuliert Kunden - Seller: Simuliert Haendler
Diese finden Sie unter developer.paypal.com → Sandbox → Accounts
Test-Zahlung durchfuehren
- Testbuchung mit PayPal erstellen
- Bei Weiterleitung mit Sandbox-Buyer-Account einloggen
- Zahlung bestaetigen
- Buchungsstatus pruefen
Preise und Gebuehren
PayPal berechnet Transaktionsgebuehren:
| Transaktionstyp | Gebuehr (DE) |
|---|---|
| Inlands-Zahlung | 2,49% + 0,35 EUR |
| EU-Zahlung | 3,49% + 0,35 EUR |
Aktuelle Gebuehren: paypal.com/de/webapps/mpp/merchant-fees
Vergleich: PayPal vs. Stripe
| Aspekt | PayPal | Stripe |
|---|---|---|
| Zahlungsarten | PayPal-Konto | Kreditkarte |
| Verbreitung | Sehr hoch | Hoch |
| Checkout | Redirect zu PayPal | Redirect zu Stripe |
| Mobile | PayPal App Integration | Responsive Checkout |
| Gebuehren | 2,49% + 0,35 EUR | 1,5% + 0,25 EUR |
Empfehlung: Beide Zahlungsarten anbieten fuer maximale Flexibilitaet.
Technische Details
REST API Endpoints
| Endpoint | Zweck |
|---|---|
POST /wp-json/kurs-booking/v1/paypal/create-order |
Order erstellen |
POST /wp-json/kurs-booking/v1/paypal/capture-order |
Zahlung capturen |
POST /wp-json/kurs-booking/v1/webhook/paypal |
Webhook empfangen |
PHP-Klassen
| Klasse | Datei | Zweck |
|---|---|---|
Kurs_Booking_PayPal |
class-paypal.php |
Haupt-Integration |
Kurs_Booking_PayPal_Settings |
class-paypal-settings.php |
Settings-UI |
Kurs_Booking_PayPal_Webhook |
class-paypal-webhook.php |
Webhook-Handler |
SDK
Das Plugin nutzt das offizielle PayPal Server SDK:
paypal/paypal-server-sdk: ^2.1