Mettre en place un système de paiement récurrent avec Stripe sur Laravel
Les paiements récurrents sont un élément clé des applications modernes offrant des services par abonnement. Dans ce tutoriel, nous allons apprendre à intégrer Stripe dans une application Laravel pour gérer des paiements récurrents et des abonnements.
Prérequis
Avant de commencer, assurez-vous d'avoir :
- Une installation de Laravel (version 8 ou supérieure)
- Un compte Stripe
- Composer installé sur votre machine
- Des connaissances de base en PHP et Laravel
Étape 1 : Installation de Stripe pour Laravel
Pour intégrer Stripe à votre application Laravel, nous allons utiliser la bibliothèque officielle Stripe PHP.
Installez la dépendance via Composer :
composer require stripe/stripe-php
Étape 2 : Configuration de Stripe
Après avoir installé la bibliothèque, configurez vos clés API Stripe dans le fichier .env
:
STRIPE_KEY=VotreCléPubliqueStripe
STRIPE_SECRET=VotreCléSecrèteStripe
Assurez-vous de remplacer VotreCléPubliqueStripe
et VotreCléSecrèteStripe
par vos véritables clés API que vous pouvez trouver dans votre Tableau de bord Stripe.
Étape 3 : Création des abonnements
Modèle User
Dans ce tutoriel, nous supposerons que vous avez déjà un modèle User
. Assurez-vous que votre modèle User
dispose des champs nécessaires pour stocker les informations de Stripe, comme stripe_customer_id
.
Routes et Contrôleurs
Créez les routes nécessaires dans votre fichier web.php
:
Route::get('/abonnement', [SubscriptionController::class, 'index']);
Route::post('/abonnement', [SubscriptionController::class, 'store']);
Créez ensuite le SubscriptionController
:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Customer;
use Stripe\Subscription;
class SubscriptionController extends Controller
{
public function index()
{
return view('abonnement');
}
public function store(Request $request)
{
Stripe::setApiKey(env('STRIPE_SECRET'));
// Créer ou récupérer le client Stripe
$user = $request->user();
if (!$user->stripe_customer_id) {
$customer = Customer::create([
'email' => $user->email,
]);
$user->stripe_customer_id = $customer->id;
$user->save();
}
// Créer l'abonnement
$subscription = Subscription::create([
'customer' => $user->stripe_customer_id,
'items' => [['price' => 'price_XXXXXXXXXXXXXX']],
]);
// Enregistrer l'ID de l'abonnement
$user->stripe_subscription_id = $subscription->id;
$user->save();
return redirect()->back()->with('message', 'Abonnement créé avec succès!');
}
}
N'oubliez pas de remplacer price_XXXXXXXXXXXXXX
par l'ID du prix que vous avez créé dans votre compte Stripe.
Vue d'abonnement
Créez une vue resources/views/abonnement.blade.php
:
@extends('layouts.app')
@section('content')
<h1>Souscrire à un abonnement</h1>
@if(session('message'))
<p>{{ session('message') }}</p>
@endif
<form action="/abonnement" method="POST">
@csrf
<button type="submit">S'abonner</button>
</form>
@endsection
Étape 4 : Gestion des webhooks
Pour gérer les événements tels que les paiements réussis ou les échecs de paiement, configurez des Webhooks dans votre compte Stripe.
Configuration du Webhook
Dans votre compte Stripe, allez dans "Développeurs" > "Webhooks" et ajoutez un nouvel endpoint pointant vers https://votre-domaine.com/webhook-stripe
.
Route et Contrôleur du Webhook
Ajoutez la route dans web.php
:
Route::post('/webhook-stripe', [WebhookController::class, 'handle']);
Créez le WebhookController
:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class WebhookController extends Controller
{
public function handle(Request $request)
{
// Gérer les événements du webhook
$event = $request->all();
// Traitez différents types d'événements
if ($event['type'] == 'invoice.payment_succeeded') {
// Le paiement a réussi
}
return response('Webhook reçu', 200);
}
}
Conclusion
Félicitations ! Vous avez mis en place un système de paiement récurrent avec Stripe dans votre application Laravel. Pour aller plus loin, consultez la documentation officielle de Stripe sur les abonnements pour découvrir toutes les fonctionnalités disponibles.
N'oubliez pas de toujours tester vos intégrations en utilisant les clés de test de Stripe avant de passer en production.
Discutez de votre projet avec nous
Nous sommes ici pour vous aider avec vos besoins en développement Web. Planifiez un appel pour discuter de votre projet et comment nous pouvons vous aider.
Trouvons les meilleures solutions pour vos besoins.