Guide : Notifications de Paiement
Ce guide vous explique comment configurer les notifications push qui se déclenchent automatiquement lorsqu'un paiement est reçu via Stripe.
📋 Architecture
Quand un client paie via Stripe :
- Stripe envoie un webhook à votre fonction Supabase Edge
- La fonction Edge met à jour la commande et envoie une notification via Firebase Cloud Messaging (FCM)
- L'application mobile reçoit et affiche la notification
🚀 Étape 1 : Configuration Firebase
1.1 Créer un projet Firebase
- Allez sur Firebase Console
- Cliquez sur "Ajouter un projet"
- Nommez votre projet :
kazacalendar(ou autre) - Acceptez les conditions et créez le projet
1.2 Ajouter l'application Android
- Dans Firebase Console, cliquez sur l'icône Android
- Package name :
com.devkazit.kazacalendar(doit correspondre à votre build.gradle.kts) - Téléchargez le fichier
google-services.json - Placez-le dans :
android/app/google-services.json
1.3 Ajouter l'application iOS
- Dans Firebase Console, cliquez sur l'icône iOS
- Bundle ID : vérifiez dans Xcode (généralement
com.devkazit.kazacalendar) - Téléchargez le fichier
GoogleService-Info.plist - Placez-le dans :
ios/Runner/GoogleService-Info.plist
1.4 Configurer Firebase pour Android
Ajoutez dans android/build.gradle :
buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.4.0'
}
}
Ajoutez dans android/app/build.gradle.kts (à la fin du fichier) :
apply(plugin = "com.google.gms.google-services")
1.5 Récupérer la clé serveur FCM
- Dans Firebase Console, allez dans Paramètres du projet (⚙️)
- Onglet Cloud Messaging
- Copiez la Server Key (commence par
AAAA...) - Gardez cette clé précieusement !
🗄️ Étape 2 : Configuration Supabase
2.1 Créer la table des tokens FCM
Exécutez ce SQL dans votre dashboard Supabase (SQL Editor) :
-- Copiez le contenu de supabase/migrations/create_fcm_tokens_table.sql
Ou utilisez la migration :
# Si vous utilisez Supabase CLI
supabase db push
2.2 Configurer les secrets Supabase
Ajoutez la clé serveur FCM dans les secrets Supabase :
supabase secrets set FCM_SERVER_KEY=AAAA...votre_clé_serveur
Vérifiez que ces secrets sont aussi configurés :
supabase secrets list
# Vous devriez voir :
# - STRIPE_API_KEY
# - STRIPE_WEBHOOK_SECRET
# - SUPABASE_URL
# - SUPABASE_SERVICE_ROLE_KEY
# - FCM_SERVER_KEY (nouveau)
2.3 Déployer la fonction webhook mise à jour
supabase functions deploy stripe-webhook
Vérifiez les logs :
supabase functions logs stripe-webhook --follow
📱 Étape 3 : Configuration de l'application
3.1 Installer les dépendances
flutter pub get
3.2 Configuration iOS supplémentaire
Ouvrez ios/Runner.xcworkspace dans Xcode et :
- Activez Push Notifications dans Capabilities
- Activez Background Modes et cochez :
- ✅ Remote notifications
- ✅ Background fetch
3.3 Générer le fichier firebase_options.dart
# Installez FlutterFire CLI si pas déjà fait
dart pub global activate flutterfire_cli
# Configurez Firebase
flutterfire configure
Sélectionnez votre projet Firebase et les plateformes (iOS, Android).
✅ Étape 4 : Test
4.1 Test en développement
-
Lancez l'application :
flutter run -
Vérifiez les logs pour voir le token FCM :
📱 FCM Token: fXxxx...
✅ Token FCM sauvegardé pour l'utilisateur xxx -
Créez une commande avec paiement :
- Créez une commande
- Passez au statut "Payée"
- Sélectionnez "Carte bancaire"
- Créez et partagez le lien de paiement
-
Effectuez un paiement test :
- Utilisez la carte de test Stripe :
4242 4242 4242 4242 - Date d'expiration : n'importe quelle date future
- CVC : n'importe quel code à 3 chiffres
- Utilisez la carte de test Stripe :
-
Vérifiez la notification :
- Vous devriez recevoir : "💰 Paiement reçu ! [Client] a réglé [Montant] EUR"
4.2 Test avec Stripe CLI
# Écouter les webhooks
stripe listen --forward-to https://[votre-projet].supabase.co/functions/v1/stripe-webhook
# Déclencher un événement de test
stripe trigger checkout.session.completed
4.3 Vérification dans les logs
Logs Supabase :
supabase functions logs stripe-webhook
# Vous devriez voir :
# ✅ Commande updated successfully: [id]
# ✅ Notification sent successfully for token: fXxxx...
Logs Flutter :
📬 Notification reçue en premier plan
Titre: 💰 Paiement reçu !
Corps: Jean Dupont a réglé 50.00 EUR
🔧 Dépannage
Problème : Pas de notification reçue
Vérifications :
-
Token FCM sauvegardé ?
SELECT * FROM user_fcm_tokens WHERE active = true; -
FCM_SERVER_KEY configuré ?
supabase secrets list | grep FCM_SERVER_KEY -
Permissions accordées ?
- Vérifiez que vous avez accepté les notifications
-
Logs du webhook ?
supabase functions logs stripe-webhook
Problème : Erreur "FCM_SERVER_KEY not configured"
Solution :
# Ajoutez la clé serveur FCM
supabase secrets set FCM_SERVER_KEY=AAAA...votre_clé
# Redéployez la fonction
supabase functions deploy stripe-webhook
Problème : Token non trouvé
Solution :
- Déconnectez-vous de l'app
- Reconnectez-vous
- Vérifiez les logs :
✅ Token FCM sauvegardé
Problème : Notifications sur iOS uniquement en foreground
Solution : Vérifiez que dans Xcode :
- Push Notifications est activé
- Background Modes > Remote notifications est coché
📊 Monitoring
Vérifier les tokens actifs
SELECT
u.email,
t.fcm_token,
t.platform,
t.active,
t.updated_at
FROM user_fcm_tokens t
JOIN auth.users u ON u.id = t.user_id
WHERE t.active = true;
Nettoyer les tokens inactifs
SELECT cleanup_inactive_fcm_tokens();
Statistiques de notifications
Dans Firebase Console :
- Allez dans Cloud Messaging
- Consultez les statistiques d'envoi
🎯 Personnalisation
Modifier le message de notification
Éditez supabase/functions/stripe-webhook/index.ts ligne 130-141 :
notification: {
title: '💰 Nouveau paiement !', // Personnalisez ici
body: `Vous avez reçu ${amount} ${currency} de ${clientName}`,
sound: 'default',
badge: '1',
}
Redéployez :
supabase functions deploy stripe-webhook
Ajouter une navigation au clic
Éditez lib/core/services/notification_service.dart ligne 115 :
void _handleNotificationTap(RemoteMessage message) {
final commandeId = message.data['commande_id'];
if (commandeId != null) {
// Naviguez vers la page de la commande
navigatorKey.currentState?.pushNamed(
'/commande-details',
arguments: commandeId,
);
}
}
📝 Checklist complète
- Projet Firebase créé
- Applications Android/iOS ajoutées à Firebase
- Fichiers
google-services.jsonetGoogleService-Info.plisten place - FCM Server Key récupérée
- Table
user_fcm_tokenscréée dans Supabase - Secret
FCM_SERVER_KEYconfiguré dans Supabase - Fonction webhook redéployée
-
firebase_options.dartgénéré - Dépendances installées (
flutter pub get) - Permissions notifications accordées
- Test de paiement effectué avec succès
- Notification reçue et affichée
🎉 Félicitations !
Votre système de notifications de paiement est maintenant opérationnel ! Chaque fois qu'un client paiera, vous recevrez une notification instantanée.