Gérer les Webhooks Paddle avec Laravel Cashier et les Événements

March 27, 2025 Tutoriel

Apprends à utiliser les événements Laravel pour capter les webhooks Paddle, confirmer un paiement et envoyer un email automatique.

Gérer les Webhooks Paddle avec Laravel Cashier et les Événements

🚀 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. 🚀