EnglishEN EspañolES FrançaisFR DeutschDE ItalianoIT PortuguêsPT 中文ZH 日本語JA 한국어KO РусскийRU NederlandsNL
← Back to all articles

Comment ajouter Stripe Checkout à un site Web PHP personnalisé (sans plugins)

Stripe est l’API de paiement la plus propre disponible, et la brancher directement en PHP signifie aucun abonnement SaaS mensuel, aucune surcharge WooCommerce et aucune commission par transaction de Shopify. Ce qui suit est l’implémentation exacte qui tourne dans de vraies boutiques clientes de BuiltToWinWeb : du PHP pur, le SDK officiel de Stripe, des webhooks sécurisés et des confirmations par e-mail automatisées. Vous verrez comment les pièces s’assemblent — session de paiement, redirection, vérification du webhook, traitement — pour encaisser des paiements réels sans céder une part à une plateforme. Tout ici est du code de production, pas une démo jetable.

Pourquoi PHP natif + Stripe surpasse tous les constructeurs de pages

Shopify facture 0,5 à 2 % par transaction en plus des frais propres de Stripe. WooCommerce ajoute 14+ dépendances de plugins qui ralentissent votre LCP de page de paiement à 3,8 s. Une intégration PHP personnalisée livre un checkout qui se charge en moins de 0,6 s et conserve chaque centime de marge.

  • Zéro frais de plateforme par transaction – seulement 2,9 % + 30 ¢ de Stripe
  • Score Lighthouse de la page de paiement : 98 contre le 61 typique de Shopify
  • Contrôle total des webhooks – traitement personnalisé, stock, e-mail
  • Aucun coût d'abonnement récurrent à la plateforme e-commerce
  • Vous possédez le code, hébergez où vous voulez, migrez librement

Étape 1 — Installer le SDK PHP de Stripe

Composer est l'approche la plus propre. Si votre hébergeur ne supporte pas Composer, téléchargez le ZIP du SDK et déposez-le à la racine de votre projet.

composer require stripe/stripe-php

Chargez-le ensuite en haut de votre script de checkout :

require_once __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));

Étape 2 — Créer une session Checkout (côté serveur)

Ne mettez jamais votre clé secrète dans le navigateur. Créez un endpoint côté serveur auquel le frontend envoie un 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'  => 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]);

Étape 3 — Rediriger l'utilisateur depuis le frontend

Un simple appel fetch sur le bouton de votre page de tarification :

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;
});

Étape 4 — Gérer les webhooks (traitement des commandes)

Stripe envoie un POST à votre endpoint webhook quand le paiement réussit. C'est ici que vous déclenchez l'e-mail, mettez à jour le stock et enregistrez la commande – PAS sur la page de succès.

<?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);

Enregistrez l'URL de votre webhook dans le tableau de bord Stripe sous Développeurs → Webhooks. Testez localement : `stripe listen --forward-to localhost/webhook.php`.

Étape 5 — Envoyer un e-mail de confirmation via PHPMailer

Dans votre fonction `fulfill_order()`, récupérez l'e-mail du client depuis la session et lancez 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]', 'Votre Entreprise');
    $mail->addAddress($email, $name);
    $mail->Subject = 'Paiement reçu — Merci !';
    $mail->Body    = "Bonjour $name, votre commande est confirmée.";
    $mail->send();
}

Comparatif des plateformes : PHP sur mesure vs Shopify vs WooCommerce

Métrique PHP personnalisé + Stripe Shopify WooCommerce
LCP du checkout 0,6s 1,9s 2,8s
Score Lighthouse 98 61 55
Frais plateforme/txn 0% 0,5–2% 0%*
Coût mensuel plateforme 0 $ 39–399 $ 0 $*
Dépendances plugins 0 n/a 14+
Propriété du code 100% 0% ~60%

Impact réel sur l'activité

Sur une boutique à 50 000 $/mois de ventes, les 2,9 % + 30 ¢ de Stripe sont inévitables. Mais les frais supplémentaires de plateforme Shopify de 0,5–2 % coûtent 250–1 000 $ de plus par mois. PHP personnalisé élimine cela.

  • Shopify Advanced (399 $/mois) + 0,5 % sur 50 000 $ = 649 $/mois de coûts de plateforme
  • PHP personnalisé + Stripe = 0 $/mois de coûts de plateforme (seulement les frais standard de Stripe)
  • Seuil de rentabilité sur une boutique à 8 000 $ : moins de 9 mois
  • Les pages de checkout chargent 3× plus vite = taux d'abandon de panier mesurément inférieur

Le calcul est simple : si vous traitez plus de 15 000 $/mois, une boutique PHP personnalisée est rentabilisée en moins d'un an.

Liste de contrôle de sécurité

  • Stockez les clés dans des variables d'environnement – ne les codez jamais en dur dans les fichiers PHP
  • Vérifiez toujours les signatures de webhook Stripe avec `constructEvent()`
  • Utilisez HTTPS partout – Stripe l'exige
  • Idempotence : vérifiez si la commande existe déjà avant de la traiter
  • Limitez le débit sur `/create-checkout-session.php` (10 requêtes/heure par IP)

Questions fréquentes

Ai-je besoin de Composer pour utiliser Stripe avec PHP ?

Composer est recommandé mais pas obligatoire. Vous pouvez télécharger le SDK PHP de Stripe en tant que fichier ZIP et l'inclure manuellement avec require_once. Composer facilite juste les mises à jour.

Est-il sécurisé de traiter des paiements sans une plateforme comme Shopify ?

Oui. Stripe est certifié PCI-DSS Niveau 1. Votre serveur ne gère jamais les numéros de carte bruts – le JS de Stripe les tokenise côté client. Votre PHP reçoit seulement un ID de session.

Comment tester Stripe sans débiter de vraies cartes ?

Utilisez le mode test de Stripe avec le préfixe de clé sk_test_. Utilisez la carte de test 4242 4242 4242 4242 avec n'importe quelle date d'expiration future et n'importe quel CVC à 3 chiffres.

Puis-je ajouter des abonnements avec cette approche ?

Oui. Changez le mode de la session Checkout de "payment" à "subscription" et passez un ID de prix récurrent au lieu de price_data. Stripe gère les cycles de facturation automatiquement.

Vous voulez une boutique Stripe personnalisée construite pour vous ?

BuiltToWinWeb construit des boutiques e-commerce PHP personnalisées avec une intégration Stripe native, des scores Lighthouse 98+, et zéro frais mensuel de plateforme. Tarif forfaitaire unique — vous possédez le code pour toujours.

Les boutiques sont généralement livrées en 3–4 semaines. Réponse garantie sous 24 heures.

Obtenir un devis gratuit

Données de référence issues de tests contrôlés sur un hébergement Hostinger VPS identique. Nombre de plugins WooCommerce mesuré sur une installation standard WooCommerce 8.x avec le thème Storefront.