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:
@@ -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(
|
||||
|
||||
@@ -1249,10 +1249,10 @@ class _AmicaleFormState extends State<AmicaleForm> {
|
||||
Expanded(
|
||||
child: Text(
|
||||
_stripeStatus?.canAcceptPayments == true
|
||||
? "✅ Compte Stripe configuré - Commission plateforme: 2.5% (min 0.50€)"
|
||||
? "✅ Compte Stripe configuré - 100% des paiements pour votre amicale"
|
||||
: _stripeStatus?.onboardingCompleted == false
|
||||
? "⏳ Configuration Stripe en cours. Veuillez compléter le processus d'onboarding."
|
||||
: "💳 Les paiements CB seront soumis à une commission de 2.5% (min 0.50€)",
|
||||
: "💳 Activez les paiements par carte bancaire pour vos membres",
|
||||
style: theme.textTheme.bodySmall?.copyWith(
|
||||
color: theme.colorScheme.onSurface,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user