Loading...
Loading...
Loading...
Anders & A-Cube S.r.l. / 1 giugno 2024 • 2 min read
Open Banking UI è un'interfaccia pagamenti production-ready che fornisce integrazione seamless con API open banking. Costruita con React 18, Vite e Material-UI, offre un'esperienza sicura e user-friendly per iniziare pagamenti, gestire account e visualizzare storico transazioni.
Frontend Vite + React 18 gestisce flusso pagamento, collegamento account e storico. Layer stato Redux Toolkit per Auth, Pagamenti, Account e Transazioni. Integrazione con API Open Banking (AISP, PISP) e layer sicurezza con OAuth 2.0, flusso PKCE e token refresh.
Payment Initiation Service Provider (PISP):
Account Information Service Provider (AISP):
Avvio Pagamento: Il sistema gestisce richieste pagamento con dati creditor account (IBAN, currency), instructed amount, debtor account e informazioni rimessa. Dopo validazione, reindirizza alla banca per autorizzazione con gestione SCA completa.
Autenticazione 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>Completamento autenticazione...</Typography>
</Box>
)
}Flusso OAuth 2.0 + PKCE:
export const useAccountLinking = () => {
const initiateLink = async (bankId: string) => {
// Genera challenge PKCE
const codeVerifier = generateCodeVerifier()
const codeChallenge = await generateCodeChallenge(codeVerifier)
// Memorizza verifier per callback
sessionStorage.setItem('code_verifier', codeVerifier)
// Costruisce URL autorizzazione
const params = new URLSearchParams({
response_type: 'code',
client_id: process.env.VITE_CLIENT_ID!,
Scroll Infinito con Virtualizzazione: Implementazione useInfiniteQuery di React Query per caricamento paginato transazioni. Virtualizzazione con react-virtual per rendering efficiente di grandi dataset. Auto-fetch pagina successiva quando utente scorre vicino al fondo.
Caratteristiche:
Integrazione 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 development
npm run build:dev # Usa .env.dev
# Build sandbox
npm run build:sandbox # Usa .env.sandbox
# Build production
npm run build:production # Usa .env.productionScript Deployment:
#!/bin/bash
# Build per ambiente
npm run build:${ENV}
# Upload su S3
aws --profile=${AWS_PROFILE} s3 sync --delete \
./dist s3://pay-${ENV}.acubeapi.com
# Invalida cache CloudFront
aws --profile=${AWS_PROFILE} cloudfront create-invalidation \
--distribution-id ${DISTRIBUTION_ID} \
--paths "/*"Handler MSW:
import { rest } from 'msw'
export const handlers = [
// Mock avvio pagamento
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 lista account
rest.get('/api/accounts', (
Open Banking UI offre un'interfaccia pagamenti sicura e user-friendly con piena conformità PSD2 e pratiche di sviluppo moderne.
Licenza: Proprietaria (A-Cube S.r.l.)