Sbansk: Enkel tilgang til egen bank

Nye regler skaper muligheter for oppkomlinger innen finansteknologi (fintech). Det er duket for at PSD2 (EUs "Revised Payment Service Directive") vil føre til store endringer når det gjelder tradisjonelle bank-tjenester. (1)

Når bankene tvinges til å åpne for at tredjeparter ikke bare kan få hente det som før har vært høyt skattede data, men også kan få utføre tjenester på kundens vegne, skapes grobunn for ny utvikling og ny verdiskapning.

Hvordan får du tilgang til banken?

Bankene lager åpne APIer, disse utgjør en plattform som både gir tredjeparter tilgang til data, og til å utføre handlinger på kundenes vegne (2).

Sbanken var tidlig ute med å tilgjengjeliggjøre et knippe tjenester via et nytt API (3). Disse er i dag begrenset slik at du kan se egne konti og transaksjoner, og utføre overføringer mellom egne konti.

Teknomade presenterer i dag Sbansk, et bibliotek som gjør det enkelt for utviklere å komme i gang å bruke Sbanskens API.

Tankegangen bak arkitekturen er å gjøre det så raskt som overhode mulig å komme i gang å bruke tjenestene som APIet tilbyr, i steden for å måtte sette seg inn i hvordan protokollen virker.

Slik snakker du Sbansk

 Sbansk client = new Sbansk();
 Accounts accounts = client.getAccounts();

Nå inneholder objektet accounts informasjon om alle dine konti. Du kan hente en spesifik konto basert på dens navn.

 Account.Name LONN = Account.Name.nameFor("Lønn");
 BigDecimal balance = client.getBalance(LONN);

Om du vil vite hvor mye du har på alle konti til sammen:

 BigDecimal sumOfBalances = client.getSumOfBalances();

Og du overfører mellom konti ved å:

 Account.Name LONN = Account.Name.nameFor("Lønn");
 Account.Name BRUKSKONTO = Account.Name.nameFor("Brukskonto");
 Account from = client.getAccount(LONN);
 Account to = client.getAccount(BRUKSKONTO);
 Transfer.Response response = client
                    .execute(
                            Transfer
                                .amount(1.99)
                                .from(from)
                                .to(to)
                                .description("Test api"));
  assert(response.status == Transfer.Response.Status.OK);

Du kan også spesifisere predikater som avgjør om en transaksjon skal finne sted:

 Transfer transfer = Transfer.amount(AMOUNT).from(a).to(b).description("Test").iff(a.balanceGT, 1000);
 Transfer.Response response = client.execute(transfer);

Her sier du at transaksjonen kun skal utføres om balansen på konto "a" er større enn 1000.

Du kan legge til så mange predikater du vil. For eksempel: Overfør kr 300 fra konto a til konto b, om det står mer enn kr 1000 på a og mindre enn kr 10 på b:

 Transfer transfer = Transfer.amount(300).from(a).to(b).description("Utbytteparty")
                        .iff(a.balanceGT, 1000)
                        .and(b.balanceLT, 10);

Predicate er et funksjonelt interface, og du står fritt til å definere dine egne. Som du ser av eksempelet, har klassen Account definert "greater than" og "less than". I tillegg har den "equals".

Å definere egne predikater er enkelt:

  Predicate<BigDecimal> balanceGT = balance -> (balance.compareTo(this.getBalance()) < 0);
  Predicate<BigDecimal> balanceLT = balance -> (balance.compareTo(this.getBalance()) > 0);
  Predicate<BigDecimal> balanceEQ = balance -> (balance.compareTo(this.getBalance()) == 0);

Alle predikater definert på en transaksjon blir evaluert før transaksjonen eventuelt finner sted. Om ikke alle predikater er oppfylt, får du følgende respons:

 Transfer.Response response = client.execute(transfer);
 assert response == Transfer.Response.CONDITIONS_NOT_SATISFIED;

Slik kommer du raskt i gang

  1. Klon koden fra GitHub: git clone git@github.com:steni/Sbansk.git

  2. Registrer deg som bruker av Sbankens betabank. Følg instruksjonene på Utviklerportalen.

  3. Når du har gjort det, vil du ha fått en clientId og en secret fra Sbanken, som sammen med ditt fødselsnummer vil gi deg tilgangen du skal ha.

  4. Under src/main/resources finner du filen template.properties. Fyll inn din client id, secret og fødseselsnummer (SSN), og døp filen om til default.properties.

  5. Nå kan du for eksempel kjøre ExampleApplication — husk å endre navnet på kontoen i koden til navnet på en konto du eier.

  6. Ta også en titt på alle testene under src/test. De er skrevet i Groovy / Spock, og skal være enkle å forstå.

Kilder

(2) Wikipedia - https://en.wikipedia.org/wiki/Open_banking - hentet 2019-04-18

(3) Sbanken - https://sbanken.no/bruke/utviklerportalen/ - hentet 2019-04-18

Tags: