/// <summary> /// Fetch and display user account balances /// </summary> static async Task DisplayAccountBalancesAsync(IBankingConnector bankConnector) { BankingResult <List <Account> > accounts = await bankConnector.GetAccountsAsync(); if (accounts.GetStatus() == ResultStatus.DONE) { Console.WriteLine("Listing user accounts..."); foreach (Account account in accounts.GetData()) { Console.WriteLine($"Account {account.Iban}"); BankingResult <List <Balance> > resultBalances = await bankConnector.GetBalancesAsync(account.Id); if (resultBalances.GetStatus() == ResultStatus.DONE) { List <Balance> accountBalances = resultBalances.GetData(); foreach (Balance balance in accountBalances) { Console.WriteLine($"- {balance.BalanceType}: {balance.BalanceAmount.Currency}{balance.BalanceAmount.Amount} ({balance.ReferenceDate:ddMMMyyyy})"); } } } } }
/// <summary> /// Request Account Access /// /// Manual process: /// You have to go manually to the bankURL, authenticate there and grant the permission to access the account(s) /// The bank will then redirect you, you must copy the query string and put it back in the application to continue /// /// FlowId: /// In this particular case, Crelan ask for a fixed FlowId /// Most of the time, you need to provide a unique identifier /// </summary> static async Task RequestAccountsAccessAsync(IBankingConnector bankConnector) { // Initialize account access request BankingResult <string> bankingResult = await bankConnector.RequestAccountsAccessAsync(new AccountsAccessRequest { FlowId = "STATE", //Guid.NewGuid().ToString() FrequencyPerDay = 2, RedirectUrl = RedirectURL, }); if (bankingResult.GetStatus() == ResultStatus.REDIRECT) { // FlowContext must be reused FlowContext flowContext = bankingResult.GetFlowContext(); // Ask the user to manually go to the redirect URL and enter the result string bankURL = bankingResult.GetData(); Console.WriteLine($"URL: {bankURL}"); Console.Write("Enter code: "); string queryString = Console.ReadLine(); Console.Write(flowContext); // Finalize authentication BankingResult <IUserContext> result = await bankConnector.RequestAccountsAccessFinalizeAsync(flowContext, queryString); if (result.GetStatus() == ResultStatus.DONE) { Console.WriteLine("RequestAccountsAccess succeeded"); return; } } throw new Exception("RequestAccountsAccess failed"); }
static async Task Main(string[] args) { // Initialize BankingSDK Setup(); // Fetch UserID string userId = GetUserId(); // Initialize Connector IBankingConnector bankConnector = BankingFactory.GetConnector(ConnectorType.BE_BNP); try { // Fetch UserContext string userContext = FetchUserContext(userId); if (userContext == null) { Console.Write("Je suis rentré la"); // No context found, initialize a new one await bankConnector.RegisterUserAsync(userId); Console.Write("Je suis rentré la aussi "); // Assume the user didn't gave access to his accounts yet await RequestAccountsAccessAsync(bankConnector); Console.Write("Je suis rentré laaaaaaaaaaaaaaaaaaaaaaaaaaaa "); } else { // Existing context found // Assume valid account access granted bankConnector.UserContext = userContext; Console.Write("Je suis rentré ici"); } // Fetch account list and display their balances Console.Write("Display"); await DisplayAccountBalancesAsync(bankConnector); } finally { // Always save the user context if (bankConnector.UserContextChanged) { SaveUserContext(userId, bankConnector.UserContext); } } }