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