Home    Firma    Produkty    Kontakt    Logowanie   

Wprowadzenie do użytkowania konektorów bankowych XFuture

 

 

Konektory bankowe XFuture  pozwalają w prosty sposób łączyć się do systemu bankowosći elektronicznej wybranego banku. Nasz produkt przygotowany jest w taki sposób, aby korzystanie z niego nie sprawiało problemów, było bezpieczne i jednecześnie dawało Ci niedostępne dotychczas możliwości zautomatyzowania logiki finansowej Twojego przedsiębiorstwa. Zanim zaczniejsz pracę z grupą konektorów XFuture,  powinieneś poznać ogólną koncepcję pracy z bibliotekami bankowymi XFuture oraz zrozumieć, co biblioteki mogą dla Ciebie zrobić, a jaką część pracy będziesz musiał wykonać sam. Tworząc ten dokument zakładamy, że jesteś programistą, lub przynajmniej znasz w podstawowym stopniu wbrane zagadnienia inżynierii oprogramowania, niemniej każde istotne zagadnienie staramy się ogólnie wyjaśnić tak, abyś w razie potrzeby mógł efektywnie uzupełnić swoją wiedzę z pomocą zewnętrznych zasobów.

 

 

 

Witamy w projekcie


Blisko 75% osób, z którymi miałem okazję rozmawiać, na propozycję gruntownego przestudiowania obszernej dokumentacji technicznej nowego narzędzia, reaguje przerażeniem, skrajną niechęcią lub inną formą negatywnych emocji. Stres w tym kontekście przeważnie powodowany jest ogromem informacji, jakie należy przyswoić w  ograniczonym okresie czasu.  Często nie bez znaczenia pozostaje presja wywierana przez kierownictwo oraz brak profesjonalnego wsparcia technicznego ze strony doświadczonego specjalisty. Jeśli masz, lub kiedykolwiek miałeś podobne odczucia, chcę abyś wiedział, że ten dokument stworzyliśmy z myślą o Tobie. Mamy podobne doświadczenia i wiemy jak ważne jest, aby na początku spotkać dobrego przewodnika. Nazywam się John Borsuck i nie miniesz mnie na ulicy ani nie uda Ci się zjeść ze mną lunchu. Krótko mówiąc - ja nie istnieję; zostałem przygotowany i wymyślony przez XFuture, moje słowa to synteza doświadczeń inżynierów firmy. Sworzono mnie, abym był twoim osobistym doradcą w czasie korzystania z produktów XFuture. Chcę dać Ci dobrą radę; odrzuć stres poznawczy, ponieważ konektor bankowy XFuture jest prosty, działa intuicyjnie. W ciągu klikudziesięciu minut  zrozumiesz jak łączyć się z bankiem i wchodzić w interakcję ze swoim rachunkiem. W naszej firmie zatrudniamy pracownika, którego wartość IQ podczas wewnętrznych badań ustalono na 65. Mimo tego, był on w stanie w ciągu jednego dnia całkowicie pojąć zasadę działania konektora XFuture oraz wdrożyć go do testowego projektu. Uważamy to za sukces naszego produktu. Staramy się upraszczać wszystko tak daleko, jak to tylko możliwe, ale nie dalej.

Ponieważ nie jestem realną postacią, nie można wezwać mnie na dywanik ani zwolnić z pracy. To w zasadzie wyjaśnia, dlaczego forma tego dokumentu jest swobodna. Jako John Borsuck jestem specyficznym bytem i to oczywiste, że jeśli mnie polubisz, ja polubię Ciebie.  Jeśli mnie nie polubisz, musisz wiedzieć, że ja mimo wszystko będę Ciebie lubił. W dalszej części opowiem Ci kilka dowcipów ( bo nie samą pracą czlowiek żyje ), wyjąśnię, jak działają konektory XFuture oraz powiem o tym, z czego spowiadają się specjaliści IT, pracującu w bankach! Gotowy?

 

Czym jest konektor?


Konektor bankowy XFuture jest klasą, a ściśle rzecz biorąc zastawem kilku klas, umieszczonych we wspólnej przestrzeni nazw. Taki pakiet dostarczamy w postaci zestawu dll, który Ty, jako specjalista IT możesz włączyć do swojego projektu .NET. Kiedy uzupełnisz swój projekt o referencję do biblioteki dll, Twoje środowisko autorskie da Ci dostęp do kliku klas, które stanowią serce całego projektu. Dokładny opis wybranego zestawu pojawi się w dalszej części dokumentu, teraz zależy mi abyć zrozumiał, że konektor XFuture jest jedynie silnikiem. Wraz z konektorem nie otrzymujesz interfejsu użytkownika; musisz zbudowac go sam, lub ( jeśli masz już gotowy program ) uzupełnić istniejący o elementy istotne dla współpracy z bankiem. Dlatego jeśli chcesz zalogować się do swojego konta bankowego, będziesz potrzebował formatkę, zawierąjącą dwa pola tekstowe ( jedno dla loginu, drugie dla hasła ) i przycisk loguj. Tą formatkę musisz wykonać sam, podobnie jak inne okna służace do wykonywania partykularnych operacji, jak zlecanie przelewu itp. Generalnie odnoszę wrażenie, że doskonale wiesz o czym mówimy. Jeśli Twoje wątpliwości budzą takie pojecia jak klasa, interfejs itp., powienieneś najpierw zorientować się w temacie OOP (Object Oriented Programming / programowanie zorientowane obiektowo ). Jeśli mimo wszystko nie masz na to ochoty, wystarczy że będziesz wiedział, że klasa jest w uproszeczeniu dostawcą usług, z których będziesz chętnie korzystał.  Jako że klasa jest jedynie metaopisem pewnej funkcjonalności, potrzebujesz realnie fukncjonującego egzemplararza, zbudowanego na bazie tego opisu; potrzebujesz obiektu tej klasy. Kiedy utworzysz obiekt klasy konektora, wykonasz pierwszy krok w stronę nowej jakości sterowania finansami. To mały krok programisty, ale wielki krok dla tej części ludzkości, która współpracuje z  Twoją firmą, niezależnie od tego czy działasz w szarej strefie, czy jesteś reprezentantem wielkiej korporacji z centralą w raju podatkowym.  

Dobrze; ustaliliśmy, że konektor daje Ci ‘moc’, ale to Twój program decyduje, jak ją wykorzystywać. Wiemy już, że konektor może wiele, ale nie ma twarzy – to Ty tworzysz interfejs użytkownika, który zobaczą ludzie obcujący z Twoim oprogramowaniem. Pamiętaj: jeśli zrobisz brzydki i niefunkcjonalny interfejs, gdy ktoś mnie zapyta, będę musiał udawać, że Cię nie znam. Pozatym użytkownicy prawdopodobnie nie polubią Twojego programu, dlatego lepiej dobrze wszystko przemyśl i starannie zaplanuj.

 

Co zawiera zestaw?


Dodanie referencji do biblioteki DLL konektora sprawi, że Twoje środowisko autorskie zrozumie, że pojawiły się nowe zasoby i umożliwi Ci tworzenie obiektów z przestrzeni GTools.  Chcę Ci wyjaśnić, że wszystkie klasy, które zakupisz od XFuture i dodasz do projektu, będą dla Ciebie dostępne jako elmenty przestrzeni GTools. Prawdopodbnie wiesz czym jest przestrzeń nazw, ale jeśli jednak nie wiesz, to dość powiedzieć, że jest to rodzaj ... przestrzeni (dokładnie! ), w której można gromadzić różne rzeczy. Przestrzenie pozwalają logicznie odseparować moduły o różnym przenaczeniu, wprowadzają porządek w środowisku pełnym niezliczonej ilości elementów. Moja żona używa specjalnej przestrzeni, w której trzyma staniki, ja również mam własną przestrzeń na skarpetki. Jeśli hobbistycznie zajmujesz się zbierainem złomu i innych odpadów, prawdopodbnie zainteresuje cię przestrzeń ‘Śmietnik’. Mam jednak nadzieję, że po godzinach zajmujesz się czymś innym, a to zajęcie zostawisz prawdziwym pasjonatom recyklingu. Zamiast tego proponuję Ci zgłębić przestzeń GTools i na własne oczy zobaczyć, jak wiele wspaniałych rzeczy przygotowałi dla Ciebie programiści z XFuture. Jeśli używasz środowiska Visual Studio, dodaj referencję do zestawu konektora, a gdzieś w kodzie wpisz GTools i postaw kropkę. Intellisense powinien ukazać Ci nowy, wspaniały świat bankowości elektronicznej dostępny na wyciągnięcie .NET’owej ręki. Na potrzeby tej publikacji będziemy posiłkowali się zestawem z konektorem AliorBanku, niemniej zestaw z dowolnym innym konektorem będzie miał podobną zawartość. Na rysunkuimage001 1 widać klasy, które uważam za najważniejsze. Oczywiście przestrzeń GTools zawiera dużo innych rzeczy, ale przedstawione cztery klasy stanowią esencję idei konektora. Przyjrzyj się dobrze, zobaczysz trzy klasy z przedrostkiem ‘Collected’ oraz jedną klasę bez tego przedrostka. AliorConnector - jest to główna klasa-konektor do systemu bankowości elektronicznje AliorBanku i ta klasa udostępnia metody potrzebne do interakcji z rachunkiem bankowym. Wszystko inne to konstrukcje pomocnicze, które klasa główna wykorzystuje jako magazyny informacji. Informacje te oczywiście  udostępni Ci po przeprowadzeniu procesu gromadzenia danych, tak, abyś mógł je dalej przetwarzać, zapisać w bazie danych lub zrobić z nimi cokolwiek uznasz za słuszne. Odradzam Ci jednak sprzedawanie poufnych danych firmowych osobom trzecim. Chcemy, abyś korzystając z naszych narzędzi, stał zawsze po jasnej stronie mocy. Wracając do tematu – musimy sobie wyjasnić jedno : klasa AliorConnector udostępnia Ci szereg metod, za pomocą których zrobisz to, co zechcesz. Chcę to jasno zobrazować, dlatego potrzebujemy przykładu. Powiedzmy, że chcesz pobrać ostatnią zaksięgowaną operację. W tym celu utworzysz obiekt klasy konektora, zalogujesz się za pomocą metody ‘login’, a następnie wywołasz metodę getLastOperation. Gdy ta metoda zakończy działanie, dostaniesz zwrotnie obiekt klasy CollectedTransferData, zawierający wszystkie dane ostatnio zaksięgowanej operacji. Obiekty klasy CollectedTransferData ( dokładnie tej z rysunku 1 ) służą do przechowywania informacji o operacjach odzyskanych z systemu bankowego. Dlatego jeśli zechcesz z kolei  pobrać historię operacji, to zgadnij co dostaniesz w odpowiedzi? No własnie! Dostaniesz kolekcję obiektów typu  CollectedTransferData.  Każdy obiekt z tej kolekcji reprezentuje pojedynczą, zaksięgowaną operację. Dysponując tymi obiektami, będziesz mógł dalej przetwarzać  dane, które te obiekty zawierają.

Zanim wywołasz jakąkolwiek usługę/metodę konektora, musisz się zalogować. Proces logowania realizujesz, co oczywiste, za pomocą metody login. Po zakończeniu logowania, obiekt konektora będzie zawierał kolekcje obiektów typu CollectedAccountData oraz CollectedMessageData. Klasa CollectedAccountData ( rys. 1 ) reprezentuje dane rachunku; zawiera informacje o saldzie, dostępnych środkach i inne dane, które system bankowy udostępnia. W ramach swojego konta bankowego możesz mieć otwartych kilka rachunków i informacje o każdym z nich po zalogowaniu będą dostępne za pośrednictwem obiektów CollectedAccountData. Te dane możesz wyświetlić użytkownikowi lub przetwarzać je w inny sposób. Więcej na ten temat powiemy sobie przy okazji omawiania wykorzystania podstawowych usług konektora. Podobnie obiekty typu CollectedMessageData zawierają po zalogowaniu wiadomości z systemu bankowego. Treść tych wiadomości jest zwykle mało istotna i dotyczy spraw ogólnych, może też zawierać informacje o niezrealizowanych przelewach lub urodzinach prezesa; jeśli bank będzie miał coś ważnego do powiedzenia, z pewnością powiadomi Cię o tym pisemnie. Niemniej wiadomości te możesz również przetwarzać, np w celu zaprezentowania ich użytkownikowi Twojej aplikacji.

Jest jeszcze jedna ważna klasa, o której do tej pory nie wspomniałem. Ta klasa to AliorNewTransferData i deklaracja jej typu zagnieżdżona jest w klasie konektora. Nazwa klasy składa się z członu indetyfikującego konektor oraz ciągu NewTransferData i, co zrozumiałe, ma inną postać dla każdego konektora. Tak więc dla konektora do systemu bankowego mBanku, klasa ta będzie miała nazwę mBankNewTransferData. Ogólnie rzecz ujmując – klasy newTransferData używasz w celu składania dyspozycji przelewu.

Podsumujmy więc. Zestaw konetora X składa się z deklaracji  klasy konektora XConnector, deklaracji klas CollectedTransferData, CollectedAcountData, CollectedMessageData, które służą odpowiednio do przechowywania informacji o historycznych operacjach, rachunkach konta bankowego oraz wiadomościach z kanału internetowego.  Dodatkowo w klasie konektora znajduje się deklaracja wewnętrzenej, publicznej klasy XNewTransferData, służacej jako model nowej dyspozycji przelewu. Jeśli dobrze zrozumiałeś przeznaczenie tych klas, działanie konektora nie będzie miało przed Tobą żadnych tajemnic. To zaledwie pięć klas! To niewiele. Muszę Cię zapytać, ile masz palców? Ja mam w sumie dwadzieścia, zakładam, ze Ty też. Czy wiesz do czego służy każdy palec? Przynam szczerze, ze ja nie wiem. Na pewno jeden palec służy do noszenia obrączki, jest też jeden, którym wyrażam brak sympatii do kierowców, którzy trąbią na mnie, gdy nie odpowiada im mój styl jazdy. Palec wskazujący służy mi do wskazywania albo do dłubania w nosie, a  dwa najmniejsze palce dłoni wykorzystuję do dłubania w uszach i czasem również w nosie. Odnoszę wrażenie, że kciuk razem z palcem ‘fakju’ można wykorzystać do pstrykania, ale ten dźwięk powoduje frustrację u mojego psa, dlatego zmuszony byłem zrezygnować z tej przyjemności. Reszta palców ma niezdefiniowane przeznaczenie, co nie zmienia faktu, że je posiadam. Tak więc kwestię przenaczenia pozostałych 15 palców owiewa tajemnica, nie mam natomiast wątpliwości w kwestii tego, do czego służy pięc klas zestawu konektora i mam nadzieję, że dla Ciebie również to jest jasne. Ok, powtórzmy to zatem jeszcze raz, tym razem powoli i wyraźnie: pięć klas zestawu konektora pozwala kontrolować całosć operacji finansowych na Twoim rachunku, z czego tylko klasa konektora udostępnia metody, które możesz wywoływać. Reszta deklaruje model danych. Oczywiście w przestrzeni GTools zawarte jest mnóstwo innych rzeczy, które mechanizm podpowiadania składni pokaże Ci podczas pracy. Niemniej są to elementy nie wymagające szczególnej uwagi, np typy enumeratywne itp. Ich zastosowanie jest albo oczywiste i wynika z nazewnictwa, albo będziemy je omawiać przy okazji demonstrowania przykładowego kodu, wykorzystującego konektor.

Wiemy już zatem, co zawiera i z czego składa się zestaw konektora. Musisz przyznać, że przedstawiona konstrukcja nie jest skomplikowana. Jeśli mimo wszystko nie zgadzasz się ze mną i uważasz, że zestaw konektora jest nielogiczny, muszę Cię grzecznie poprosić, abyć zmienił zdanie, zanim użyję niekonwencjonalnych metod indukowania ideologicznego posłuszeństwa u czytelnika. W każdym razie starałem się wytłumaczyć Ci wszystko najlepiej jak potrafię.

 

Coś się zdarzyło!


W otaczającym nas świecie dzieje się bardzo wiele i o pewnych sprawach lepiej jest wiedzieć a inne, wolelibyśmy zignorować. Muszę zadać Ci to pytanie: co robisz jeśli u sąsiada za ścianą jest awantura a Ty chciałbyś się dowiedzieć o co chodzi? Przykładasz ucho do ściany, może używasz szklanki jako wzmacniacza ? Uważnie nasłuchujesz ? Ja też ! A co my dwaj zrobilibyśmy, gdybyśmy nie byli zainteresowani treścią nieuprzejmosci dochodzących zza ściany. Nie wiem jak Ty, ale ja bym po prostu nie słuchał. Dokładnie to samo robię, gdy chcę się dowiedzieć, co się dzieje w konektorze bankowym XFuture; nasłuchuję. Ok, nie mówiłem o tym wcześniej, dlatego przyszedł czas, abyśmy wyjaśnili sobie co tak naprawdę się dzieje, kiedy skorzystasz z jakiejś usługi udostępnianej przez konektor. Załóżmy, że chcesz pobrać ostatnio zaksięgowaną operację; w tym celu wywołujesz metodę getLastOperation korzystając z obiektu klasy konektora. To, co jest istotne i o czym musisz pamiętać to to, że wszystkie metody udostepniane przez konektor są asynchroniczne. Oznacza to, że po wywołaniu metody, sterowanie praktycznie natychmiast wraca do punktu, w którym nastąpiło wywołanie i program jest kontynuowany. Jeśli oczekujesz, że wywołanie metody zwróci Ci bezpośrednio jakąś wartość, którą mógłbyś przypisać do wybranej zmiennej, to niestety muszę Cię rozczarować. Oczywiście nie powinieneś się smucić, bo sposób w jaki to zbudowaliśmy, uczyni Twoje życie lepszem, a Ciebie samego szczęśliwszym. Konektory XFuture implementują model zdarzeniowy, który bazuje na asynchronicznych wywołaniach usług. To znaczy mniej więcej tyle, że każde wywołanie metody uruchamia równoległy wątek, który wykonuje określoną pracę. Wątek ten po uruchomieniu pracuje równolegle do wątku, który wywołał metodę. Przebieg wykonywania kodu w wątku wywołującym, jest kontynuowany zaraz  po utworzeniu wątku realizującego daną usługę i wątek główny nie oczekuje na zakończenie tej operacji tak, jak ma to miejsce w modelu synchronicznym. Przypomnę, że w modelu z wywołaniami synchronicznymi wywołanie funkcji zatrzymuje główny wątek na czas wykonywania operacji przez funkcję. Gdybyś mógł wykonywać usługi konektora synchronicznie w głównym wątku aplikacji, to biorąc pod uwagę, że większość z nich jest czasochłonna, oznaczałoby to zamrożenie interfejsu użytkownika na czas wykonania usługi. Nie jest to dobry pomysł. Aby nie blokować aplikacji, powinieneś uruchamiać wątek pomocniczy, który wykonałby wybraną usługę a po wykonaniu wywołał zwrotnie odpowiedni kawałek kodu... Na szczęście nie musisz tego robić. Projektanci konektora zaimplementowali te mechanizmy za Ciebie i asynchroniczny charakter wywoływania metod jest natywnym zachowaniem klasy konektora. Jedyne, co musisz zrobić, to zgłosić swojego słuchacza. Słuchacz jest metodą/funkcją, która zostanie wywołana zwrotnie aby poinformować Twój program, że coś się zdarzyło. Każda metoda konektora generuje co najmniej jedno zdarzenie i przeważnie tym zdarzeniem jest ‘operationFinished’. Oprócz tego, w zależności od funkcji, jaką pełni metoda, może wyzwalać szereg innych zdarzeń. Aby ustalić, jakich zdarzeń należy spodziewać się w odpowiedzi na zarządanie danej usługi, należy sprawdzić dokumentację techniczną.


Nic tak nie wyjaśnia sprawy jak dobry przykład, dlatego proponuję abyśmy wzięli pod lupę metodę ‘login’. Otwórz plik dokumentacji konektora i znajdź sekcję usługi logowania. Z dokumentacji dowiesz się, jakich argumentów oczekuje metoda, poznasz przeciążenia, ustalisz zastosowanie oraz być może uświadczysz fragmenty przykładowego kodu implementującego dokumentowaną funkcjonalność. To zdecydowanie wystarczy, aby rozpocząć pracę. Dokumentacja jest wyjątkowo esencjonalna i wypełniona po brzegi konkretnymi faktami technicznymi. Z tego powodu może sprawiać wrażenie trudnej w odbiorze, niemniej uważam że szybko docenisz jej charakter i sposób konkretnego prezentowania informacji. Trudno powiedzieć dlaczego, ale na całym świecie dokumentacje sprawiają wrażenie, jakby były pisane przez ludzi, ale nie dla ludzi. Jeśli chcesz szybko zrozumieć, jak działają pewne rzeczy i jak ich używać, to masz naprawdę dużą szansę, że przy pomocy dokumentacji Ci się to nie uda. Staraliśmy się, aby nasz produkt nie wpisywał się w ten nurt, dlatego

 

jeśli masz jakieś uwagi dotyczące tej kwesti, będziemy wdzięczni, jeśli zechcesz się z nami nimi podzielić. Wracjąc jednak do metody ‘login’; na rysunku 2 znajduje się fragment dokumentacji,

 image002

 na który chciałbym, abyś zwrócił uwagę. Jak widzisz są tam zawarte informacj e o tym,  jakie zdarzenia generuje metoda. W Twojej kopii dokumentacji możesz kliknąć w odnośnik zdarzenia i zobaczyć jaki jest typ delegacji tego zdarzenia. Deklaracja typu delegata pozwala odpowiedzieć na pytanie, jak powinna wyglądać funkcja wywoływana zwrotnie? Te informacje są kluczowe, jeśli używasz środowiska autorskiego, które nie wspiera automatycznego tworzenia metod słuchaczy dla subskrybowanych zdarzeń.  Jeśli używasz Visual Studio lub edytora VBA w Excelu, mam dla Ciebie dobrą wiadomość: te programy potrafią automatycznie zbudować słuchaczy dla zdarzeń. Jeśli programujesz w C#, podczas dodawania subskrypcji za pomocą operatora += , Visual Studio zasugeruje możliwość automatycznego utworzenia ciała subskrybenta po kliknięciu klawisza tabulacji. Polecam korzystać z tej opcji. Jeśli programujesz w Visual Basicu, Visual Studio również będzie w stanie wspomóc Cię w obsłudze zdarzeń. W Excelu, jeśli zdefiniujesz obiekt konektora na poziomie modułu klasy przy użyciu słowa kluczowego WithEvents, w module klasy na liście obiektów widoczny  będzie obiekt konektora, a po jego wybraniu na liście funkcji zobaczysz wszystkie zdarzenia, jakie możesz obsłużyć. Po wskazaniu zdarzenia edytor VBA wygeneruje dla Ciebie ciało słuchacza.

Metoda ‘login’ wyzwala dwa zdarzenia. Zdarzenie ‘statusChanged’ wyzwalane jest, gdy status konektora zmienia się w cyklu wykonywania operacji. Możesz przechwycić to zdarzenie i informować użytkownika o aktualnym stanie. Zdarzenie ‘operationFinished’ pozwoli Ci ocenić rezultat operacji po zakończeniu wykonywania usługi, ale przede wszystkim zarejestrować moment, w którym proces logowania zakończył się. Dopiero po logowaniu zakończonym sukcesem możesz podjąć dalsze działania, jak pobieranie danych historycznych, składanie dyspozycji itp.

Jak widzisz model asynchroniczny wymaga od Ciebie specyficznego podejścia przy projektowaniu aplikacji. Zmuszony jesteś zarzucić sekwencyjne wykonywanie operacji, na rzecz zbudowania czegoś na kształt maszyny stanów, gdzie konkretne decyzje podejmowane są w oparciu o stan konektora i zachodzące zdarzenia. Przykładowo wyświetlenie informacji o dostępnych rachunkach może mieć miejsce dopiero po udanym zalogowaniu i ten proces wyświetlania możesz, a nawet powinieneś zainicjować gdzieś w słuchaczu zdarzenia ‘operationFinished’, a nie w bloku kodu zwierającym wywołanie usługi ‘login’. Nie będę tego tematu tutaj rozwijał, ponieważ jestem przekonany, że wiesz już o czym mówimy i bez problemu poradzisz sobie z zagadnieniem. Jeśli jednak się mylę i wciąż masz wątpliwości, z pewnością uznasz za pomocne przykłady zaprezentowane w jednym z tutoriali, które możesz pobrać z działu zasobów na stronie WWW wybranego konektora.

Słuchaczy zdarzeń możesz wyrejestrowywać w sposób analogiczny do procesu rejestracji. To, jak będzie wyglądała konstrukcja Twojej aplikacji zależy od Ciebie i nie chcę Ci nic sugerować. Pragnę jedynie zaznaczyć, że zdarzenie ‘operationFinished’ generowane jest przez wiele usług. Jeśli w swoim programie dla wszystkich tych usług planujesz użyć wspólnego słuchacza, to w ustaleniu jaka usługa wygenerowała zdarzenie, może pomóc Ci właściwość ‘serviceContext’ klasy konektora. Jest jeszcze jedna ważna kwestia, o której muszę obowiązkowo wspomnieć : klasa konektora realizuje wzorzec singletonowy; możesz utworzyć tylko jedną instancję danej klasy konektora. Wiąże się to z faktem, że większość systemów bankowości elektronicznej dopuszcza istnienie pojedynczej sesji połączenia dla danego konta. Przy nawiązaniu kolejnej, np z komputera w innym pomieszczeniu, poprzednia sesja jest unieważniana i wygasa. Jest to słuszne zachowanie związane z praktycznym wdrożeniem założeń polityki bezpieczeństwa danych, niemniej rodzi pewne komplikacje, jeśli Twoja aplikacja to konstrukcja wielostanowiskowa i dostęp do zasobów konta bankowego wymagany jest równocześnie z wszystkich stanowisk. Aby sprostać temu zadaniu, będziesz musiał zbudować moduł serwera usług bankowcyh, który jedno fizyczne połączenie z systemem bankowości elektronicznej będzie rozdzielał na wiele stanowisk. Jest wiele ścieżek, którymi można to osiągnąć i nię będęsugerował Ci żadnego rozwiązania, ufam że sam wiesz najlepiej jakie są wymagania Twojej aplikacji i podejmiesz słuszną decyzję.

 

Bezpieczeństwo


Tam, gdzie w grę wchodza pieniądze, bezpieczeństwo i ochrona danych są kwestiami priorytetowymi. Uważam, że należą Ci się słowa wyjaśnienia w kwestii bezpieczeństwa transmisji danych, przekazywanych pomiędzy konektorem a serwerem banku. Instancja klasy konektora zachowuje się podobnie jak przeglądarka internetowa podczas korzystania z internetowego kanału dostępowego Twojego banku. Na dzień dobry otwierana jest sesja połączeniowa w szyfrowanym kanale SSL i utrzymywana jest tak długo, jak długo jest potrzebna lub do czasu uniewaznienia przez serwer banku. Omawianie całej filozofii bezpieczeństwa opartego o protokół SSL wybiega poza ramy tej publikacji, dlatego nie będziemy tego tematu rozwijać. Chę tylko nadmienić, że przy każdym połączeniu SSL masz możliwość zweryfikowania certyfikatu klucza publicznego. Musimy się zgodzić co do tego, że certyfikaty instytucji bankowych muszą być skutecznie podpisane przez zaufany podmiot certyfikujący i jeśli z takim podpisem odnotujemy jakieś problemy, to należy zrezygnować z kontynuowania połączenia. Problemy z certyfikatem mogą oznaczać próbę wyłudzenia naszych danych. Przyczyna problemów z walidacją klucza może być również bardziej prozaiczna: być może masz lokalnie uruchomiony serwer proxy, którego używasz do debuggowania połączenia w czasie pracy nad oprogramowaniem lub też masz inne powody, aby kierować połączenie przez pośrednika.  Zarówno w jednym i drugim przypadku konektor daje Ci możliwość podjęcia odpowiednich działań.

Problem z certyfikatem zawsze wygeneruje zdarzenie SSLPolicyError. Powinieneś to zdarzenie obowiązkowo zasubskrybować i w oparciu o przekazywane do słuchacza dane, podjąć odpowiednie kroki. Subskrypcji na to zdarzenie musisz dokonać przed wykonaniem logowania, nie pózniej. Jeśli pracujesz z serwerem proxy, który pośredniczy z Twoim połączeniem z serwerem banku i mimo wszystko chcesz utworzyć połączenie, możesz wymusić akceptowanie certyfikatu SSL poprzez wywołanie metody allowUntrustedCerificates(true).  Metoda ta wchodzi w skład interfejsu GTools.ISSLSecurity dlatego przy wywołaniu będziesz musiał zrzutować obiekt konektora na typ tego interfejsu. Aby anulować akceptowanie wątpliwych certyfiktatów, wywołaj tą metodę z argumentem ‘false’. Domyślnie certyfikaty klucza publicznego, które nie zostały skutecznie podpisane, nie są akceptowane i powodują po pierwsze wygenerowanie zdarzenia SSLPolicyError, a w następnej kolejności OperationFinished z wynikiem negatywnym.

Dzięki komunikacji w kanale szyfrowanym, Twoje dane i poufność operacji, jakie wykonujesz ,są zabepzieczone w wyjątkowo skuteczny sposób. Dodatkowo podczas autoryzowania dyspozycji banki stosują dodatkowe zabezpieczenia w postaci dynamicznych tokenów, haseł sms’owych lub jednorazowych haseł ze specjalnych list. Konektor wspiera autoryzację za pomocą tych mechanizmów oferując bezpieczeństwo na najwyższym poziomie. Poziom tych zabezpieczeń spełnia rygorystyczne standardy, dlatego uważamy, że konektor może być z powodzeniem stosowany w rozwiązaniach korporacyjnych, bez przesadnej troski o wyciek informacji.

Przy tworzeniu obiektu konektora, musisz przekazać do konstruktora prawidłowy login i hasło. Te dane, co oczywiste, są potrzebne do uzyskania dostępu do Twojego konta. Przekazany login i hasło są utrzymywane w pamięci tak długo, jak długo istnieje instancja konektora. Składowanie tych danych w całym okresie życia obiektu jest istotne z tego względu, że dzięki temu konektor jest w stanie automatycznie wznawiać połączenie z bankiem w sytuacji, gdy ten wygasi sesję np. w skutek dłuższego czasu nieaktywności. Twoje loginy i hasła nie są wysyłane ani użytkowane nigdzie indziej poza kanałem szyfrowanym w tunelu SSL, zestawianym pomiędzy bankiem a instancją konektora. Jeśli masz obawy związane z tym, czy nasza biblioteka nielegalnie udostepnia te dane osobo trzecim, czy też nie, pragnę Cię uspokoić – nie robimy tego. Takie działania oznaczałyby rynkowe samobójstwo naszej firmy i poważne konsekwencje prawne.


Na zakończenie


Starałem się przekazać Ci najważniejsze informacje o sposobie działania konektora oraz metodologii korzystania z niego. Chcę wierzyć w to, że moje starania okazały się skuteczne i rozumiesz już jak zacząć pracę z tym wspaniałym narzędziem. Życzyłbym sobie, abyś w najbliższym czasie dołączył do grona specjalistów, którzy na własnej skórze doświadczają nowych możliwości, jakie daje omawiana seria bibliotek. Myślę, że Twoi klienci będa bardzo zadowoleni, jeśli będziesz potrafił w rekordowo krótkim czasie obsłużyć napływ środków finansowych, przyspieszyć realizację zleceń i uruchomić np.wysyłkę czy też realizację usługi. W dobie rosnącej konkurencji kapitalne znaczenie odgrywa szybkość, jakość oraz sposób, w jaki traktujesz partnerów biznesowych. Dzięki konektorowi bankowemu sferę finansów swojego przedsiębiorstwa uzupełnisz o brakujące ogniwo sukcesu. Chcemy, by Ci się to udało, dlatego tworzymy te narzędzia i uważam, że robimy to naprawdę dobrze. Masz częście, ponieważ wykonaliśmy za Ciebie kawał dobrej, żmudnej i, powiedziałbym nawet, brudnej roboty. Najłatwiejszy element związany z wdrożeniem jest jednak w Twoich rękach. Od sukcesu dzieli Cię już tylko krok. Nie zwlekaj aby go wykonać. Życzę Ci niezawodnych aplikacji i całej rzeszy zadowolonych klientów... i pamiętaj, że zawsze jestem do Twojej dyspozycji.

John Borsuck.


Copyright XFuture 2008-2013