Come aggiungere Stripe Checkout a un sito web PHP personalizzato (senza plugin)
Stripe è l'API di pagamento più pulita disponibile. Nessuna tariffa SaaS mensile, nessun overhead WooCommerce, nessuna commissione di transazione Shopify. Questa è l'implementazione esatta utilizzata sui negozi dei clienti di BuiltToWinWeb — PHP, Stripe SDK, webhook e conferme via email.
Perché PHP nativo + Stripe supera qualsiasi costruttore di pagine
Shopify addebita dallo 0,5 al 2% per transazione oltre alla commissione di Stripe. WooCommerce aggiunge 14+ dipendenze di plugin che rallentano l'LCP della pagina di checkout a 3,8 s. Un'integrazione PHP personalizzata offre un checkout che si carica in meno di 0,6 s.
- Zero commissioni di piattaforma per transazione – solo il 2,9% + 30¢ di Stripe
- Punteggio Lighthouse della pagina checkout: 98 contro il tipico 61 di Shopify
- Pieno controllo webhook – adempimento personalizzato, inventario, email
- Nessun costo di abbonamento ricorrente alla piattaforma e-commerce
- Possiedi il codice, ospita ovunque, migra liberamente
Passo 1 — Installare il PHP SDK di Stripe
Composer è l'approccio più pulito. Se il tuo host non supporta Composer, scarica il ZIP dell'SDK.
composer require stripe/stripe-php
Poi caricalo in cima al tuo script di checkout:
require_once __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));
Passo 2 — Creare una sessione Checkout (lato server)
Non mettere mai la tua chiave segreta nel browser. Crea un endpoint lato server a cui il frontend fa POST:
<?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' => 175000,
'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]);
Passo 3 — Reindirizzare l'utente dal frontend
Una semplice chiamata fetch sul pulsante della tua pagina prezzi:
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;
});
Passo 4 — Gestire i webhook (evasione ordini)
Stripe invia un POST al tuo endpoint webhook quando il pagamento ha successo. Qui attivi l'email, aggiorni l'inventario e registri l'ordine.
<?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') {
fulfill_order($event->data->object);
}
http_response_code(200);
Registra l'URL del webhook nel pannello Stripe sotto Sviluppatori → Webhook.
Passo 5 — Inviare un'email di conferma tramite PHPMailer
Nella tua funzione `fulfill_order()`, recupera l'email del cliente dalla sessione:
function fulfill_order($session) {
$email = $session->customer_details->email;
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.yourhost.com';
$mail->setFrom('hello@yoursite.com', 'La Tua Azienda');
$mail->addAddress($email);
$mail->Subject = 'Pagamento ricevuto — Grazie!';
$mail->Body = 'Il tuo ordine è confermato.';
$mail->send();
}
Platform Comparison — Custom PHP vs Shopify vs WooCommerce
Impatto reale sul business
Su uno store da $50.000/mese, il 2,9% + 30¢ di Stripe è inevitabile. Ma la commissione aggiuntiva di piattaforma Shopify dello 0,5–2% costa $250–$1.000 extra al mese.
- Shopify Advanced ($399/mese) + 0,5% su $50k = $649/mese di costi piattaforma
- PHP personalizzato + Stripe = $0/mese di costi piattaforma
- Breakeven su uno store da $5.600: meno di 9 mesi
- Le pagine checkout caricano 3× più velocemente = minor tasso di abbandono del carrello
Il calcolo è semplice: se elabori più di $15.000/mese, uno store PHP personalizzato si ripaga in meno di un anno.
Lista di controllo sicurezza
- Archivia le chiavi nelle variabili d'ambiente – mai hardcoded nei file PHP
- Verifica sempre le firme webhook Stripe con `constructEvent()`
- Usa HTTPS ovunque – Stripe lo richiede
- Idempotenza: verifica se l'ordine esiste già prima di evaderlo
- Limita il rate su `/create-checkout-session.php` (10 richieste/ora per IP)
Frequently Asked Questions
Ho bisogno di Composer per usare Stripe con PHP?
Composer è consigliato ma non obbligatorio. Puoi scaricare l'SDK PHP di Stripe come file ZIP e includerlo manualmente con require_once.
È sicuro elaborare pagamenti senza una piattaforma come Shopify?
Sì. Stripe è certificato PCI-DSS Livello 1. Il tuo server non gestisce mai i numeri di carta grezzi – il JS di Stripe li tokenizza lato client.
Come testo Stripe senza addebitare carte reali?
Usa la modalità test di Stripe con prefisso sk_test_. Usa la carta di test 4242 4242 4242 4242 con qualsiasi data di scadenza futura.
Posso aggiungere abbonamenti con questo approccio?
Sì. Cambia la modalità della sessione Checkout da "payment" a "subscription" e passa un ID prezzo ricorrente. Stripe gestisce i cicli di fatturazione automaticamente.
Vuoi uno store Stripe personalizzato costruito per te?
BuiltToWinWeb costruisce store e-commerce PHP personalizzati con integrazione Stripe nativa, punteggi Lighthouse 98+, e zero commissioni mensili di piattaforma.
Gli store vengono consegnati tipicamente in 3–4 settimane. Risposta garantita entro 24 ore.
Dati benchmark da test controllati su hosting Hostinger VPS identico.