Découvrez comment intégrer Paddle Checkout avec Laravel Cashier pour gérer les paiements et abonnements facilement.
Laravel Cashier simplifie la gestion des paiements avec Paddle, notamment pour les transactions uniques et les abonnements. Dans cet article, nous allons voir comment :
✅ Configurer Paddle Checkout dans Laravel
✅ Ajouter une page de paiement Filament
✅ Gérer les webhooks Paddle pour suivre les paiements
Installe Cashier Paddle via Composer :
composer require laravel/cashier-paddle
Puis publie les migrations et exécute-les :
php artisan vendor:publish --tag="cashier-migrations"
php artisan migrate
.env
:PADDLE_CLIENT_SIDE_TOKEN=test_c4f42c5d6081a68fb9396d0ad5c
PADDLE_API_KEY=efaa8c6e1ebf2ee89a507a910ec2b840b9a58488de99a9de30
PADDLE_SANDBOX=true
Avant de pouvoir utiliser Paddle Checkout, tu dois créer un produit et récupérer son Product ID.
pri_xxxxxxxx
).Cet ID est essentiel pour générer le lien de paiement avec Cashier Paddle.
Ajoute le trait Billable dans app/Models/User.php
:
use Laravel\Paddle\Billable;
class User extends Authenticatable
{
use Billable;
}
Cela permet à chaque utilisateur d'effectuer des paiements et de suivre ses transactions.
Crée la page Checkout avec la commande suivante :
php artisan make:filament-page Checkout
Puis modifie app/Filament/Pages/Checkout.php
:
<?php
namespace App\Filament\Pages;
use Filament\Pages\Page;
class Checkout extends Page
{
protected static ?string $navigationIcon = 'heroicon-o-credit-card';
protected static string $view = 'filament.pages.checkout';
protected function getViewData(): array
{
$checkout = auth()->user()->checkout('pri_xxxxxxxx');
return ['checkout' => $checkout];
}
}
Dans resources/views/filament/pages/checkout.blade.php
, ajoute :
<x-filament::page>
@paddleJS
<div class="max-w-lg mx-auto bg-white dark:bg-gray-800 rounded-lg shadow-md p-6 text-center">
<h2 class="text-xl font-bold text-gray-800 dark:text-gray-200">Paiement</h2>
<p class="text-gray-600 dark:text-gray-400 mb-4">
Accédez à toutes les fonctionnalités premium avec notre achat unique.
</p>
@if(auth()->user()->hasPurchased())
<p class="text-green-500">✅ Vous avez déjà effectué un achat !</p>
@else
<x-paddle-button :checkout="$checkout" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 mt-4">
Acheter avec Paddle
</x-paddle-button>
@endif
</div>
</x-filament::page>
Dans Paddle Dashboard → Developer Tools → Webhooks, ajoute l’URL :
https://xxxxx.ngrok.io/paddle/webhook
⚠️ Important : Si tu testes en local, expose ton serveur avec Herd :
herd share
Dans .env
:
PADDLE_WEBHOOK_SECRET=your_webhook_secret
Modifie bootstrap/app.php
pour permettre à Paddle d'envoyer des requêtes :
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: [
'paddle/*',
]);
})
Ajoute une méthode hasPurchased() dans User.php
pour vérifier les paiements :
use Laravel\Paddle\Transaction;
public function hasPurchased(): bool
{
return Transaction::where('billable_id', $this->id)
->where('status', 'completed')
->exists();
}
🎯 Bravo ! Tu as maintenant un système de paiement complet avec Laravel Filament et Paddle.
🚀 Prochaine étape : Passe en mode production en remplaçant PADDLE_SANDBOX=true
par false
dans .env
.
💬 As-tu des questions ? Laisse un commentaire !