Loading...
Loading...
Loading...
Anders & A-Cube S.r.l. / 1 juin 2024 • 3 min read
Open Banking UI est une interface paiements production-ready qui fournit une intégration transparente avec les API open banking. Construite avec React 18, Vite et Material-UI, elle offre une expérience sécurisée et conviviale pour initier des paiements, gérer des comptes et visualiser l'historique des transactions.
Frontend Vite + React 18 gère flux paiement, liaison compte et historique. Couche état Redux Toolkit pour Auth, Paiements, Comptes et Transactions. Intégration avec API Open Banking (AISP, PISP) et couche sécurité avec OAuth 2.0, flux PKCE et refresh token.
Payment Initiation Service Provider (PISP):
Account Information Service Provider (AISP):
Initiation Paiement: Le système gère les requêtes paiement avec données creditor account (IBAN, currency), instructed amount, debtor account et informations remise. Après validation, redirige vers la banque pour autorisation avec gestion SCA complète.
Authentification Strong Customer:
export function SCAHandler() {
const { completeAuthentication } = useAuth()
const location = useLocation()
useEffect(() => {
const params = new URLSearchParams(location.search)
const code = params.get('code')
const state = params.get('state')
if (code && state) {
completeAuthentication({ code, state })
}
}, [location])
return (
<Box>
<CircularProgress />
<Typography>Finalisation authentification...</Typography>
</Box>
)
}Flux OAuth 2.0 + PKCE:
export const useAccountLinking = () => {
const initiateLink = async (bankId: string) => {
// Génère challenge PKCE
const codeVerifier = generateCodeVerifier()
const codeChallenge = await generateCodeChallenge(codeVerifier)
// Stocke verifier pour callback
sessionStorage.setItem('code_verifier', codeVerifier)
// Construit URL autorisation
const params = new URLSearchParams({
response_type: 'code',
client_id: process.env.VITE_CLIENT_ID!,
Scroll Infini avec Virtualisation: Implémentation useInfiniteQuery de React Query pour chargement paginé transactions. Virtualisation avec react-virtual pour rendu efficace de grands datasets. Auto-fetch page suivante quand utilisateur scroll près du bas.
Caractéristiques:
Intégration React Intl:
import { IntlProvider, FormattedMessage, FormattedNumber } from 'react-intl'
export function App() {
const [locale, setLocale] = useState('en')
const messages = useMemo(() => require(`./locales/${locale}.json`), [locale])
return (
<IntlProvider locale={locale} messages={messages}>
<Router>
<Routes />
</Router>
</IntlProvider
# Build développement
npm run build:dev # Utilise .env.dev
# Build sandbox
npm run build:sandbox # Utilise .env.sandbox
# Build production
npm run build:production # Utilise .env.productionScript Déploiement:
#!/bin/bash
# Build pour environnement
npm run build:${ENV}
# Upload sur S3
aws --profile=${AWS_PROFILE} s3 sync --delete \
./dist s3://pay-${ENV}.acubeapi.com
# Invalide cache CloudFront
aws --profile=${AWS_PROFILE} cloudfront create-invalidation \
--distribution-id ${DISTRIBUTION_ID} \
--paths "/*"Handlers MSW:
import { rest } from 'msw'
export const handlers = [
// Mock initiation paiement
rest.post('/api/payments', (req, res, ctx) => {
return res(
ctx.status(201),
ctx.json({
paymentId: '123-456-789',
status: 'pending',
authorizationUrl: 'https://bank.example.com/auth'
})
)
}),
// Mock liste comptes
rest.get('/api/accounts', (
Open Banking UI offre une interface paiements sécurisée et conviviale avec pleine conformité PSD2 et pratiques de développement modernes.
Licence: Propriétaire (A-Cube S.r.l.)