Liaison Carte Bancaire - OpenBanking
Diagramme de Séquence
VUE D'ENSEMBLE
1.1 Contexte
La liaison de carte bancaire est une fonctionnalité centrale de REWAPP permettant la détection automatique des achats chez les partenaires. Cette fonctionnalité utilise une solution OpenBanking conforme à la directive européenne PSD2 (Payment Services Directive 2).
1.2 Objectif du Flux
Permettre à l'utilisateur de connecter de manière sécurisée son compte bancaire à REWAPP pour :
- Détecter automatiquement les transactions chez les partenaires
- Créditer les points de fidélité correspondants
- Maintenir une expérience utilisateur fluide et sans friction
1.3 Fournisseur Recommandé
BUDGET INSIGHT (POWENS)
Fournisseur recommandé pour l'intégration OpenBanking
- Agrément ACPR (Autorité de Contrôle Prudentiel et de Résolution)
- Couverture de plus de 350 banques françaises
- SDK natif compatible Capacitor
- Conformité PSD2 et RGPD
1.4 Prérequis
- Utilisateur inscrit et email vérifié
- Application mobile installée (iOS 14+ ou Android 10+)
- Compte bancaire actif dans une banque supportée
ACTEURS DU FLUX
Acteurs Impliqués
| Acteur | Description | Responsabilités |
|---|---|---|
Client (Utilisateur) |
Utilisateur final de l'application mobile | Initie la liaison, s'authentifie auprès de sa banque, donne son consentement |
Application Mobile |
Interface utilisateur Angular + Ionic | Affiche les écrans, intègre le SDK bancaire, gère les retours |
API Gateway |
Point d'entrée Kong / AWS API Gateway | Routing, authentification JWT, rate limiting |
Service Bancaire |
Microservice NestJS dédié | Orchestration du flux, gestion tokens, webhooks |
Base de Données |
PostgreSQL 15+ | Stockage sécurisé des tokens et métadonnées |
Cache Redis |
Redis 7+ | Cache temporaire, sessions en cours |
Fournisseur OpenBanking |
Budget Insight (Powens) | SDK, authentification bancaire, API transactions |
Banque Utilisateur |
Établissement bancaire du client | Authentification, autorisation, données transactions |
DIAGRAMME DE SÉQUENCE - FLUX NOMINAL
3.1 Diagramme PlantUML - Première Liaison de Carte
Diagramme PlantUML - Flux Nominal en 6 phases
DESCRIPTION DÉTAILLÉE DES ÉTAPES
4.1Phase 1 : Initialisation
| Étape | Action | Description | Données |
|---|---|---|---|
| 1.1 | Clic utilisateur | L'utilisateur clique sur "Lier ma carte" | - |
| 1.2 | Requête API | L'application envoie une requête d'initialisation | userId, deviceId, timestamp |
| 1.3 | Création session | Le Service Bancaire crée une session temporaire dans Redis | TTL: 10 minutes |
| 1.4 | Initialisation Provider | Appel API Budget Insight pour obtenir l'URL d'authentification | clientId, redirectUri |
| 1.5 | Retour paramètres | L'application reçoit les paramètres pour lancer le SDK | sessionId, authUrl, stateToken |
4.2Phase 2 : Authentification Bancaire
| Étape | Action | Description | Données |
|---|---|---|---|
| 2.1 | Lancement SDK | L'application lance le SDK Budget Insight natif | authUrl, configuration |
| 2.2 | Sélection banque | L'utilisateur recherche et sélectionne sa banque | bankId |
| 2.3 | Redirection | Redirection vers le portail d'authentification de la banque | OAuth2 flow |
| 2.4 | Authentification | L'utilisateur saisit ses identifiants bancaires | credentials (non stockés) |
| 2.5 | Validation 2FA | Si requis, validation par code SMS ou app bancaire | otpCode |
IMPORTANT
Les identifiants bancaires ne transitent JAMAIS par les serveurs REWAPP. L'authentification se fait directement entre l'utilisateur et sa banque via le SDK sécurisé.
4.3Phase 3 : Consentement et Autorisation
| Étape | Action | Description | Données |
|---|---|---|---|
| 3.1 | Affichage consentement | La banque affiche l'écran de consentement PSD2 | scope, durée (90 jours) |
| 3.2 | Acceptation | L'utilisateur accepte explicitement le partage des données | consent: true |
| 3.3 | Génération code | La banque génère un authorization_code | authorization_code |
| 3.4 | Échange tokens | Budget Insight échange le code contre des tokens | access_token, refresh_token |
| 3.5 | Callback app | Retour dans l'application avec le connectionId | connectionId, status |
4.4Phase 4 : Enregistrement
| Étape | Action | Description | Données |
|---|---|---|---|
| 4.1 | Finalisation | L'application envoie le connectionId au backend | sessionId, connectionId |
| 4.2 | Validation session | Vérification de la session en cours dans Redis | sessionId |
| 4.3 | Récupération infos | Appel API Budget Insight pour récupérer les détails | accounts, tokens |
| 4.4 | Chiffrement | Chiffrement des tokens avec AES-256-GCM | encryptedTokens |
| 4.5 | Stockage DB | Enregistrement sécurisé en base de données | bank_connections, linked_cards |
4.5Phase 5 : Configuration Webhooks
| Étape | Action | Description | Données |
|---|---|---|---|
| 5.1 | Enregistrement webhook | Configuration du webhook pour les nouvelles transactions | callbackUrl, events |
| 5.2 | Confirmation | Budget Insight confirme l'activation du webhook | webhookId, status |
| 5.3 | Mise à jour DB | Stockage de l'ID webhook pour référence | webhookId |
4.6Phase 6 : Confirmation
| Étape | Action | Description | Données |
|---|---|---|---|
| 6.1 | Réponse succès | Le backend confirme la liaison réussie | success, cardInfo |
| 6.2 | Affichage | L'application affiche un message de confirmation | toast, animation |
| 6.3 | Redirection | Redirection vers le dashboard principal | - |
DIAGRAMMES ALTERNATIFS
5.1Reconnexion de Carte (Token Expiré)
Détection Expiration
Le service vérifie le status de connexion et détecte l'expiration
Notification Push
"Reconnectez votre carte" envoyée à l'utilisateur
Flux OAuth2
Reprise du flux d'authentification bancaire (Phases 2-3)
Finalisation
Nouveaux tokens chiffrés, status ACTIVE, expiration +90 jours
5.2Ajout d'une Carte Supplémentaire
MULTI-CARTES SUPPORTÉ
Aucune limite sur le nombre de cartes. L'utilisateur peut définir une carte comme principale.
5.3Suppression de Carte
-
1
Demande de suppression
Menu carte > "Supprimer" - Popup d'avertissement si dernière carte
-
2
Révocation chez Budget Insight
DELETE /connections/{connectionId} - Révocation tokens et consentement
-
3
Suppression en base
DELETE FROM linked_cards + bank_connections
-
4
Confirmation utilisateur
Toast: "Carte supprimée avec succès"
GESTION DES ERREURS ET EXCEPTIONS
6.1Erreurs d'Authentification Bancaire
Codes d'erreur - Authentification
| Code Erreur | Cause | Message Utilisateur | Action |
|---|---|---|---|
INVALID_CREDENTIALS |
Identifiants bancaires incorrects | "Authentification bancaire échouée. Vérifiez vos identifiants." | Réessayer |
2FA_FAILED |
Code 2FA incorrect ou expiré | "Code de vérification incorrect ou expiré." | Renvoyer code |
2FA_TIMEOUT |
Délai d'attente 2FA dépassé | "Délai de vérification dépassé. Veuillez réessayer." | Nouvelle tentative |
ACCOUNT_LOCKED |
Compte bancaire bloqué | "Votre compte bancaire semble bloqué. Contactez votre banque." | Abandon |
BANK_UNAVAILABLE |
Banque temporairement indisponible | "Votre banque est temporairement indisponible." | Retry |
6.2Erreurs de Consentement
Codes d'erreur - Consentement
| Code Erreur | Cause | Message Utilisateur | Action |
|---|---|---|---|
CONSENT_DENIED |
Utilisateur a refusé le consentement | "Consentement refusé. La liaison n'a pas pu être effectuée." | Réessayer |
CONSENT_EXPIRED |
Session de consentement expirée | "Session expirée. Veuillez recommencer." | Nouvelle session |
SCOPE_INSUFFICIENT |
Scope d'accès insuffisant | "Autorisation insuffisante. Acceptez tous les accès requis." | Relancer |
6.3Erreurs Techniques
Codes d'erreur - Techniques
| Code Erreur | Cause | Message Utilisateur | Action |
|---|---|---|---|
SESSION_EXPIRED |
Session temporaire expirée (>10 min) | "Session expirée. Veuillez recommencer." | Nouvelle session |
NETWORK_ERROR |
Problème de connectivité | "Vérifiez votre connexion internet." | Retry backoff |
SERVER_ERROR |
Erreur serveur (5xx) | "Une erreur est survenue. Veuillez réessayer." | Log Sentry |
PROVIDER_ERROR |
Erreur Budget Insight | "Service bancaire temporairement indisponible." | Alerter équipe |
ENCRYPTION_ERROR |
Échec chiffrement tokens | Erreur silencieuse | Rollback |
SÉCURITÉ ET CONFORMITÉ
7.1Mesures de Sécurité Implémentées
Mesures de Sécurité
| Mesure | Description | Implémentation |
|---|---|---|
| Chiffrement Transit | Toutes les communications chiffrées | TLS 1.3, HTTPS |
| Chiffrement Repos | Tokens bancaires chiffrés en base | AES-256-GCM |
| Tokenisation | Aucun stockage de données bancaires brutes | Tokens Budget Insight |
| Isolation Credentials | Identifiants jamais sur serveurs REWAPP | SDK natif isolation |
| Session Éphémère | Sessions de liaison à durée limitée | TTL 10 min, Redis |
| Validation JWT | Authentification de chaque requête | RS256, exp 15 min |
| Rate Limiting | Protection contre les abus | 5 tentatives/heure |
| Audit Trail | Journalisation complète | CloudWatch, 90 jours |
7.2Conformité PSD2
OBLIGATIONS PSD2
Directive européenne sur les services de paiement
| Exigence | Implémentation REWAPP |
|---|---|
| Consentement Explicite | Écran de consentement clair avec durée (90 jours) |
| Authentification Forte (SCA) | 2FA obligatoire via la banque |
| Accès Limité | Scope restreint aux transactions (lecture seule) |
| Durée Limitée | Consentement valable 90 jours, renouvellement requis |
| Révocation | Possibilité de révoquer l'accès à tout moment |
| Traçabilité | Log complet de tous les accès |
7.3Conformité RGPD
| Principe | Application |
|---|---|
| Minimisation | Collecte uniquement des données nécessaires (transactions partenaires) |
| Finalité | Données utilisées exclusivement pour le cashback |
| Consentement | Double consentement (REWAPP + banque) |
| Droit d'Accès | Export possible via profil utilisateur |
| Droit à l'Oubli | Suppression complète possible (cartes + historique) |
| Portabilité | Export JSON des données sur demande |
| Sécurité | Chiffrement AES-256, pseudonymisation |
7.4Protection des Données Sensibles
JAMAIS STOCKÉES
- Identifiants bancaires
- Numéros de carte complets
- Codes CVV/CVC
- Codes PIN
- Soldes bancaires complets
STOCKÉES (CHIFFRÉES)
- Tokens Budget Insight (AES-256)
- 4 derniers chiffres carte
- Nom de la banque
- ID de connexion
- Transactions partenaires REWAPP
DONNÉES ÉCHANGÉES
8.1Requête Initialisation
/api/banking/init-link
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
userId | UUID | ✅ | Identifiant utilisateur REWAPP |
deviceId | String | ✅ | Identifiant unique de l'appareil |
timestamp | ISO8601 | ✅ | Horodatage de la requête |
platform | Enum | ✅ | ios ou android |
appVersion | String | ✅ | Version de l'application |
8.2Réponse Initialisation
| Champ | Type | Description |
|---|---|---|
sessionId | UUID | Identifiant de session temporaire |
authUrl | URL | URL d'authentification Budget Insight |
stateToken | String | Token anti-CSRF |
expiresAt | ISO8601 | Date d'expiration de la session |
8.3Requête Finalisation
/api/banking/complete-link
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
sessionId | UUID | ✅ | Identifiant de session |
connectionId | String | ✅ | ID connexion Budget Insight |
status | Enum | ✅ | SUCCESS, CANCELLED, ERROR |
8.4Réponse Finalisation
{
"success": true,
"cardInfo": {
"bankName": "BNP Paribas",
"cardMask": "•••• 1234",
"isPrimary": true,
"linkedAt": "2025-11-24T10:30:00Z",
"expiresAt": "2026-02-22T10:30:00Z"
}
}
8.5Payload Webhook Transaction
/webhooks/banking/transaction
Webhook configuré avec Budget Insight pour recevoir les nouvelles transactions.
{
"eventType": "TRANSACTION_CREATED",
"connectionId": "conn_abc123",
"transaction": {
"id": "txn_xyz789",
"amount": 45.90,
"currency": "EUR",
"date": "2025-11-24T14:30:00Z",
"merchantName": "Carrefour City",
"merchantId": "merchant_123"
},
"signature": "hmac_sha256_signature"
}
RÉCAPITULATIF
9.1Points Clés du Flux
- Sécurité maximale : Identifiants bancaires jamais exposés aux serveurs REWAPP
- Conformité réglementaire : PSD2, RGPD, agrément ACPR via Budget Insight
- Expérience utilisateur fluide : SDK natif intégré, processus guidé
- Multi-cartes supporté : Aucune limite sur le nombre de cartes
- Renouvellement automatique : Alertes avant expiration (90 jours)
- Révocation simple : Suppression possible à tout moment
9.2Métriques de Suivi
KPIs
| Métrique | Objectif | Alerte |
|---|---|---|
| Taux de succès liaison | > 85% | Si < 75% |
| Temps moyen du flux | < 3 min | Si > 5 min |
| Taux d'abandon | < 25% | Si > 35% |
| Erreurs authentification | < 10% | Si > 15% |
| Reconnexions requises/mois | < 5% | Si > 10% |
9.3Checklist d'Implémentation
- Configuration SDK Budget Insight (iOS + Android)
- Endpoints API Gateway configurés
- Service Bancaire microservice déployé
- Tables PostgreSQL créées (bank_connections, linked_cards)
- Redis configuré pour sessions temporaires
- Chiffrement AES-256 implémenté
- Webhooks enregistrés avec Budget Insight
- Gestion d'erreurs complète
- Logs et monitoring configurés (CloudWatch, Sentry)
- Tests de bout en bout validés (sandbox)