Aller au contenu principal

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

  1. Créez un compte Stripe sur stripe.com
  2. Récupérez vos clés API dans le dashboard Stripe
  3. 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 :

  1. Dans le dashboard Stripe, allez dans "Developers" > "Webhooks"
  2. Créez un nouveau webhook avec l'URL : https://votre-domaine.com/api/stripe-webhook
  3. Sélectionnez l'événement : payment_intent.succeeded
  4. Implémentez le webhook pour confirmer automatiquement les paiements

Utilisation

Pour l'artisan

  1. Créer une commande avec un prix
  2. Aller dans les détails de la commande
  3. Cliquer sur "Demander le paiement"
  4. Choisir l'application de messagerie (WhatsApp, SMS, etc.)
  5. Envoyer le message pré-rempli au client

Pour le client

  1. Recevoir le lien de paiement
  2. Cliquer sur le lien pour ouvrir la page de paiement Stripe
  3. Saisir ses informations de carte bancaire
  4. 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

  1. Création du lien : PaymentRequestButtonPaymentRepositoryStripeService
  2. Partage : PaymentShareServiceshare_plus
  3. Stockage : PaymentRepositorySupabase
  4. 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

Mode production

  • Remplacez par les clés de production
  • Changez isTestMode = false
  • Testez avec de petits montants

Dépannage

Erreurs courantes

  1. "Clé API invalide" : Vérifiez vos clés Stripe
  2. "Erreur de partage" : Vérifiez les permissions de l'appareil
  3. "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