VERIFICATION_STRIPE
✅ Vérification de la Configuration Stripe
Checklist de vérification
1. Configuration CSRF ✅
- [x] Exception CSRF configurée dans
bootstrap/app.phppour/stripe/* - [x] Route webhook définie dans
routes/web.php - [x] Route webhook utilise le handler personnalisé
StripeWebhookController
2. Configuration Stripe ✅
- [ ]
STRIPE_KEYprésent dans.env - [ ]
STRIPE_SECRETprésent dans.env - [ ]
STRIPE_WEBHOOK_SECRETprésent dans.env - [ ] Configuration dans
config/services.phpcorrecte
3. Base de données ✅
- [x] Migration
create_stripe_transactions_tablecréée - [ ] Migration exécutée :
php artisan migrate - [x] Modèle
StripeTransactioncréé avec toutes les méthodes nécessaires
4. Webhook Handler ✅
- [x]
StripeWebhookControllercréé et étendCashierController - [x] Tous les événements sont loggés
- [x] Toutes les transactions sont stockées dans la base de données
- [x] Gestion des erreurs sans bloquer le traitement
5. Stockage des IDs de paiement ✅
- [x] Table
stripe_transactionsavec colonnes :stripe_payment_intent_id(pour remboursements)stripe_charge_id(pour remboursements)stripe_invoice_idstripe_subscription_idstripe_customer_idstripe_checkout_session_id
- [x] Méthodes de recherche dans le modèle :
findByPaymentIntent()findByCharge()findByUser()
Commandes de vérification
1. Vérifier la configuration
./vendor/bin/sail artisan tinker
>>> config('services.stripe.webhook.secret')
>>> config('services.stripe.key')
2. Vérifier les migrations
./vendor/bin/sail artisan migrate:status
3. Vérifier les transactions stockées
./vendor/bin/sail artisan tinker
>>> App\Models\StripeTransaction::count()
>>> App\Models\StripeTransaction::latest(5)->get()
4. Tester le webhook localement
# Dans un terminal, lancer Stripe CLI
stripe listen --forward-to localhost/stripe/webhook
# Dans un autre terminal, déclencher un événement de test
stripe trigger payment_intent.succeeded
Utilisation pour les remboursements
Exemple : Rembourser un paiement
use App\Models\StripeTransaction;
use Stripe\StripeClient;
// Trouver la transaction
$transaction = StripeTransaction::findByPaymentIntent('pi_xxxxx');
if ($transaction && $transaction->stripe_charge_id) {
$stripe = new StripeClient(config('services.stripe.secret'));
// Créer un remboursement
$refund = $stripe->refunds->create([
'charge' => $transaction->stripe_charge_id,
'amount' => $transaction->amount * 100, // Convertir en centimes
]);
// Logger le remboursement
Log::info('Remboursement effectué', [
'transaction_id' => $transaction->id,
'refund_id' => $refund->id,
'amount' => $refund->amount / 100,
]);
}
Logs et monitoring
Tous les événements Stripe sont loggés dans :
- Laravel logs :
storage/logs/laravel.log - Base de données : Table
stripe_transactions - Stripe CLI : Terminal où tourne
stripe listen
Vérifier les logs
# Logs Laravel
./vendor/bin/sail artisan log:tail
# Ou directement
tail -f storage/logs/laravel.log
Setup Intent, X jours gratuits et test
Principe
- Setup Intent : enregistrer une carte sans débiter. Idéal pour les X jours gratuits (carte enregistrée à l’inscription, débit uniquement après l’essai).
- Si le Setup fonctionne, le débit API fonctionnera : le paiement se fait côté serveur (PaymentIntent
off_session), sans interaction utilisateur.
Flux recommandé
- Enregistrer la carte : checkout « Enregistrer ma carte » (Setup Intent + Elements) ou admin « Test Setup ».
- Débiter plus tard : CRON ou action manuelle →
PaymentIntent::createavecpayment_method,off_session,confirm.
Test admin (Tarifs)
- Vérifier les clés → Test Setup (enregistrer une carte test, ex.
4242 4242 4242 4242) → Test débit API (0,50 € prélevés via API, sans redirection). - « Paiement test Checkout » reste disponible (redirection Stripe classique).
Prochaines étapes recommandées
-
Exécuter la migration :
./vendor/bin/sail artisan migrate -
Tester le webhook :
stripe listen --forward-to localhost/stripe/webhook stripe trigger payment_intent.succeeded -
Vérifier que les transactions sont stockées :
./vendor/bin/sail artisan tinker >>> App\Models\StripeTransaction::count() -
Créer une interface admin (optionnel) :
- Liste des transactions
- Détails d'une transaction
- Bouton de remboursement