Was ist PayPal im Website-Kontext?
PayPal ist ein Zahlungsdienst, über den Käufer online bezahlen, ohne dem Händler Karten- oder Kontodaten zu übergeben — im deutschen Markt ein Verfahren, nach dem im Checkout regelmäßig gefragt wird. Für die Website zählt die technische Seite: PayPal dokumentiert unter developer.paypal.com eine REST-Schnittstelle, ein JavaScript-SDK für den Bezahlbutton im Frontend, Webhooks für Zahlungs- und Erstattungsereignisse sowie eine Sandbox-Umgebung zum Testen. Damit lässt sich die Zahlung in die eigene Website einbauen, statt Käufer auf eine fremde Verkaufsplattform zu schicken.
Wie läuft eine Zahlung mit PayPal technisch ab?
In drei Schritten, so beschreibt es die PayPal-Dokumentation. Erstens legt die Anwendung die Bestellung serverseitig an — über die Orders-Schnittstelle unter /v2/checkout/orders, mit der Absicht, den Betrag sofort einzuziehen oder ihn zunächst nur zu reservieren. Zweitens bestätigt der Käufer die Zahlung bei PayPal; die Bestellung wechselt dabei von CREATED auf APPROVED. Drittens schließt die Anwendung die Zahlung wieder serverseitig ab, über /v2/checkout/orders/{id}/capture, und die Bestellung erreicht COMPLETED. Authentifiziert wird mit Client-ID und Secret, die gegen ein OAuth-Token getauscht werden. Das Secret gehört dabei ausschließlich auf den Server: PayPal schreibt in der Dokumentation ausdrücklich, es sicher aufzubewahren, und die Beispiele legen es als Umgebungsvariable ab.
PayPal direkt anbinden oder über einen Zahlungsdienstleister wie Stripe?
Beides ist möglich, und der Unterschied liegt weniger im Code als in Vertrag und Buchhaltung. Direkt heißt: eigener PayPal-Zugang, PayPals eigene Schnittstelle, Auszahlung und Streitfälle laufen bei PayPal. Über einen Zahlungsdienstleister heißt: PayPal ist eine Zahlungsart neben Karte und anderen Verfahren, angesprochen über eine Schnittstelle. Stripe dokumentiert PayPal als Zahlungsmethode für Konten in einer Reihe europäischer Länder, darunter Deutschland, und beschreibt daneben eine Variante mit dem eigenen PayPal-Konto. Praktisch bedeutet das: ein Vertrag, ein Dashboard, ein Auszahlungsrhythmus, eine Abstimmung in der Buchhaltung — gegenüber zwei getrennten Verträgen, zwei Auszahlungswegen und zwei Stellen, an denen Erstattungen und Streitfälle bearbeitet werden. Welcher Weg trägt, entscheidet siteway_ im Konzept.
Wie lässt sich PayPal testen, bevor die Website live geht?
Über die Sandbox. PayPal beschreibt sie als in sich geschlossene Testumgebung, die die Produktivumgebung nachbildet, ohne echte Konten zu berühren. Beim Anlegen des Entwicklerzugangs entstehen dort ein Geschäfts- und ein Privatkonto; weitere lassen sich im Developer-Dashboard ergänzen. Die Sandbox hat eigene Zugangsdaten und eine eigene Basis-Adresse unter api-m.sandbox.paypal.com. Wir fahren damit den kompletten Weg durch, bevor irgendetwas live geht: erfolgreiche Zahlung, abgebrochene Zahlung, abgelehnte Zahlung, Erstattung — und dazu die Webhooks, damit nicht nur der Kauf funktioniert, sondern auch das, was danach kommt.
Wozu Webhooks, wenn der Käufer die Zahlung im Browser bestätigt?
Weil der Browser nicht die verlässliche Quelle ist. Der Käufer kann das Fenster schließen, die Verbindung kann abreißen, und ein Endpunkt, der einer Rückmeldung aus dem Browser blind glaubt, lässt sich manipulieren. PayPal beschreibt Webhooks als HTTPS-Aufrufe an eine Adresse auf dem eigenen Server, sobald ein Ereignis eintritt — dokumentiert sind unter anderem CHECKOUT.ORDER.APPROVED, PAYMENT.CAPTURE.COMPLETED, PAYMENT.CAPTURE.DENIED und PAYMENT.CAPTURE.PENDING. Die Echtheit einer solchen Meldung wird geprüft, bevor irgendetwas verarbeitet wird; die Dokumentation nennt dafür zwei Wege, entweder eine Prüfsumme mit Signaturprüfung oder das Zurücksenden von Nachricht, Webhook-ID und Kopfzeilen an den Prüf-Endpunkt von PayPal.
Wie bildet die Website Erstattungen und Streitfälle ab?
Als Zustand, nicht als Ausnahme. Eine Bestellung endet nicht mit dem Kauf: Sie kann erstattet werden, teilweise erstattet werden, oder der Käufer eröffnet einen Streitfall. PayPal meldet diese Ereignisse ebenfalls per Webhook — dokumentiert sind unter anderem PAYMENT.CAPTURE.REFUNDED, PAYMENT.REFUND.PENDING, PAYMENT.REFUND.FAILED sowie CUSTOMER.DISPUTE.CREATED, CUSTOMER.DISPUTE.UPDATED und CUSTOMER.DISPUTE.RESOLVED. Auf der Website wird daraus eine klare Regel: Der Bestellstatus ändert sich, ein freigeschalteter Download oder Zugang wird wieder entzogen, die Benachrichtigung geht raus, und im Backend sieht man, was passiert ist. Sonst zeigt die Seite eine bezahlte Bestellung, während das Geld längst zurück ist.
Was ist beim Datenschutz zu beachten, wenn der PayPal-Button lädt?
Der Bezahlbutton ist kein Bild, sondern Fremdcode: Das JavaScript-SDK wird von PayPal-Servern geladen, dabei entsteht eine Verbindung zu einem Dritten. Das gehört in die Consent-Betrachtung und in die Datenschutzerklärung, und technisch heißt es meist: Der Button wird dort geladen, wo bezahlt wird, und nicht auf jeder Seite der Website. Dazu kommen die üblichen Punkte einer Zahlungsanbindung — nur die Felder übertragen, die für die Zahlung nötig sind, Zugangsdaten serverseitig halten, Übertragung ausschließlich über TLS, und die vertraglichen Grundlagen für die Verarbeitung klären. Das ist eine Beschreibung der Technik und keine Rechtsberatung; die rechtliche Bewertung gehört zu deinem Datenschutzbeauftragten oder deiner Kanzlei. Wie siteway_ die technische Seite behandelt, steht im Stack unter Sicherheit und Datenschutz.
Lässt sich PayPal in TYPO3, WordPress oder Statamic einbauen?
Ja, in allen dreien — und wir bauen die Anbindung jeweils selbst, mit den Bordmitteln des Systems. Die Kette ist überall dieselbe: Bezahlstrecke im Frontend, ein serverseitiger Endpunkt legt die Bestellung an und bestätigt sie, ein zweiter nimmt den Webhook entgegen. In TYPO3 entsteht dafür eine eigene Extension mit Controller-Routen für Anlegen, Bestätigen und Webhook, den Zugangsdaten in der Extension-Konfiguration oder einer Umgebungsvariablen und Fluid im Frontend. In WordPress entsteht ein eigenes Plugin statt Theme-Code, mit eigenen REST-Routen, den Zugangsdaten in der wp-config.php oder einer Umgebungsvariablen und Template beziehungsweise Blocks im Frontend. In Statamic liegt Laravel darunter: Route plus Controller, Zugangsdaten in der .env, Antlers oder Blade im Frontend. Der Zahlungsstatus wird in jedem der drei Systeme serverseitig entschieden, nie im Browser.