Pięć lat łączników PSD2: czego nie mówi wam specyfikacja

Kafelek banku połączony ze znakiem Trex Pi przerywanymi liniami danych

PSD2 obiecywało jedno API dla każdego banku w Europie. Dostaliśmy jedną rodzinę specyfikacji i kilkaset jej interpretacji. Po pięciu latach budowania i utrzymywania łączników do informacji o rachunkach i inicjowania płatności dla klientów w krajach bałtyckich wzorzec jest jasny: pierwszy bank zajmuje tydzień, piąty zajmuje dzień, a potem kolejny niespodziewanie zajmuje miesiąc.

Proces zgody to miejsce, w którym projekty utykają

Wywołania API to łatwa część. Trudną częścią jest cykl życia zgody - jak klient autoryzuje wasz dostęp, jak długo ta autoryzacja obowiązuje i co się dzieje, gdy wygasa o 3:00 w niedzielę.

  • Niektóre banki wydają zgody na 90 dni i odnawiają je po cichu; inne wymuszają pełną ponowną autoryzację.
  • Przepływy zgody w środowisku testowym (sandbox) rutynowo różnią się od tych produkcyjnych. Zaplanujcie budżet na drugi etap integracji po wdrożeniu.
  • Taksonomie błędów są niespójne: ta sama wygasła zgoda może objawić się jako 401, 403, a w jednym pamiętnym przypadku jako 200 z pustą listą transakcji.

Ten ostatni przypadek zasługuje na podkreślenie: pusta odpowiedź to nie to samo co odpowiedź udana. Jeśli wasze uzgadnianie zależy od kanału transakcji, traktujcie „brak transakcji” jako warunek do zweryfikowania, a nie fakt do odnotowania.

Co standaryzujemy

Każdy łącznik, który dziś wdrażamy, działa za tym samym wewnętrznym interfejsem, z celowo cienkimi adapterami dla poszczególnych banków. Ta sama dyscyplina obowiązuje po stronie inicjowania płatności - jeden kanoniczny obiekt płatności, jawnie mapowany na dialekt każdego banku:

Mapowanie pól płatności ERP na elementy XML SEPA pain.001

Adapter obsługuje osobliwości uwierzytelniania i odmienne sposoby pobierania danych strona po stronie; wszystko inne - ponowienia, idempotencja, alarmowanie, ostrzeżenia o wygasaniu zgody - żyje we wspólnej warstwie, napisanej raz i przetestowanej raz.

Jeśli integracja z bankiem wymaga niestandardowej logiki ponowień, ta logika należy do wspólnej warstwy, zabezpieczonej flagą funkcji - nigdy do adaptera. Adaptery pozostawione same sobie stopniowo się starzeją; wspólna warstwa jest utrzymywana na bieżąco.

Efekt staje się przewidywalną rutyną - i właśnie o to chodzi. Nowy bank to nowy adapter, przykładowy plik nagrany w jego środowisku testowym i lista kontrolna - a nie nowy projekt.