Gateway di pagamento WooCommerce: Stripe, PayPal e la sicurezza del checkout

Il gateway di pagamento è il punto più sensibile di un e-commerce: lì transitano i dati di carta e i token. Come scegliere tra Stripe e PayPal, perché il PCI-DSS non è opzionale, e perché gestire male il 3D Secure 2 (SCA) costa conversioni.
Il gateway di pagamento è il cuore di un e-commerce WooCommerce — e il punto più delicato. Qui transitano i dati di carta di credito (o meglio, i token che li rappresentano), qui si gioca la conversione finale, e qui un errore di configurazione può costare multe salate per non conformità PCI-DSS. La scelta del gateway non è solo una questione di commissioni: è una questione di sicurezza, di conversione, e di conformità normativa. E su WooCommerce, dove il gateway è un plugin, la configurazione conta quanto la scelta.
Il primo punto da chiarire è che WooCommerce non dovrebbe mai toccare i dati di carta. Se il tuo checkout chiede il numero di carta e lo invia al tuo server, sei nel scope PCI-DSS — e il PCI-DSS level 1 (per chi processa direttamente i dati di carta) è un audit annuale che costa decine di migliaia di euro. I gateway seri (Stripe, PayPal, Braintree) usano un pattern che mantiene i dati di carta sul loro dominio: il browser del cliente parla direttamente con il gateway, e il tuo server riceve solo un token. Questo ti tiene fuori dal PCI-DSS level 1 — sei nel level SAQ-A, il più leggero.
Stripe vs PayPal: non è solo una questione di commissioni
Stripe e PayPal sono i due gateway più usati su WooCommerce, e la scelta non è solo di costo. Stripe ha commissioni più basse (1.4% + 0.25€ per carte europee, 3.25% + 0.25€ per non europee) e un'API più pulita. PayPal ha commissioni simili ma è più riconoscuto dai consumatori — molti hanno un conto PayPal e preferiscono non inserire la carta. La scelta ideale è offrire entrambi: Stripe per chi paga con carta, PayPal per chi ha il conto. La conversione aumenta quando dai scelta.
La configurazione di Stripe su WooCommerce con Stripe Payments (il plugin ufficiale):
// functions.php — configura Stripe con 3D Secure (SCA) obbligatorio
add_filter( 'wc_stripe_payment_intent_options', function( $options ) {
// Forza il 3D Secure per le carte europee (SCA compliance)
$options['payment_method_options']['card']['request_three_d_secure'] = 'any';
// Capture automatico (non authorize-only)
$options['capture_method'] = 'automatic';
return $options;
} );
// Configura i webhook di Stripe per gli aggiornamenti ordini
add_action( 'woocommerce_api_wc_stripe', function() {
// Il webhook aggiorna lo stato dell'ordine quando Stripe
// conferma il pagamento asincrono (3D Secure, banche lente)
$payload = @file_get_contents( 'php://input' );
$event = json_decode( $payload );
if ( isset( $event->type ) && 'payment_intent.succeeded' === $event->type ) {
$order_id = $event->data->object->metadata->order_id ?? null;
if ( $order_id ) {
$order = wc_get_order( $order_id );
if ( $order && $order->has_status( 'pending' ) ) {
$order->payment_complete();
}
}
}
http_response_code( 200 );
} );3D Secure 2 e SCA: perché non configurarlo costa conversioni
Il 3D Secure 2 (Strong Customer Authentication) è obbligatorio in Europa dal 2021. Se non lo configuri, le banche rifiutano i pagamenti — e il cliente vede un errore generico invece di una richiesta di autenticazione. La differenza tra un 3D Secure ben configurato e uno assente è misurabile: il primo ha un tasso di completamento del 95% sulle carte europee, il secondo del 60% — perché il 40% delle transazioni viene rifiutato dalla banca senza che il cliente capisca perché.
Il 3D Secure ha un impatto sulla conversione che va gestito. Non è solo attivarlo — è configurarlo per minimizzare l'attrito:
// Configura il 3D Secure per minimizzare l'attrito
add_filter( 'wc_stripe_card_payment_intent', function( $intent, $order ) {
// SCA: 'any' richiede 3DS quando possibile, 'automatic' lo decide a Stripe
$intent['payment_method_options']['card']['request_three_d_secure'] = 'automatic';
// Per i clienti registrati, usa il payment method salvato (3DS non ripetuto)
if ( is_user_logged_in() && function_exists( 'wc_stripe_get_customer_id' ) ) {
$customer_id = wc_stripe_get_customer_id( get_current_user_id() );
if ( $customer_id ) {
$intent['customer'] = $customer_id;
$intent['setup_future_usage'] = 'on_session'; // salva per pagamenti futuri
}
}
return $intent;
}, 10, 2 );Il test del checkout end-to-end
Ogni modifica al gateway va testata end-to-end prima di andare in produzione. Il test non è 'vedo la pagina di checkout' — è 'completo un ordine reale con una carta di test e verifico che l'ordine risulti pagato'. Stripe ha carte di test dedicate:
# Carte di test Stripe (modalità sandbox)
# 4242 4242 4242 4242 — Visa, pagamento riuscito senza 3DS
# 4000 0027 6000 3184 — Visa, richiede 3DS (SCA)
# 4000 0000 0000 9995 — Visa, pagamento rifiutato (insufficient funds)
# 5555 5555 5555 4444 — Mastercard, pagamento riuscito
# Verifica che il webhook di Stripe sia configurato
curl -sI https://www.example.com/?wc-api=wc_stripe
# Output atteso: HTTP/2 200
# Verifica che il checkout carichi correttamente
curl -s https://www.example.com/checkout/ | grep -c 'stripe'
# Output > 0: Stripe è caricato nella pagina di checkoutIl gateway di pagamento è l'ultimo miglio dell'e-commerce — dove la tecnologia incontra i soldi. Configurarlo bene non è solo sicurezza: è conversione. Un 3D Secure che non si attiva costa il 40% delle transazioni europee. Un webhook non configurato costa gli ordini asincroni. E una scelta sbagliata di gateway costa commissioni che si accumulano mese dopo mese. Il checkout è il punto dove non ci si può permettere di essere approssimativi.
Checkout, pagamenti e prestazioni del tuo e-commerce sotto controllo.
Verifica tecnica del tuo store WooCommerce: aggiornamenti controllati, sicurezza e ottimizzazione delle prestazioni.
Articoli correlati

Gateway di pagamento WooCommerce: scegliere, configurare e non perdere ordini
Leggi
Carrello abbandonato WooCommerce: recuperare il 30% delle vendite perse
Leggi
