Skip to main content

Pytania GNB

Maxime avatar
Written by Maxime
Updated over 4 months ago

Lista inicjalna

  • Czy opcja przedłużenia zgody jest możliwa zawsze po tym samym id zgody? (czy po przedłużeniu jest nadawane nowe id, czy pozostaje to samo id zgody)

Przedłużenie zgody jest możliwe tylko po starym id zgody. Po przedłużeniu id zgody nie zmienia się.

  • Czy wszystkie banki umożliwiają reautoryzację aktywnej i nieaktywnej zgody?

Obecnie oferujemy możliwość reautoryzacji zgody dla wszystkich wspieranych polskich banków poza Pekao S.A. . W przypadku tego ASPSP funkcjonalność ta jest w fazie wewnętrznych testów i zostanie udostępniona w najbliższym czasie.

  • Czy jako klient mogę unieważnić zgodę po stronie ASPSP? (status invalid/revoked)

Tak, część banków (ASPSP) dopuszcza taką możliwość w swojej bankowości elektronicznej. O unieważnieniu zgody dowiemy się dopiero przy próbie odświeżenia danych o rachunku, kiedy otrzymamy zwrotnie informację, że zgoda jest nieaktywna.

  • Jaki status będzie miała zgoda, która nie zostanie zautoryzowana po stronie ASPSP?

Requested.

  • Czym jest ap-clientId? Do czego służy? W jakim zakresie jest wykorzystywany? W jaki sposób jest konfigurowany? Kto go konfiguruje?

api-clientId jest to oznaczenie kontekstu wywołania APIHub i może być różnie wykorzystywana przez systemy konsumujące nasze API. Przykładowo można:

  • wykorzystać różne api-clientid do rozróżnienia dostępu w ramach pilota/testów od dostępu produkcyjnego. W zależności od wartości api-clientId dostępna będzie różna lista ASPSP

  • wykorzystać różne api-clientid do rozróżnienia dostępu z różnych kanałów (web/mobile)

W szczególności istnieje możliwość różnej konfiguracji listy banków per api-clientId

  • Api-userId - Czym jest ta wartość? Czy jest ona wymagana do podania? (przesłane przykłady nie posiadają uzupełnionego pola, ale w swagger pole jest oznaczone jako wymagane)

Jest to unikalny identyfikator PSU (klienta) nadawany po stronie systemu wywołującego nasze API.

  • Do czego odnosi się flaga is-user-interaction? Czy chodzi o sesję z klientem online i wywołania bez klienta?

Tak, flaga wskazuje czy jest sesja po stronie PSU z jego udziałem (attended session) czy bez jego udziału (unattended session)

  • Ip o jakim ip jest mowa w wywołaniu (header)?

Jest to adres IP z którego łaczy się PSU. Oczywiście jeżeli istniej możliwość jego identyfikacji. Wykorzystywana jest jako parametr przekazywany do niektórych ASPSP (które tego wymagają) w sesjach z udziałem PSU (attended session)

  • Jakie są możliwe wartości w polach purposes / variables / values dla tworzonej zgody?

Purpose to słownik biznesowy definiowany jako możliwe (predefiniowane) zakresy zgody.

  • W jaki sposób możemy pobrać listę banków z informacją o tym, które API jest niedostępne?

Zgodnie z rozmową, obecnie zwracana jest pełna lista. Planowane jest wdrożenie flagi z informacją o aktualnej dostepności API

  • Posiadamy po swojej stronie bazę zgód. Jaki jest możliwy mechanizm synchronizacji informacji o zgodach do naszej bazy zgód?

Zgody są całościowo zarządzane (cykl życia zgody) po stronie APIHub. Istnieje możliwość zasilania zewnętrznej bazy zgód (przekazywanie informacji o zgodach) ale to wymaga dedykowanego interfejsu.

  • W jaki sposób i kiedy możemy skonfigurować dostępną listę banków oraz zakresy zgód?

Lista banków jest zarządzana po stronie APIHub. Istnieje możliwość zdefinowanie listy dla wskazanych api-clientid (jak wyżej)

  • W jaki sposób pobrać informację o dokładnym zakresie (w tym rachunkach), które zostały wskazane po stronie ASPSP?

Jest to paramtr przekazwyany w odpowiedzi na zapytanie o consent

  • Czy posiadacie specyfikację interfejsu do notyfikacji o statusie synchronizacji danych?

Jako notyfikacje rozumiem callbacki. Tutaj jest opisane struktura: Callback services

  • Gdzie znajdziemy kody błędów dla wszystkich operacji?

Kody błędów zwracane przez poszczególne ASPSP są rózne i zwracane w polu ASPSP

Jednocześnie do osbługi błedów z ASPSP wykorzystywany jest mechanizm erro handlers: Handling responses from ASPSP

  • Jakie dane zwróci operacja POST:/api/v2/bank/{bankId}/authorize?

  • Jaką usługą możemy uruchomić synchronizację ad-hoc dla wszystkich aktywnych zgód klienta?

Wszystkie synchornizacje są wykonywane w sposób asynchroniczny.

  • POST /api/v2/bank/{bankId}/sync

  • GET /api/v2/bankaccount z flagą RefreshActiveAccounts= TRUE

  • Czy stage „AccountBalances” z Session Management będzie występował? (jest opisany w tekście, brak odzwierciedlenia na przepływie statusów).

To jest zależne od ASPSP (standardu API). Dla części z nich balance jest zwracany na liście rachunków (stage=Account) dla cześći jest to dodatkoiwy call do ASPSP.

  • Czy status „Expired” z Session Management będzie występował? (w tekście nie jest opisany, a na diagramie występuje).

  • W jaki sposób zostanie do nas przekazana informacja o rachunkach wchodzących w skład uzyskanej zgody? (Flow z wyborem rachunku po stronie ASPSP).

Zapytanie o konkretny consent

  • Pytania do obiektów:

  • BankDTO

    • Jakie wartości mogą zostać zwrócone w polu color?

W przypadku kiedy frontend nie używa logo a rozróżnia je kolorami tutaj dla każdego ASPSP może zostać zwrócony kod koloru. To jest konfigurowane indywidualnie.

  • czym informują pola isAisForceAccount oraz isPisForceAccount?

  • isAisForceAccount - true jeżeli ASPSP wspiera scenariusz z przekazaniem numeru rachunku na wejściu SCA

  • isPisForceAccount - true jeżeli ASPSP wspiera scenariusz z przekazaniem numeru rachunku obciążanego w zleceniu zainicjowania płatności (PIS)

  • Czy pola logo i logoSmall będą zawierały link do logo?

Linki względne

  • Do czego jest wykorzystywane pole migrateToBankId?

To pole jest wykorzystywane tylko przy migracji ze screenscraping do API. W Państwa wypadku nie będzie nigdy wykorzyastywane.

  • Jaka jest różnica między name a officialName?

Name to nazwa krótsza. Offical Name to nazwa oficjalna banku z rejestru SWIFT.

  • Co zawiera sekcja Provider?

To jest pole techniczne oznaczające czy bank jest wpsierany przez API czy przez inny mechanizm dostepowy.

  • PostBankAuthorizationFormModelDto

    • Consent/purposes -> jakie wartości może przyjmować to pole?

    • Consent/variables -> jakie wartości może przyjmować to pole?

    • sessionExternalId -> Czy to jest nadany przez nas identyfikator sesji?

Tak

  • Czym się różni w wywołaniu /api/v2/bank/{idType}/{idValue}/authorize sessionExternalId od sessionId?

sessionExternalId to identyfikator nadany po stronie systemu wołającego APIHub. SessionId to nasz identyfikator zwrócony po wywołaniu authorize

  • userId w wywołaniu /api/v2/bank/{idType}/{idValue}/authorize jest identyfikatorem nadawanym przez nas? Czy ma być zgodny z jakimś id u Was?

  • Values -> jakie wartości może przyjmować to pole?

To pole dynamiczne. Zakres wartości (jeżeli są wymagane jest zwracany przez metdoę GET /api/v2/bank/{bankId}/authorize

Aktualizacja(19.10.2020)

  • Przesłanie przykładów konfiguracji zgód (consent/purpose – cel zgody). Będą one podstawą do przekazania informacji o oczekiwanej konfiguracji zgód.

→ należy zwrócić uwagę na parametry: "historyLimit" : {"afterSca" : 1460, "withoutSca" : 90 }, które definiują z jakiego okresu mają być pobierane transakcje

1{ 2 "_id" : UUID("a2f01de4-25fc-4dc9-b4bd-c84787ccb689"), 3 "aspspScope" : "ais", 4 "banksSwiftCodes" : [ 5 "ALBPPLPW" 6 ], 7 "connectorName" : "PolishApiConnector", 8 "content" : [ 9 { 10 "__foreach" : "(JArray){variables.ibans}", 11 "__ifempty" : { 12 "ais:getAccount" : { 13 "scopeUsageLimit" : "multiple" 14 }, 15 "ais:getTransactionDetail" : { 16 "scopeUsageLimit" : "multiple" 17 }, 18 "ais:getTransactionsDone" : { 19 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 20 "scopeUsageLimit" : "multiple" 21 }, 22 "ais:getTransactionsPending" : { 23 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 24 "scopeUsageLimit" : "multiple" 25 }, 26 "ais:getTransactionsRejected" : { 27 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 28 "scopeUsageLimit" : "multiple" 29 }, 30 "ais:getTransactionsCancelled" : { 31 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 32 "scopeUsageLimit" : "multiple" 33 }, 34 "ais:getTransactionsScheduled" : { 35 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 36 "scopeUsageLimit" : "multiple" 37 }, 38 "ais:getHolds" : { 39 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 40 "scopeUsageLimit" : "multiple" 41 } 42 }, 43 "accountNumber" : "{item}", 44 "ais:getAccount" : { 45 "scopeUsageLimit" : "multiple" 46 }, 47 "ais:getTransactionDetail" : { 48 "scopeUsageLimit" : "multiple" 49 }, 50 "ais:getTransactionsDone" : { 51 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 52 "scopeUsageLimit" : "multiple" 53 }, 54 "ais:getTransactionsPending" : { 55 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 56 "scopeUsageLimit" : "multiple" 57 }, 58 "ais:getTransactionsRejected" : { 59 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 60 "scopeUsageLimit" : "multiple" 61 }, 62 "ais:getTransactionsCancelled" : { 63 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 64 "scopeUsageLimit" : "multiple" 65 }, 66 "ais:getTransactionsScheduled" : { 67 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 68 "scopeUsageLimit" : "multiple" 69 }, 70 "ais:getHolds" : { 71 "maxAllowedHistoryLong" : "(Int){consent.HistoryLimit.AfterSca}", 72 "scopeUsageLimit" : "multiple" 73 } 74 } 75 ], 76 "exchangesTo" : null, 77 "fallbackScope" : "Bank", 78 "name" : "ais-polish-api-alior", 79 "scope" : "Ais", 80 "historyLimit" : { 81 "afterSca" : 1460, 82 "withoutSca" : 90 83 }, 84 "products" : null 85}

  • Przesłanie przykładów odpowiedzi z usługi /api/v2/consent. W szczególności pola content, która będzie zawierała dane w postaci JSONa. Część z tych danych będzie nam potrzebna do wyświetlenia na ekranie w bankowości. Np. pobierany zakres historii

->Przeszliśmy flow dla sandboxa ALior Banku, odpowiedź z APIHUBa na na request: api/v2/consent

1{ 2 "data": { 3 "consents": [ 4 { 5 "accounts": [ 6 { 7 "accountNumber": "PL50249000050000400076134538", 8 "bankId": 79, 9 "id": 96, 10 "name": "Konto Walutowe" 11 }, 12 { 13 "accountNumber": "PL63249000050000400030900682", 14 "bankId": 79, 15 "id": 97, 16 "name": "Konto Osobiste" 17 } 18 ], 19 "bank": { 20 "id": 79, 21 "name": "Alior Bank", 22 "officialName": "Alior Bank" 23 }, 24 "bankSwiftCode": "ALBPPLPW", 25 "consentStatus": "active", 26 "content": [ 27 { 28 "ais:getAccount": { 29 "scopeUsageLimit": "multiple" 30 }, 31 "ais:getTransactionDetail": { 32 "scopeUsageLimit": "multiple" 33 }, 34 "ais:getTransactionsDone": { 35 "maxAllowedHistoryLong": 1460, 36 "scopeUsageLimit": "multiple" 37 }, 38 "ais:getTransactionsPending": { 39 "maxAllowedHistoryLong": 1460, 40 "scopeUsageLimit": "multiple" 41 }, 42 "ais:getTransactionsRejected": { 43 "maxAllowedHistoryLong": 1460, 44 "scopeUsageLimit": "multiple" 45 }, 46 "ais:getTransactionsCancelled": { 47 "maxAllowedHistoryLong": 1460, 48 "scopeUsageLimit": "multiple" 49 }, 50 "ais:getTransactionsScheduled": { 51 "maxAllowedHistoryLong": 1460, 52 "scopeUsageLimit": "multiple" 53 }, 54 "ais:getHolds": { 55 "maxAllowedHistoryLong": 1460, 56 "scopeUsageLimit": "multiple" 57 } 58 } 59 ], 60 "createDate": "2020-10-20T09:22:18.336Z", 61 "expirationDate": "2120-10-20T00:00:00Z", 62 "externalId": null, 63 "id": "368b24a5-293e-469f-9432-04a374363c91", 64 "previousStatus": "authorized", 65 "status": "confirmed", 66 "userId": "7aae723e-738a-47f5-a038-cdf19055daca", 67 "userScope": "aisp" 68 } 69 ] 70 }, 71 "success": true 72}

  • Przesłanie przykładowego swaggera do usług z callbackiem (jeżeli taki istnieje).

przykładowa odpowiedź przesłana na callback url(wysyłana na każda zmianę statusu)

1{"AccountId":6,"BankId":79,"EarliestAccountDate":null,"EarliestEffectiveDate":"2020-10-20T00:00:00Z","IsSca":false,"LatestAccountingDate":null,"LatestEffectiveDate":"2020-10-20T00:00:00Z","SessionExternalId":null,"SessionId":"80444d49-3b52-42f9-9669-08d874c68528","Stage":"Transactions","Status":"InProgress","TransactionsCount":1,"TransactionStatus":"Cancelled","UserId":"regression_AISP_ALBPPLPW_2020-10-20T09:08:13.726Z"}

  • Przeslanie przykładów wywołania ​/api​/v2​/bank​/{bankId}​/authorize dla 2 przypadków użycia (rejestracji zgody, przekazania AccessTokenu)

  • przekazania AccessTokenu - proszę o uściślenie pytania(na callu z Krzysztofem) @Krzysztof Pulkiewicz

rejestracja zgody call:

1curl --location --request POST '<api_url>/api/v2/bank/79/authorize' \ 2--header 'Content-Type: application/json' \ 3--header 'api-clientId: sandbox' \ 4--header 'Accept-Language: en-gb' \ 5--header 'IP: 121.1.0.1' \ 6--data-raw '{ 7 userId:"regression_AISP_ALBPPLPW_2020-10-20T09:22:14.972Z", 8 months: 2, 9 values:[ 10 11 ] 12}

Przesłanie code call (po ukończonym SCA):

1curl --location --request POST '<api_url>/api/v2/bank/79/authorize' \ 2--header 'Content-Type: application/json' \ 3--header 'api-clientId: sandbox' \ 4--header 'Accept-Language: en-gb' \ 5--header 'IP: 121.1.0.1' \ 6--data-raw '{ 7 userId:"regression_AISP_ALBPPLPW_2020-10-20T10:10:30.784Z", 8 months: 2, 9 sessionId: "8bc66d36-f93e-4592-221f-08d874d2c34e", 10 values:[ 11 { 12 key: "Code", 13 value:"xxxxx" 14 } 15 ] 16}


Ad 1. Weryfikacja usług, które nie posiadają opisanej odpowiedzi.
Lista operacji znajduje się poniżej. Prośba o uszczegółowienie jakie mogą być odpowiedzi z tych operacji.

POST /api/v2/bank/{bankId}/authorize

1{ 2 "data": { 3 "consentId": "a2ff8372-3acf-4ecf-975e-e7754314a336", 4 "sessionId": "1f1c9ba6-67b9-463b-221a-08d874d2c34e", 5 "url": "https://oauthdemo.developer.aliorbank.pl/login?refConsentHash=5228475bd4f9e60dc0a35277af36d3b3ffe3fc783089ea5e611be5d63676de59-02ef6e69677e336e7079e60e369a15dafab98bf45979e3098f5c9069d247d8ad" 6 }, 7 "success": true 8}


POST /api/v2/bank/{idType}/{idValue}/authorize -odpowiedź jest taka sama jak na endpoint /api/v2/bank/{bankId}/authorize, zaleca się używanie endpointu api/v2/bank/{idType}/{idValue}/authorize gdyż od wersji 137 odchodzimy od użycia endpointu api/v2/bank/{bankId}/authorize


POST /api/v2/callback/{flow}/{authType}/url

1{ 2 "data": null, 3 "success": true 4}


POST /api/v2/user

1{ 2 "data": { 3 "id": "35286d9f-d97c-4b04-a614-f0a6e2291c61" 4 }, 5 "success": true 6}


PUT /api/v2/user

1{ 2 "data": null, 3 "success": true 4}


GET /api/v2/user (dla błędu 404) co oznacza dla błędu 404? ->response, gdy brak takiego użytkownika:

1{ 2 "data": "There is no user with id: regression_AISP_ALBPPLPW_2020-10-20T10:10:30.784Zs.", 3 "executionId": "c11f2d9a-ef5b-412f-a947-0637afc66c09", 4 "success": false 5}


DELETE ​/api​/v2​/user

1{ 2 "data": null, 3 "success": true 4}

Ad 2. Weryfikacja sposobu obsługi błędów w operacjach.

Znalazłem 2 sposoby zwracania informacji szczegółowej o błędzie:

Przykład 1: Obsługa błędów ze zwracanym kodem błędu. Jakie mogą być zwrócone kody błędów?

Błędy są zwracane zawsze ze statusem 200 i success false w formie jak poniżej:

1{ 2 "data": "There is no user with id: regression_AISP_ALBPPLPW_2020-10-20T10:10:30.784Zs.", 3 "executionId": "c11f2d9a-ef5b-412f-a947-0637afc66c09", 4 "success": false 5}


{

"errorCode": "badRequest",

"errorMessage": "Validation is not passed"

}

*to jest wyjątek po naszej stronie, który w najnowszej wersji zostanie zmieniony na formę podaną powyżej (status 200 i success: false)
Operacje:

POST: /api/v2/bank/{bankId}/authorize
POST: /api/v2/bank/{idType}/{idValue}/authorize

Przykład 2: Dotyczy pozostałych usług / kodów http. Brak pytań.

{ "data": "There is no user with id: testx.",

"executionId": "465a7d4c-f004-42c9-ae3d-0b50d4fdf4f1",

"success": false

}

Did this answer your question?