v1.0 Novembre 2025
5.2.2

Liaison Carte Bancaire - OpenBanking

Diagramme de Séquence

24 novembre 2025
Version 1.0
1

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
2

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
3

DIAGRAMME DE SÉQUENCE - FLUX NOMINAL

3.1 Diagramme PlantUML - Première Liaison de Carte

Diagramme de Séquence - Première Liaison Carte Bancaire

Diagramme PlantUML - Flux Nominal en 6 phases

Phase 1: Initialisation Phase 2: Auth Bancaire Phase 3: Consentement Phase 4: Enregistrement Phase 5: Webhooks Phase 6: Confirmation
4

DESCRIPTION DÉTAILLÉE DES ÉTAPES

4.1Phase 1 : Initialisation

ÉtapeActionDescriptionDonnées
1.1Clic utilisateurL'utilisateur clique sur "Lier ma carte"-
1.2Requête APIL'application envoie une requête d'initialisationuserId, deviceId, timestamp
1.3Création sessionLe Service Bancaire crée une session temporaire dans RedisTTL: 10 minutes
1.4Initialisation ProviderAppel API Budget Insight pour obtenir l'URL d'authentificationclientId, redirectUri
1.5Retour paramètresL'application reçoit les paramètres pour lancer le SDKsessionId, authUrl, stateToken

4.2Phase 2 : Authentification Bancaire

ÉtapeActionDescriptionDonnées
2.1Lancement SDKL'application lance le SDK Budget Insight natifauthUrl, configuration
2.2Sélection banqueL'utilisateur recherche et sélectionne sa banquebankId
2.3RedirectionRedirection vers le portail d'authentification de la banqueOAuth2 flow
2.4AuthentificationL'utilisateur saisit ses identifiants bancairescredentials (non stockés)
2.5Validation 2FASi requis, validation par code SMS ou app bancaireotpCode
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

ÉtapeActionDescriptionDonnées
3.1Affichage consentementLa banque affiche l'écran de consentement PSD2scope, durée (90 jours)
3.2AcceptationL'utilisateur accepte explicitement le partage des donnéesconsent: true
3.3Génération codeLa banque génère un authorization_codeauthorization_code
3.4Échange tokensBudget Insight échange le code contre des tokensaccess_token, refresh_token
3.5Callback appRetour dans l'application avec le connectionIdconnectionId, status

4.4Phase 4 : Enregistrement

ÉtapeActionDescriptionDonnées
4.1FinalisationL'application envoie le connectionId au backendsessionId, connectionId
4.2Validation sessionVérification de la session en cours dans RedissessionId
4.3Récupération infosAppel API Budget Insight pour récupérer les détailsaccounts, tokens
4.4ChiffrementChiffrement des tokens avec AES-256-GCMencryptedTokens
4.5Stockage DBEnregistrement sécurisé en base de donnéesbank_connections, linked_cards

4.5Phase 5 : Configuration Webhooks

ÉtapeActionDescriptionDonnées
5.1Enregistrement webhookConfiguration du webhook pour les nouvelles transactionscallbackUrl, events
5.2ConfirmationBudget Insight confirme l'activation du webhookwebhookId, status
5.3Mise à jour DBStockage de l'ID webhook pour référencewebhookId

4.6Phase 6 : Confirmation

ÉtapeActionDescriptionDonnées
6.1Réponse succèsLe backend confirme la liaison réussiesuccess, cardInfo
6.2AffichageL'application affiche un message de confirmationtoast, animation
6.3RedirectionRedirection vers le dashboard principal-
5

DIAGRAMMES ALTERNATIFS

5.1Reconnexion de Carte (Token Expiré)

Reconnexion Carte Bancaire (Consentement Expiré - 90 jours)
1
Détection Expiration

Le service vérifie le status de connexion et détecte l'expiration

2
Notification Push

"Reconnectez votre carte" envoyée à l'utilisateur

3
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

Suppression Carte Bancaire
  1. 1
    Demande de suppression

    Menu carte > "Supprimer" - Popup d'avertissement si dernière carte

  2. 2
    Révocation chez Budget Insight

    DELETE /connections/{connectionId} - Révocation tokens et consentement

  3. 3
    Suppression en base

    DELETE FROM linked_cards + bank_connections

  4. 4
    Confirmation utilisateur

    Toast: "Carte supprimée avec succès"

6

GESTION DES ERREURS ET EXCEPTIONS

6.1Erreurs d'Authentification Bancaire

Codes d'erreur - Authentification

Code ErreurCauseMessage UtilisateurAction
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 ErreurCauseMessage UtilisateurAction
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 ErreurCauseMessage UtilisateurAction
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
7

SÉCURITÉ ET CONFORMITÉ

7.1Mesures de Sécurité Implémentées

Mesures de Sécurité

MesureDescriptionImplémentation
Chiffrement TransitToutes les communications chiffréesTLS 1.3, HTTPS
Chiffrement ReposTokens bancaires chiffrés en baseAES-256-GCM
TokenisationAucun stockage de données bancaires brutesTokens Budget Insight
Isolation CredentialsIdentifiants jamais sur serveurs REWAPPSDK natif isolation
Session ÉphémèreSessions de liaison à durée limitéeTTL 10 min, Redis
Validation JWTAuthentification de chaque requêteRS256, exp 15 min
Rate LimitingProtection contre les abus5 tentatives/heure
Audit TrailJournalisation complèteCloudWatch, 90 jours

7.2Conformité PSD2

OBLIGATIONS PSD2

Directive européenne sur les services de paiement

ExigenceImplé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éeConsentement valable 90 jours, renouvellement requis
RévocationPossibilité de révoquer l'accès à tout moment
TraçabilitéLog complet de tous les accès

7.3Conformité RGPD

PrincipeApplication
MinimisationCollecte uniquement des données nécessaires (transactions partenaires)
FinalitéDonnées utilisées exclusivement pour le cashback
ConsentementDouble consentement (REWAPP + banque)
Droit d'AccèsExport possible via profil utilisateur
Droit à l'OubliSuppression 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
8

DONNÉES ÉCHANGÉES

8.1Requête Initialisation

POST /api/banking/init-link
ChampTypeObligatoireDescription
userIdUUIDIdentifiant utilisateur REWAPP
deviceIdStringIdentifiant unique de l'appareil
timestampISO8601Horodatage de la requête
platformEnumios ou android
appVersionStringVersion de l'application

8.2Réponse Initialisation

ChampTypeDescription
sessionIdUUIDIdentifiant de session temporaire
authUrlURLURL d'authentification Budget Insight
stateTokenStringToken anti-CSRF
expiresAtISO8601Date d'expiration de la session

8.3Requête Finalisation

POST /api/banking/complete-link
ChampTypeObligatoireDescription
sessionIdUUIDIdentifiant de session
connectionIdStringID connexion Budget Insight
statusEnumSUCCESS, CANCELLED, ERROR

8.4Réponse Finalisation

JSON
{
  "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

POST /webhooks/banking/transaction

Webhook configuré avec Budget Insight pour recevoir les nouvelles transactions.

JSON
{
  "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"
}
9

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étriqueObjectifAlerte
Taux de succès liaison> 85%Si < 75%
Temps moyen du flux< 3 minSi > 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)