Aller au contenu principal

🔍 Diagnostic Webhook Paiement

🚨 Problème Identifié​

Votre commande ne se met pas à jour avec le statut "paid" après paiement.

🔧 Solutions à Tester​

1. Déployer le Webhook de Debug​

# Déployer le webhook avec plus de logs
supabase functions deploy stripe-webhook-debug

# Tester avec une commande
# Regarder les logs en temps réel

2. Vérifier la Configuration Stripe Dashboard​

A. Webhook Endpoint​

  • URL : https://votre-projet.supabase.co/functions/v1/stripe-webhook
  • ÉvĂ©nements : checkout.session.completed
  • Statut : âś… Actif

B. Vérifier les Événements Reçus​

  1. Allez dans Stripe Dashboard > Webhooks
  2. Cliquez sur votre webhook
  3. Regardez la section "Recent deliveries"
  4. Vérifiez s'il y a des erreurs (rouge)

3. Vérifier les Logs Supabase​

A. Logs de la Fonction​

  1. Supabase Dashboard > Functions
  2. Cliquez sur stripe-webhook
  3. Regardez les logs en temps réel
  4. Cherchez les erreurs

B. Logs de la Base de Données​

  1. Supabase Dashboard > Logs
  2. Filtrez par "Database"
  3. Regardez les requĂŞtes UPDATE sur la table commandes

4. Tests de Diagnostic​

A. Test 1 : Vérifier les Commandes​

-- Vérifier les commandes récentes
SELECT id, status, payment_confirmed, payment_date, created_at
FROM commandes
ORDER BY created_at DESC
LIMIT 10;
-- Vérifier les liens de paiement
SELECT id, commande_id, stripe_payment_link_id, is_active, created_at
FROM payment_links
ORDER BY created_at DESC
LIMIT 10;

C. Test 3 : Test avec Stripe CLI​

# Écouter les événements en local
stripe listen --forward-to localhost:54321/functions/v1/stripe-webhook

# Déclencher un événement de test
stripe trigger checkout.session.completed

5. Problèmes Courants et Solutions​

A. Webhook Non Configuré​

  • SymptĂ´me : Aucun Ă©vĂ©nement reçu
  • Solution : Configurer le webhook dans Stripe Dashboard

B. Mauvaise Signature​

  • SymptĂ´me : Erreur 400 "Invalid signature"
  • Solution : VĂ©rifier STRIPE_WEBHOOK_SECRET

C. Commande Non Trouvée​

  • SymptĂ´me : "commande_id not found"
  • Solution : VĂ©rifier que commande_id est bien dans les mĂ©tadonnĂ©es

D. Erreur de Base de Données​

  • SymptĂ´me : Erreur SQL dans les logs
  • Solution : VĂ©rifier les permissions RLS et la structure de la table

E. Timeout de Fonction​

  • SymptĂ´me : Fonction qui timeout
  • Solution : Optimiser le code ou augmenter le timeout

6. Vérifications Spécifiques Stripe Connect​

A. Métadonnées de Session​

Avec Stripe Connect, vérifiez que les métadonnées contiennent :

{
"commande_id": "uuid-de-la-commande",
"platform": "kazacalendar",
"commission_rate": "4%",
"vendeur_id": "id-du-vendeur"
}

B. Application Fee​

Vérifiez que l'application fee est bien appliquée :

{
"application_fee_amount": 400, // 4€ en centimes
"transfer_data": {
"destination": "acct_xxx" // Compte vendeur
}
}

7. Script de Test Complet​

// Utilisez debug_webhook_paiement.dart
dart debug_webhook_paiement.dart

8. Étapes de Résolution​

Étape 1 : Vérifier les Logs​

  1. Déployer stripe-webhook-debug
  2. Effectuer un paiement de test
  3. Regarder les logs en temps réel

Étape 2 : Identifier le Problème​

  • Webhook reçu ? âś…/❌
  • Signature valide ? âś…/❌
  • Commande trouvĂ©e ? âś…/❌
  • Mise Ă  jour rĂ©ussie ? âś…/❌

Étape 3 : Corriger​

  • Si webhook non reçu → Configurer Stripe Dashboard
  • Si signature invalide → VĂ©rifier le secret
  • Si commande non trouvĂ©e → VĂ©rifier les mĂ©tadonnĂ©es
  • Si mise Ă  jour Ă©choue → VĂ©rifier la base de donnĂ©es

9. Monitoring Continu​

A. Alertes à Configurer​

  • Webhook en erreur
  • Commandes non mises Ă  jour
  • Timeout de fonction

B. Métriques à Surveiller​

  • Nombre d'Ă©vĂ©nements reçus
  • Taux de succès des mises Ă  jour
  • Temps de traitement

🎯 Résultat Attendu​

Après correction, vous devriez voir :

  1. ✅ Webhook reçu dans Stripe Dashboard
  2. ✅ Logs détaillés dans Supabase
  3. âś… Commande mise Ă  jour avec status: 'paid'
  4. âś… payment_confirmed: true
  5. âś… payment_date rempli

🚀 Prochaines Étapes​

  1. Déployer le webhook de debug
  2. Tester avec une commande
  3. Analyser les logs
  4. Corriger le problème identifié
  5. Vérifier que ça fonctionne

Le problème sera résolu ! 🎉