Gérer les Webhooks Paddle avec Laravel Cashier et les Événements
Apprends à utiliser les événements Laravel pour capter les webhooks Paddle, confirmer un paiement et envoyer un email automatique.
🚀 Introduction
Lorsqu'un paiement est validé sur Paddle, un événement webhook est envoyé à votre application.
Dans ce tutoriel, nous allons voir comment utiliser les événements et listeners de Laravel pour :
✅ Écouter les webhooks Paddle
✅ Vérifier si le paiement est validé
✅ Envoyer un email de confirmation à l'utilisateur
🔥 1. Comprendre les Événements & Listeners dans Laravel
Laravel utilise un système d'événements et de listeners pour exécuter des actions automatiques lorsqu'un événement se produit.
- Un événement représente une action qui a eu lieu (ex: "Paiement validé").
- Un listener est une classe qui réagit à cet événement (ex: "Envoyer un email après paiement").
Dans notre cas, Paddle envoie un webhook lorsque le paiement est validé, et nous allons utiliser un listener pour capter cet événement.
🛠️ 2. Création de l'Écouteur d'Événement (Listener)
Exécutez cette commande pour générer un listener :
php artisan make:listener PaddleEventListener
Ensuite, ouvrez le fichier app/Listeners/PaddleEventListener.php et modifiez-le comme suit :
<?php
namespace App\Listeners;
use App\Mail\CheckoutConfirmed;
use Laravel\Paddle\Cashier;
use Laravel\Paddle\Events\WebhookReceived;
use Illuminate\Support\Facades\Mail;
class PaddleEventListener
{
public function handle(WebhookReceived $event): void
{
$payload = $event->payload;
if ($payload['event_type'] === 'transaction.completed') {
$user = Cashier::findBillable($payload['data']['customer_id']);
if ($user) {
Mail::to($user->email)->send(new CheckoutConfirmed($user));
}
}
}
}
📩 3. Création de l'Email de Confirmation
Nous allons maintenant générer un email qui sera envoyé à l'utilisateur après son achat.
php artisan make:mail CheckoutConfirmed
Puis, modifiez le fichier app/Mail/CheckoutConfirmed.php :
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
class CheckoutConfirmed extends Mailable
{
use Queueable, SerializesModels;
public User $user;
public function __construct($user)
{
$this->user = $user;
}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Votre paiement est confirmé',
);
}
public function content(): Content
{
return new Content(
view: 'mails.checkout-confirmed',
);
}
public function attachments(): array
{
return [];
}
}
💌 4. Création de la Vue de l'Email
Dans resources/views/mails/checkout-confirmed.blade.php, ajoutez :
<!DOCTYPE html>
<html>
<head>
<title>Paiement Confirmé</title>
</head>
<body>
<h1>Merci, {{ $user->name }} !</h1>
<p>Votre abonnement est maintenant actif. Profitez de vos avantages ! 🎉</p>
</body>
</html>
🎉 Conclusion
Et voilà ! 🌟 Vous avez mis en place un système qui :
✅ Capte les webhooks Paddle via un événement
✅ Vérifie si un paiement est validé
✅ Envoie automatiquement un email de confirmation
Grâce aux événements et listeners de Laravel, la gestion des webhooks est simple et efficace. 🚀