# Sources des pages de connexion banque (simulation DSP2)

Répliques locales pour le parcours Fintecture Connect. **Aucune authentification réelle.**
Submit simulé → `success.html`. Portails mappés dans ``includes/banks.php` (bank_portal_href)`.

## Catalogue + fidélité

| Code | Banque | URL source | Fidélité | Fichiers |
|------|--------|------------|----------|----------|
| bnpafr | BNP Paribas | `https://connexion.mabanque.bnpparibas/as/authorization.oauth2?…&ui=mb_dsp2` | **fidèle** | `banks/bnp/login.php` (+ styles/images/clavier) |
| sogefr | Société Générale | `https://particuliers.sg.fr/app/auth/icd/obu/index-authsec.html#obu/…` | **fidèle** | `banks/sogefr/login.php` |
| bousfr | BoursoBank | `https://clients.boursobank.com/connexion/?org=/finalisation-virement/…` | **fidèle** | `banks/bousfr/login.php` |
| monnfr | Monabanq | `https://oauth2.monabanq.com/fr/logon.html` | **fidèle** | `banks/monnfr/login.php` |
| agrifr | Crédit Agricole | `https://client.ca-connect.credit-agricole.fr/fe/?…` | **partiel** | `banks/agrifr/login.php` (layout Mon Espace + clavier 6) |
| cmcifr2a / cmmcfr | Crédit Mutuel | `https://oauth2.creditmutuel.fr/fr/logon.html` | **partiel** | `banks/cmmcfr/login.php` (shell OAuth2 INGR + onglets) |
| cmcifrpp | CIC | `https://oauth2.cic.fr/fr/logon.html` | **partiel** | `banks/cmcifrpp/login.php` |
| cmcifrpa | CM Banque Européenne (BECM) | `https://oauth2.becm.fr/fr/logon.html` | **partiel** | `banks/cmcifrpa/login.php` |
| cmcifrpr | CIC Banque Privée | `https://oauth2.cic.fr/banqueprivee/fr/logon.html` | **partiel** | `banks/cmcifrpr/login.php` |
| crtafr | Creatis | `https://oauth2.creatis.fr/fr/logon.html` | **partiel** | `banks/crtafr/login.php` |
| cmcifrp1 | Banque Transatlantique | `https://oauth2.banquetransatlantique.com/fr/logon.html` | **partiel** | `banks/cmcifrp1/login.php` |
| ccbpfr | Banque Populaire | `https://www.icgauth.banquepopulaire.fr/se-connecter/identifier` | **partiel** | `banks/ccbpfr/login.php` (shell icgauth Neo + logo scrapé) |
| cepafr | Caisse d'Epargne | `https://www.icgauth.caisse-epargne.fr/se-connecter/identifier` | **partiel** | `banks/cepafr/login.php` |
| batifr | BTP Banque | `https://www.icgauth.btp-banque.fr/se-connecter/identifier` | **partiel** | `banks/batifr/login.php` |
| bspffr | Banque Palatine | `https://www.icgauth.epalatine.fr/se-connecter/identifier` | **partiel** | `banks/bspffr/login.php` |
| bpsmfr | Banque BCP | `https://www.icgauth.banquebcp.fr/se-connecter/identifier` | **partiel** | `banks/bpsmfr/login.php` |
| ccopfr | Crédit Coopératif | `https://www.icgauth.credit-cooperatif.coop/se-connecter/identifier` | **partiel** | `banks/ccopfr/login.php` |
| bsavfr2c | Banque de Savoie | `https://www.icgauth.banquepopulaire.fr/banque-de-savoie-se-connecter/identifier` | **partiel** | `banks/bsavfr2c/login.php` |
| arkea | Arkéa Banque Privée | `https://openbanking.arkeabanqueprivee.fr/auth/login` | **partiel** | `banks/arkea/login.php` (shell Novatio) |
| agfbfr | Allianz Banque | `https://openbanking.allianzbanque.fr/auth/login` | **partiel** | `banks/agfbfr/login.php` |
| axabfr | AXA Banque | `https://openbanking.axa.fr/auth/login` | **partiel** | `banks/axabfr/login.php` |
| ccfrfr-r | CCF | `https://openbanking.ccf.fr/auth/login#session_id=…` | **partiel** | `banks/ccfrfr-r/login.php` |
| preufr | Louvre Banque Privée | `https://openbanking.louvrebanqueprivee.fr/auth/login#session_id=…` | **partiel** | `banks/preufr/login.php` |
| cmsofr | Crédit Mutuel du Sud-Ouest | `https://openbanking.cmso.com/auth/login#session_id=…` | **partiel** | `banks/cmsofr/login.php` |
| cmbrfr | Crédit Mutuel de Bretagne | `https://openbanking.cmb.fr/auth/login#session_id=…` | **partiel** | `banks/cmbrfr/login.php` |
| cdcgfr | Banque des Territoires | `https://openbanking.banquedesterritoires.fr/oauth/authorize?…` | **approx** | `banks/cdcgfr/login.php` (shell Novatio ; authorize 400 sans params) |
| bredfr | BRED | `https://oauthclient.bred.fr/bred-auth-client/login` | **fidèle** | `banks/bredfr/login.php` (HTML/CSS alignés scrape + logo) |
| crlyfr | LCL | `https://psu.lcl.fr/retail/consent-approval/init?…` | **approx** | `banks/crlyfr/login.php` (PSU distant en erreur sans session) |
| psstfr | La Banque Postale | `https://openbanking.validation.labanquepostale.fr/wsost/…/loginform?…` | **partiel** | `banks/psstfr/login.php` |
| bnpafrhb | Hello bank! | `https://connexion.hellobank.fr/as/authorization.oauth2?…&ui=hb_dsp2` | **approx** | `banks/bnpafrhb/login.php` (mire 503 ; réplique marque) |
| ftnofr | Fortuneo | `https://sca-openbanking.fortuneo.com/1.4.2/authentication` | **approx** | `banks/ftnofr/login.php` (SPA Angular opaque) |
| swnbfr22 | Swan | `https://identity.swan.io/authenticator/login?login_challenge=…` | **approx** | `banks/swnbfr22/login.php` (SPA Vite opaque) |
| snnnfr | Shine | `https://app.shine.fr/oauth2/authorize?…` | **approx** | `banks/snnnfr/login.php` (authorize 404 hors session) |
| qntofr2 | Qonto | `https://app.qonto.com/signin?redirect=…` | **partiel** | `banks/qntofr2/login.php` (SPA Ember ; shell marque) |
| swnbfrpl | Pennylane | `https://app.pennylane.com/auth/login?redirectTo=…` | **partiel** | `banks/swnbfrpl/login.php` (+ logo assets) |
| fnomfr | Finom | `https://app.finom.co/en/oauth/signin?client_id=…` | **partiel** | `banks/fnomfr/login.php` |
| revogb | Revolut | `https://sso.revolut.com/signin?…` | **approx** | `banks/revogb/login.php` (403 scrape) |
| trwigb | Wise | `https://wise.com/openbanking/authorize?…` | **partiel** | `banks/trwigb/login.php` |
| ccfrfr-c | HSBC Corporate / HSBCnet | `https://www2.secure.hsbcnet.com/uims/content/public/tpp/auth/index.html?redirectJwt=…` | **approx** | `banks/ccfrfr-c/login.php` (SPA React opaque) |

### Autres portails catalogue (hors liste URL de cette session)

| Code | Banque | Fidélité | Fichiers |
|------|--------|----------|----------|
| cmmufr | Crédit Maritime | approx | `banks/cmmufr/login.php` |
| memofr | Memo Bank | approx | `banks/memofr/login.php` |
| bfbkfr | Bforbank | approx | `banks/bfbkfr/login.php` |
| fpelfr | Nickel | approx | `banks/fpelfr/login.php` |
| escbfr | Manager One | approx | `banks/escbfr/login.php` |
| ccutfr | Crédit Municipal | approx | `banks/ccutfr/login.php` |
| delufr | Banque Delubac & Cie | approx | `banks/delufr/login.php` |
| privfr | Milleis Banque | approx | `banks/privfr/login.php` |

## Familles UI partagées

| Famille | Shell CSS | Banques |
|---------|-----------|---------|
| icgauth (BPCE Neo) | `banks/_shared/icgauth.css` | ccbpfr, cepafr, batifr, bspffr, bpsmfr, ccopfr, bsavfr2c |
| OAuth2 INGR (CM/CIC) | `banks/_shared/oauth2-cm.css` | cmmcfr, cmcifrpp, cmcifrpa, cmcifrpr, crtafr, cmcifrp1 (+ monnfr dédié) |
| Novatio / web-dsp2 | `banks/_shared/novatio.css` | arkea, agfbfr, axabfr, ccfrfr-r, preufr, cmsofr, cmbrfr, cdcgfr |
| Login JS partagé | `banks/_shared/login.js` | submit → `../../success.html?bank=…` |

## Notes scrape

- **OAuth2 CM/CIC/Monabanq** : sans session valide la mire distante affiche « Problème technique » ; le formulaire Identifiant / Mot de passe est reconstitué d’après le shell INGR + pages authentification marque.
- **icgauth** : SPA Angular (`as-root`) — tokens CSS Neo + logos `assets/logos/square-logo.png` scrapés ; UI reconstruite (pas le bundle Angular).
- **Novatio openbanking** : shell JS modules opaque — carte login marque reconstruite.
- **SPA fintech** (Swan, Qonto, Shine, Fortuneo, Revolut, HSBC, Hello bank) : HTML d’amorçage seulement ou bloqué → réplique marque.

## Origine catalogue

- Session: `https://connect.fintecture.com/v2/707017f0-d40d-4f55-a182-b93c6c9238f7`
- API: `GET https://connect-api.fintecture.com/connect/v2/providers/{connectId}`
- Logos: `https://assets.fintecture.com/img/providers/{svg|icon}/{code}.svg`

## Régénération familles

```bash
node _scratch/generate-bank-portals.js
```

Ne régénère pas bnpafr / sogefr / bousfr / monnfr (pages déjà fidèles dédiées).
