Système de Paiement par Carte Bancaire
Ce système permet aux artisans de créer des liens de paiement Stripe pour leurs commandes et de les partager facilement avec leurs clients.
Fonctionnalités
- ✅ Création automatique de liens de paiement Stripe
- ✅ Partage natif via les applications de messagerie
- ✅ Messages personnalisés avec nom du client et montant
- ✅ Gestion des liens existants (évite les doublons)
- ✅ Expiration automatique des liens (7 jours par défaut)
- ✅ Interface utilisateur intuitive
Configuration
1. Configuration Stripe
- Créez un compte Stripe sur stripe.com
- Récupérez vos clés API dans le dashboard Stripe
- Modifiez le fichier
lib/core/config/stripe_config.dart:
class StripeConfig {
// Remplacez par vos vraies clés de test
static const String testSecretKey = 'sk_test_51...';
static const String testPublishableKey = 'pk_test_51...';
// Remplacez par vos vraies clés de production
static const String liveSecretKey = 'sk_live_51...';
static const String livePublishableKey = 'pk_live_51...';
// Passez à false en production
static const bool isTestMode = true;
}
2. Base de données
Exécutez la migration SQL pour créer la table des liens de paiement :
-- Exécutez le contenu du fichier :
-- supabase/migrations/create_payment_links_table.sql
3. Webhooks Stripe (Optionnel)
Pour une confirmation automatique des paiements, configurez un webhook Stripe :
- Dans le dashboard Stripe, allez dans "Developers" > "Webhooks"
- Créez un nouveau webhook avec l'URL :
https://votre-domaine.com/api/stripe-webhook - Sélectionnez l'événement :
payment_intent.succeeded - Implémentez le webhook pour confirmer automatiquement les paiements
Utilisation
Pour l'artisan
- Créer une commande avec un prix
- Aller dans les détails de la commande
- Cliquer sur "Demander le paiement"
- Choisir l'application de messagerie (WhatsApp, SMS, etc.)
- Envoyer le message pré-rempli au client
Pour le client
- Recevoir le lien de paiement
- Cliquer sur le lien pour ouvrir la page de paiement Stripe
- Saisir ses informations de carte bancaire
- Confirmer le paiement
Interface Utilisateur
Page de détails de commande
- Section Paiement : Apparaît uniquement si la commande a un prix et n'est pas payée
- Montant à payer : Affiché clairement avec la devise
- Bouton "Demander le paiement" : Crée et partage le lien
- Lien existant : Affiche les informations du lien déjà créé
Message de partage
Le message généré automatiquement :
Bonjour [Nom du client],
Voici le lien pour régler votre commande de 65,00€ :
https://buy.stripe.com/...
Merci pour votre confiance !
Architecture
Structure des fichiers
lib/features/payment/
├── domain/
│ ├── entities/
│ │ ├── payment_link.dart
│ │ └── payment_result.dart
│ ├── repositories/
│ │ └── payment_repository.dart
│ └── services/
│ ├── payment_service.dart
│ └── payment_share_service.dart
├── data/
│ ├── repositories/
│ │ └── payment_repository_impl.dart
│ └── services/
│ ├── stripe_payment_service_impl.dart
│ └── payment_share_service_impl.dart
└── presentation/
└── widgets/
└── payment_request_button.dart
Flux de données
- Création du lien :
PaymentRequestButton→PaymentRepository→StripeService - Partage :
PaymentShareService→share_plus - Stockage :
PaymentRepository→Supabase - Confirmation : Webhook Stripe →
PaymentRepository→ Mise à jour commande
Sécurité
- ✅ Clés API stockées de manière sécurisée
- ✅ RLS (Row Level Security) activé sur Supabase
- ✅ Validation des montants côté serveur
- ✅ Expiration automatique des liens
- ✅ Pas de stockage des données de carte bancaire
Tests
Mode test Stripe
- Utilisez les clés de test Stripe
- Les paiements ne sont pas réels
- Utilisez les cartes de test Stripe :
- Succès :
4242 4242 4242 4242 - Échec :
4000 0000 0000 0002
- Succès :
Mode production
- Remplacez par les clés de production
- Changez
isTestMode = false - Testez avec de petits montants
Dépannage
Erreurs courantes
- "Clé API invalide" : Vérifiez vos clés Stripe
- "Erreur de partage" : Vérifiez les permissions de l'appareil
- "Lien expiré" : Créez un nouveau lien de paiement
Logs
Activez les logs de debug pour diagnostiquer les problèmes :
// Dans main.dart
import 'package:flutter/foundation.dart';
void main() {
if (kDebugMode) {
// Logs de debug
}
}
Évolutions futures
- Notifications push pour les paiements confirmés
- Historique des paiements
- Remboursements
- Paiements récurrents
- Intégration avec d'autres processeurs de paiement