API PHP Stripe avec Checkout et Webhook
Introduction à Stripe Checkout et aux webhooks
Présentation de Stripe et de ses avantages
Stripe est une plateforme de paiement en ligne qui permet aux développeurs d'intégrer facilement des paiements sécurisés sur leurs sites web et applications. Grâce à son API puissante et flexible, Stripe facilite la gestion des paiements, des abonnements et des transactions internationales.
Explication du fonctionnement de Checkout et des webhooks
Stripe Checkout est une page de paiement hébergée par Stripe qui simplifie le processus de transaction pour les clients.
Les webhooks permettent à votre serveur de recevoir des notifications en temps réel des événements Stripe (paiement réussi, échec, remboursement, etc.), garantissant ainsi une mise à jour correcte de votre base de données.
Pourquoi utiliser Checkout et les webhooks ensemble ?
- Checkout simplifie l'expérience utilisateur et améliore la sécurité des paiements.
- Les webhooks permettent de suivre l'état des paiements et de prendre des actions en conséquence (confirmation de commande, mise à jour d'abonnement, etc.).
Préparation de l'environnement de développement
Installation de la bibliothèque Stripe pour PHP
composer require stripe/stripe-php
Configuration des clés API
Stripe fournit des clés API en mode test et production. Ajoutez-les à votre fichier de configuration.
require 'vendor/autoload.php';
StripeStripe::setApiKey('votre_cle_api_test');
Mise en place d'un environnement en ligne
Si vous travaillez en local, utilisez ngrok pour exposer votre serveur à Internet :
ngrok http 80
Création du fichier checkout.php
Récupération des informations du panier et calcul du montant total
$items = [
["nom" => "Produit A", "prix" => 2000, "quantite" => 1],
["nom" => "Produit B", "prix" => 1500, "quantite" => 2]
];
$total = 0;
foreach ($items as $item) {
$total += $item["prix"] * $item["quantite"];
}
Création de la session Checkout
$session = StripeCheckoutSession::create([
'payment_method_types' => ['card'],
'line_items' => [[
'price_data' => [
'currency' => 'eur',
'product_data' => ['name' => 'Commande #123'],
'unit_amount' => $total,
],
'quantity' => 1,
]],
'mode' => 'payment',
'success_url' => 'https://votre-site.com/success.php',
'cancel_url' => 'https://votre-site.com/cancel.php',
]);
header("Location: " . $session->url);
exit;
Création du fichier webhook.php
Réception et vérification du webhook
$endpoint_secret = 'votre_webhook_secret';
$payload = @file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$event = null;
try {
$event = StripeWebhook::constructEvent(
$payload, $sig_header, $endpoint_secret
);
} catch (Exception $e) {
http_response_code(400);
exit();
}
Traitement des événements
switch ($event->type) {
case 'checkout.session.completed':
$session = $event->data->object;
file_put_contents("paiements.log", json_encode($session), FILE_APPEND);
break;
case 'payment_intent.succeeded':
$paymentIntent = $event->data->object;
file_put_contents("paiements.log", "Paiement réussi : " . json_encode($paymentIntent), FILE_APPEND);
break;
case 'payment_intent.payment_failed':
$paymentIntent = $event->data->object;
file_put_contents("paiements.log", "Paiement échoué : " . json_encode($paymentIntent), FILE_APPEND);
break;
}
Note importante :
L'événement checkout.session.completed
indique que la session de paiement Checkout est terminée. Cela signifie que le client a été redirigé vers la page de paiement hébergée par Stripe, qu'il a interagi avec le formulaire de paiement, et que la session a atteint un état final.
Cependant, cela ne signifie pas nécessairement que le paiement a été réussi. La session peut être complétée même si le paiement a échoué ou a été annulé.
Configuration du webhook dans Stripe
- Accédez à votre tableau de bord Stripe.
- Allez dans Développeurs > Webhooks.
- Ajoutez votre URL publique (ex.
https://votre-site.com/webhook.php
). - Sélectionnez les événements à écouter (
checkout.session.completed
,payment_intent.succeeded
,payment_intent.payment_failed
).
Tests et débogage
Utilisation du mode test
Stripe propose des cartes de test pour simuler les paiements.
Vérification des événements webhook
- Consultez les logs Stripe dans le tableau de bord.
- Utilisez
print_r()
pour inspecter les données reçues.
Passage en mode production
Activation des clés API de production
Remplacez votre_cle_api_test
par votre clé live dans les fichiers PHP.
Sécurisation du script webhook
- Vérifiez toujours la signature du webhook.
- Utilisez HTTPS.
Conclusion et ressources supplémentaires
Vous avez maintenant une implémentation complète de Stripe Checkout avec webhook en PHP !