Esempio n. 1
0
        /// <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})");
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        /// <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");
        }
Esempio n. 3
0
        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);
                }
            }
        }