feat: Implémentation complète Stripe Connect V1 - Configuration des paiements pour amicales

Cette intégration permet aux amicales de configurer leurs comptes Stripe Express
pour accepter les paiements par carte bancaire avec 0% de commission plateforme.

## 🎯 Fonctionnalités implémentées

### API PHP (Backend)
- **POST /api/stripe/accounts**: Création comptes Stripe Express
- **GET /api/stripe/accounts/:id/status**: Vérification statut compte
- **POST /api/stripe/accounts/:id/onboarding-link**: Liens onboarding
- **POST /api/stripe/locations**: Création locations Terminal
- **POST /api/stripe/terminal/connection-token**: Tokens connexion
- **POST /api/stripe/webhook**: Réception événements Stripe

### Interface Flutter (Frontend)
- Widget configuration Stripe dans amicale_form.dart
- Service StripeConnectService pour communication API
- États visuels dynamiques avec codes couleur
- Messages utilisateur "100% des paiements pour votre amicale"

## 🔧 Corrections techniques

### StripeController.php
- Fix Database::getInstance() → $this->db
- Fix $db->prepare() → $this->db->prepare()
- Suppression colonne details_submitted inexistante
- Ajout exit après réponses JSON (évite 502)

### StripeService.php
- Ajout imports Stripe SDK (use Stripe\Account)
- Fix Account::retrieve() → $this->stripe->accounts->retrieve()
- **CRUCIAL**: Déchiffrement données encrypted_email/encrypted_name
- Suppression calcul commission (0% plateforme)

### Router.php
- Suppression logs debug excessifs (fix nginx 502 "header too big")

### AppConfig.php
- application_fee_percent: 0 (était 2.5)
- application_fee_minimum: 0 (était 50)
- **POLITIQUE**: 100% des paiements vers amicales

##  Tests validés
- Compte pilote créé: acct_1S2YfNP63A07c33Y
- Location Terminal: tml_GLJ21w7KCYX4Wj
- Onboarding Stripe complété avec succès
- Toutes les APIs retournent 200 OK

## 📚 Documentation
- Plannings mis à jour avec accomplissements
- Architecture technique documentée
- Erreurs résolues listées avec solutions

## 🚀 Prêt pour production
V1 Stripe Connect opérationnelle - Prochaine étape: Terminal Payments V2

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-01 18:11:28 +02:00
parent 92a69c978a
commit 50f55d825d
10 changed files with 523 additions and 122 deletions

View File

@@ -28,27 +28,34 @@ class StripeConnectService {
if (createResponse.statusCode != 200 && createResponse.statusCode != 201) {
final error = createResponse.data?['message'] ?? 'Erreur création compte';
// Si le compte existe déjà, récupérer l'account_id
if (error.toString().contains('existe déjà')) {
final accountId = createResponse.data?['account_id'];
debugPrint(' Compte existant détecté, account_id: $accountId');
if (accountId != null) {
return await getOnboardingLink(accountId);
}
}
debugPrint('❌ Erreur création compte: $error');
throw Exception(error);
}
final accountId = createResponse.data?['account_id'];
debugPrint('✅ Compte créé/récupéré: $accountId');
// Récupérer les données de la réponse
final responseData = createResponse.data;
final accountId = responseData?['account_id'];
final isExisting = responseData?['existing'] ?? false;
final chargesEnabled = responseData?['charges_enabled'] ?? false;
final payoutsEnabled = responseData?['payouts_enabled'] ?? false;
if (accountId == null) {
throw Exception('account_id non retourné par l\'API');
}
if (isExisting) {
debugPrint(' Compte existant détecté, account_id: $accountId');
// Si le compte est déjà complètement configuré, pas besoin d'onboarding
if (chargesEnabled && payoutsEnabled) {
debugPrint('✅ Compte déjà configuré et actif');
return null; // Pas besoin de lien d'onboarding
}
debugPrint(' Compte existant mais configuration incomplète, génération du lien...');
} else {
debugPrint('✅ Nouveau compte créé: $accountId');
}
// 2. Créer la Location pour Terminal/Tap to Pay
try {
await apiService.post(