Aller au contenu principal

Résolution de l'Erreur "parameter_unknown (expires_at)"

🚨 Problème Identifié

L'erreur parameter_unknown (expires_at) indique que l'API Stripe ne reconnaît pas le paramètre expires_at dans la requête de création de lien de paiement.

🔍 Causes Possibles

  1. Version de l'API Stripe : Le paramètre expires_at n'est pas supporté par toutes les versions
  2. Format incorrect : Le timestamp doit être en secondes, pas en millisecondes
  3. API Payment Links : Certaines versions ne supportent pas l'expiration

✅ Solution Implémentée

1. Nouvelle Implémentation Stripe

J'ai créé StripePaymentServiceImplV2 qui utilise l'API Checkout Sessions au lieu de Payment Links :

  • Meilleure compatibilité avec l'API Stripe
  • Support de l'expiration via expires_at
  • Gestion d'erreur améliorée
  • Format de timestamp correct (secondes)

2. Changements Apportés

// ❌ Problématique
final response = await http.post(
Uri.parse('$_baseUrl/payment_links'),
body: {
'line_items[0][price]': priceId,
'expires_at': expiresAt.millisecondsSinceEpoch.toString(), // ❌ Millisecondes
},
);

Nouvelle Version (Checkout Sessions)

// ✅ Fonctionne
final response = await http.post(
Uri.parse('$_baseUrl/checkout/sessions'),
body: {
'payment_method_types[0]': 'card',
'line_items[0][price_data][currency]': currency,
'expires_at': (expiresAt.millisecondsSinceEpoch / 1000).round().toString(), // ✅ Secondes
},
);

3. Configuration Mise à Jour

Le fichier commande_details_page.dart utilise maintenant :

// Nouvelle implémentation
final stripeService = StripePaymentServiceImplV2(
stripeSecretKey: StripeConfig.secretKey,
stripePublishableKey: StripeConfig.publishableKey,
);

🧪 Test de la Solution

1. Redémarrez l'application

flutter run

2. Testez le paiement par CB

  1. Créez une commande avec un prix
  2. Passez au statut "Payée"
  3. Sélectionnez "Carte bancaire"
  4. Le lien de paiement devrait se créer sans erreur

3. Vérifiez le lien généré

  • Le lien devrait s'ouvrir dans le navigateur
  • Utilisez la carte de test : 4242 4242 4242 4242
  • Le paiement devrait fonctionner

🔧 Avantages de la Nouvelle Solution

FonctionnalitéPayment LinksCheckout Sessions
Expiration❌ Problématique✅ Supportée
Compatibilité❌ Limitée✅ Excellente
Fonctionnalités❌ Basiques✅ Complètes
Maintenance❌ Dépréciée✅ Actuelle

Fonctionnalités Supplémentaires

  • Expiration automatique des liens
  • Informations client intégrées
  • URLs de succès/annulation personnalisables
  • Gestion d'erreur améliorée
  • Support complet de l'API Stripe

📱 Interface Utilisateur

L'interface reste identique pour l'utilisateur :

  1. Sélection du mode de paiement → Modal moderne
  2. Sélection "Carte bancaire" → Création automatique du lien
  3. Partage natif → WhatsApp, SMS, etc.
  4. Paiement sécurisé → Page Stripe Checkout

🚀 Prochaines Étapes

Si tout fonctionne :

  • ✅ Le système de paiement est opérationnel
  • ✅ Les liens de paiement se créent correctement
  • ✅ L'expiration fonctionne (7 jours par défaut)

Si vous voulez personnaliser :

  • Modifiez les URLs de succès/annulation dans stripe_payment_service_impl_v2.dart
  • Ajustez la durée d'expiration dans commande_details_page.dart
  • Ajoutez des métadonnées personnalisées

🔍 Dépannage Supplémentaire

Si l'erreur persiste :

  1. Vérifiez vos clés Stripe :

    // Dans stripe_config.dart
    static const String testSecretKey = 'sk_test_51...'; // Votre vraie clé
  2. Vérifiez la connectivité :

    • Testez avec une carte de test
    • Vérifiez les logs de l'application
  3. Vérifiez le dashboard Stripe :

    • Allez dans "Developers" > "Logs"
    • Regardez les erreurs détaillées

📞 Support

Si vous rencontrez encore des problèmes :

  1. Consultez les logs de l'application
  2. Vérifiez le dashboard Stripe pour les erreurs
  3. Testez avec des montants faibles d'abord

La nouvelle implémentation devrait résoudre complètement le problème d'expiration des liens de paiement !