Stripe Checkout in eine benutzerdefinierte PHP-Website integrieren (ohne Plugins)
Stripe ist die sauberste verfügbare Zahlungs-API, und sie direkt in PHP einzubinden bedeutet keine monatlichen SaaS-Gebühren, keinen WooCommerce-Ballast und keine Transaktionsgebühr von Shopify. Es folgt die exakte Implementierung, die in echten BuiltToWinWeb-Kundenshops läuft: reines PHP, das offizielle Stripe-SDK, sichere Webhooks und automatisierte E-Mail-Bestätigungen. Sie sehen, wie die Teile zusammenpassen – Checkout-Sitzung, Weiterleitung, Webhook-Prüfung, Auslieferung –, sodass Sie echte Zahlungen annehmen, ohne einen Anteil an eine Plattform abzugeben. Alles hier ist Produktionscode, keine Wegwerf-Demo.
Warum natives PHP + Stripe jeden Seitenbauer übertrifft
Shopify berechnet 0,5–2 % pro Transaktion zusätzlich zu Stripes eigener Gebühr. WooCommerce fügt 14+ Plugin-Abhängigkeiten hinzu, die Ihre Checkout-Seiten-LCP auf 3,8 s verlangsamen. Eine benutzerdefinierte PHP-Integration liefert einen Checkout, der in unter 0,6 s lädt und jeden Cent Ihrer Marge behält.
- Null Plattform-Transaktionsgebühren – nur Stripes 2,9 % + 30 Cent
- Checkout-Seite Lighthouse-Score: 98 vs. Shopifys typischen 61
- Volle Webhook-Kontrolle – benutzerdefinierte Abwicklung, Lager, E-Mail
- Keine wiederkehrenden Abonnementkosten für die E-Commerce-Plattform
- Eigener Code, überall hosten, frei migrieren
Schritt 1 – Stripe PHP SDK installieren
Composer ist der sauberste Ansatz. Wenn Ihr Host Composer nicht unterstützt, laden Sie das SDK-ZIP herunter und legen Sie es in Ihrem Projektstamm ab.
composer require stripe/stripe-php
Laden Sie es dann am Anfang Ihres Checkout-Skripts:
require_once __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));
Schritt 2 – Checkout-Session erstellen (serverseitig)
Legen Sie Ihren geheimen Schlüssel niemals im Browser ab. Erstellen Sie einen serverseitigen Endpunkt, an den das Frontend POSTet:
<?php
require_once __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));
$session = \Stripe\Checkout\Session::create([
'payment_method_types' => ['card'],
'line_items' => [[
'price_data' => [
'currency' => 'usd',
'unit_amount' => 300000,
'product_data' => ['name' => 'Business Pro Website'],
],
'quantity' => 1,
]],
'mode' => 'payment',
'success_url' => 'https://yoursite.com/success?session_id={CHECKOUT_SESSION_ID}',
'cancel_url' => 'https://yoursite.com/pricing',
]);
header('Content-Type: application/json');
echo json_encode(['url' => $session->url]);
Schritt 3 – Benutzer vom Frontend weiterleiten
Ein einfacher Fetch-Aufruf auf Ihrer Preisseiten-Schaltfläche:
document.getElementById('buy-btn').addEventListener('click', async () => {
const res = await fetch('/create-checkout-session.php', { method: 'POST' });
const data = await res.json();
window.location.href = data.url;
});
Schritt 4 – Webhooks verarbeiten (Auftragsabwicklung)
Stripe sendet einen POST an Ihren Webhook-Endpunkt, wenn die Zahlung erfolgreich ist. Hier lösen Sie E-Mail aus, aktualisieren das Lager und erfassen die Bestellung – NICHT auf der Erfolgsseite (die Benutzer überspringen können).
<?php
$payload = file_get_contents('php://input');
$sig = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$secret = getenv('STRIPE_WEBHOOK_SECRET');
try {
$event = \Stripe\Webhook::constructEvent($payload, $sig, $secret);
} catch (\Exception $e) {
http_response_code(400); exit;
}
if ($event->type === 'checkout.session.completed') {
$session = $event->data->object;
fulfill_order($session);
}
http_response_code(200);
Registrieren Sie Ihre Webhook-URL im Stripe-Dashboard unter Entwickler → Webhooks. Lokal testen: `stripe listen --forward-to localhost/webhook.php`.
Schritt 5 – Bestätigungs-E-Mail über PHPMailer senden
Rufen Sie in Ihrer `fulfill_order()`-Funktion die Kunden-E-Mail aus der Session ab und starten Sie PHPMailer:
function fulfill_order($session) {
$email = $session->customer_details->email;
$name = $session->customer_details->name;
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.yourhost.com';
$mail->Username = getenv('SMTP_USER');
$mail->Password = getenv('SMTP_PASS');
$mail->setFrom('[email protected]', 'Ihr Unternehmen');
$mail->addAddress($email, $name);
$mail->Subject = 'Zahlung erhalten – Vielen Dank!';
$mail->Body = "Hallo $name, Ihre Bestellung ist bestätigt.";
$mail->send();
}
Plattformvergleich – individuelles PHP vs. Shopify vs. WooCommerce
Reale geschäftliche Auswirkungen
Bei einem Onlineshop mit 50.000 $/Monat Umsatz sind Stripes 2,9 % + 30 Cent unvermeidlich. Aber Shopifys zusätzliche 0,5–2 % Plattformgebühr kostet 250–1.000 $/Monat extra. Benutzerdefiniertes PHP eliminiert das.
- Shopify Advanced (399 $/Monat) + 0,5 % Gebühr auf 50.000 $ = 649 $/Monat Plattformkosten
- Benutzerdefiniertes PHP + Stripe = 0 $/Monat Plattformkosten (nur Stripes Standardgebühren)
- Break-even bei einem 8.000 $-Aufbau: unter 9 Monate
- Checkout-Seiten laden 3× schneller = messbar niedrigere Warenkorbabbruchrate
Die Rechnung ist einfach: Wenn Sie mehr als 15.000 $/Monat verarbeiten, amortisiert sich ein benutzerdefinierter PHP-Shop in unter einem Jahr.
Sicherheits-Checkliste
- Schlüssel in Umgebungsvariablen speichern – niemals im PHP-Code hart codieren
- Stripe-Webhook-Signaturen immer mit `constructEvent()` verifizieren
- HTTPS überall verwenden – Stripe erfordert es
- Idempotenz: Prüfen, ob die Bestellung bereits existiert, bevor sie ausgeführt wird
- Rate-Limiting für `/create-checkout-session.php` (10 Anfragen/Std. pro IP)
Häufig gestellte Fragen
Benötige ich Composer, um Stripe mit PHP zu verwenden?
Composer wird empfohlen, ist aber nicht erforderlich. Sie können das Stripe PHP SDK als ZIP-Datei herunterladen und manuell mit require_once einbinden. Composer erleichtert nur Updates.
Ist es sicher, Zahlungen ohne eine Plattform wie Shopify zu verarbeiten?
Ja. Stripe ist PCI-DSS Level 1 zertifiziert. Ihr Server verarbeitet niemals rohe Kartennummern – Stripes JS tokenisiert sie clientseitig. Ihr PHP erhält nur eine Session-ID.
Wie teste ich Stripe, ohne echte Karten zu belasten?
Verwenden Sie den Stripe-Testmodus mit dem Schlüsselpräfix sk_test_. Verwenden Sie die Testkarte 4242 4242 4242 4242 mit einem beliebigen zukünftigen Ablaufdatum und einem beliebigen 3-stelligen CVC.
Kann ich mit diesem Ansatz Abonnements hinzufügen?
Ja. Ändern Sie den Checkout-Session-Modus von "payment" auf "subscription" und übergeben Sie eine wiederkehrende Preis-ID statt price_data. Stripe verwaltet Abrechnungszyklen automatisch.
Möchten Sie einen maßgeschneiderten Stripe-Shop?
BuiltToWinWeb baut benutzerdefinierte PHP-E-Commerce-Shops mit nativer Stripe-Integration, Lighthouse 98+ Scores und null monatlichen Plattformgebühren. Einmalige Pauschalgebühr – Sie besitzen den Code für immer.
Shops werden typischerweise in 3–4 Wochen geliefert. Antwort innerhalb von 24 Stunden garantiert.
Benchmark-Daten aus kontrollierten Tests auf identischem Hostinger VPS-Hosting. WooCommerce-Plugin-Anzahl gemessen bei Standard-WooCommerce 8.x-Installation mit Storefront-Theme.