Płatności Online Autopay to kompleksowe rozwiązanie umożliwiające przyjmowanie płatności od klientów sklepów internetowych, obsługujące liczne metody płatności dostępne na rynku, takie jak przelewy, Pay by link, BLIK, Google Pay, Apple Pay. W niniejszej dokumentacji znajdziesz wszystko, czego potrzebujesz do szybkiego wdrożenia bramki płatności w sklepie internetowym. Dokumentacja Płatności Online Autopay zawiera części takie jak Obsługa transakcji i rozliczeń, Rejestracja i obsługa Punktów Rozliczeń pomiędzy AP a Platformą Marketplace Partnera, Rejestracja i obsługa Serwisów w oparciu o Formularz Integratorski, Dodatkowe rozszerzenia.
Aplikacja – Aplikacja Mobilna Partnera, komunikująca się z SDK Systemu Płatności Online Autopay w celu rejestrowania Transakcji.
AP – Autopay Spółka Akcyjna z siedzibą w Sopocie przy ulicy Powstańców Warszawy 6, wpisana do rejestru przedsiębiorców prowadzonego przez Sąd Rejonowy Gdańsk-Północ w Gdańsku, VIII Wydział Gospodarczy Krajowego Rejestru Sądowego pod numerem KRS 0000320590, NIP 585-13-51-185, Regon 191781561, o kapitale zakładowym w wysokości 2 205 500 PLN (w całości opłaconym), nadzorowana przez Komisję Nadzoru Finansowego i wpisana do rejestru krajowych instytucji płatniczych pod numerem IP17/2013, właściciel Systemu.
BalancePoint (Punkt Rozliczeń) – obiekt w Systemie Płatności reprezentujący Sklep zintegrowany z Platformą Marketplace oraz zarejestrowany w Systemie Płatności przy użyciu formularza udostępnionego Partnerowi przez AP.
ClientHash - parametr w komunikatach; pozwala w sposób zanonimizowany przypisać Instrument płatniczy (np. Kartę) do Klienta. Na jego podstawie Partner może wywoływać kolejne obciążenia w modelu płatności automatycznych.
CommissionModel – model prowizyjny ustalony z Integratorem. Opisuje wartości prowizji za transakcje przekazywane AP oraz Integratorowi.
Dzień Roboczy – dzień tygodnia od poniedziałku do piątku, z wyłączeniem dni ustawowo wolnych od pracy.
Formularz Integratorski – strona internetowa, na której umieszczony jest formularz umożliwiający Klientowi rejestrację, edycje lub dodanie kolejnego Serwisu.
Instrument Płatniczy (Kanał Płatności) – uzgodniony przez Klienta i jego dostawcę zbiór procedur lub zindywidualizowane urządzenie, wykorzystywane przez Klienta do złożenia zlecenia płatniczego np. Karta, PBL.
Narzędzie e-przelew – uzgodniony przez Partnera i AP zbiór procedur lub zindywidualizowane urządzenie, wykorzystywane przez Partnera do złożenia zlecenia płatniczego umożliwiającego realizację wypłatę środków z salda na rachunek bankowy Partnera lub Klienta oraz inny instrument płatniczy należący do Partnera lub Klienta. Udostępnienie funkcjonalności jest zależne od indywidualnych ustaleń między Partnerem i AP.
Integrator – Integratorami nazywamy partnerów, którzy wdrożyli w swoich systemach Płatności Online Autopay i umożliwiają ich aktywację z poziomu własnych rozwiązań. Do integratorów zaliczamy takie podmioty jak: Shoper, Sky-Shop, Gymsteer, Selly weryfikacje, FaniMani, AtomStore, Ebexo, Selly Azymut, PayNow, Comarch.
IPN (Instant Product Notification) – natychmiastowe powiadomienie wysyłane z Systemu płatności online do Serwisu Partnera przekazujące zmianę statusu produktu. Struktura IPN jest podobna do ITN (rozszerzona jedynie o węzeł product).
ITN (Instant Transaction Notification) – natychmiastowe powiadomienie wysyłane z Systemu płatności online do Serwisu Partnera przekazujące zmianę statusu transakcji.
ISTN (Instant Settlement Transaction Notification) – natychmiastowe powiadomienia o zmianie statusu transakcji rozliczeniowej. System niezwłocznie przekazuje powiadomienia o fakcie zlecenia transakcji rozliczeniowej (ew. wypłatach/zwrotach) oraz zmianie jej statusu.
ICN (Instant Configuration Notification) – natychmiastowe powiadomienie o konfiguracji nowozarejestrowanego sklepu, przekazujące informacje o zmianie statusu kartowego w sklepie (np. w przypadku uruchamiania kart). Komunikaty ICN mogą być również wysyłane w przypadku zmiany konfiguracji sklepu, zmiany jego danych AML, włączenia/wyłączenia kanału płatności. Udostępnienie funkcjonalności jest zależne od indywidualnych ustaleń między Partnerem i AP.
Karta - karta płatnicza wydana w ramach systemów VISA i Mastercard, dopuszczona regulacjami tychże systemów do realizacji Transakcji bez fizycznej jej obecności.
Klient (Płatnik) – osoba uiszczająca w Serwisie płatność za usługi lub produkty Partnera przy wykorzystaniu Systemu.
Koszyk produktów – jest to informacja o składowych płatności, przekazywana (w Linku płatności) do Systemu w celu późniejszego jej przetwarzania. Każdy produkt koszyka opisują dwa obowiązkowe pola: kwota składowa oraz pole pozwalające przekazać parametry charakterystyczne dla produktu.
Link płatności – żądanie umożliwiające start Transakcji wejściowej (opisanej w części Rozpoczęcie transakcji). Można go stosować bezpośrednio na stronach www (metoda POST), natomiast w mailach do Klientów należy posłużyć się Przedtransakcją w celu uzyskania krótkiego linka do płatności (metoda GET).
Link weryfikacyjny – adres URL kierujący do Przelewu weryfikacyjnego.
Marketplace – rozwiązanie płatnicze działające w ramach Systemu Płatności Online Autopay. Umożliwia Partnerowi obsługę platformy sprzedażowej, na której produkty lub usługi oferowane są Klientom przez Kontrahentów Partnera. Zaawansowane modele rozliczenia Transakcji oraz Transakcji Rozliczeniowych pozwalają na realizację płatności bezpośrednio od Klienta do Kontrahenta Partnera, z uwzględnieniem Koszyka produktów. Udostępnienie funkcjonalności jest zależne od indywidualnych ustaleń między Partnerem i AP.
Model Płatnika – model, w którym prowizję za przeprowadzoną transakcję opłaca klient na rzecz AP (koszt doliczany do kwoty transakcji). W tym przypadku klient podczas płatności akceptuje również regulamin AP.
Model Merchanta - model, w którym prowizja jest rozliczana między Autopay a partnerem i nie jest doliczana do kwoty transakcji opłacanej przez klienta.
Partner - podmiot będący odbiorcą środków z tytułu sprzedaży
produktów lub usług dystrybuowanych przez Partnera w Serwisie.
Partner, w przypadku modelu Marketplace, to podmiot, niebędący
konsumentem, zainteresowany obsługą przyjmowania przez AP należnych
Partnerowi płatności za produkty lub usługi dystrybuowane przez
Partnera.
Pay By Link (PBL) – narzędzie umożliwiające realizację płatności za pośrednictwem przelewu wewnątrzbankowego z rachunku Klienta na rachunek AP. Po zalogowaniu do bankowości internetowej - dane potrzebne do realizacji przelewu (dane informacyjne odbiorcy, numeru jego rachunku bankowego, kwota i data realizacji przelewu) są wypełnione automatycznie dzięki systemowi wymiany danych pomiędzy bankiem a AP.
Pełnomocnik techniczny – podmiot posiadający prawo dostępu do Rachunku Płatniczego Partnera, który autoryzuje ten dostęp (zgoda lub umowa). W systemie pełnomocnictwo jest reprezentowane przez konfigurację PlenipotentiaryID: jeden podmiot może mieć wiele pełnomocnictw dla różnych Partnerów.
Platforma Marketplace – platforma, na której udostępniona jest opcja rejestracji Punktów rozliczeń.
Płatność automatyczna – płatność dokonywana bez potrzeby każdorazowego wprowadzania danych Karty lub danych do autoryzacji przelewu.
Płatność jednym kliknięciem – jest to Płatność automatyczna zlecana przez Klienta.
Płatność cykliczna - jest to Płatność automatyczna zlecana bez udziału Klienta (przez Serwis Partnera).
Przedtransakcja - specyficzny (wykonywany w tle) sposób zamawiania linku do płatności.
Przelew weryfikacyjny – część procesu związana z rejestracją oraz edycją Serwisu/Serwisów Partnera w Systemie. Polega na wykonaniu przez Partnera przelewu środków w celu weryfikacji danych i rachunku bankowego do wypłat środków do Partnera. Weryfikacja danych jest obowiązkiem AP wynikającym m.in. z Ustawy z dnia 16.11.2000 r. o przeciwdziałaniu praniu pieniędzy oraz finansowaniu terroryzmu. Każdy przelew weryfikacyjny musi otrzymać końcowy status weryfikacji (pozytywny lub negatywny) w ciągu 30 dni od opłacenia transakcji. Jeżeli status końcowy weryfikacji nie zostanie nadany w wyżej określonym czasie, system automatycznie nada jej status negatywny. Proces ten dotyczy weryfikacji, w której Autopay kieruje prośbę o uzupełnienie danych do klienta i nie otrzyma zwrotnej informacji niezbędnej do przeprowadzenia tejże weryfikacji.
Rachunek Płatniczy (Saldo) – rachunek płatniczy prowadzony przez AP dla Partnera, na którym gromadzone są środki wpłacone od Klientów. Udostępnienie funkcjonalności jest zależne od indywidualnych ustaleń między Partnerem i AP.
RPAN (Recurring Payment Activation Notification) – komunikat o aktywowaniu usługi płatności automatycznych.
RPDN (Recurring Payment Deactivation Notification) – komunikat o dezaktywacji usługi płatności automatycznych.
Serwis – strona lub strony internetowe Partnera zintegrowane z
Systemem, na których Klient może nabyć od Partnera (lub od Kontrahenta
Partnera w przypadku Marketplace) produkty lub usługi.
W przypadku Marketplace, obiekt w Systemie Płatności reprezentujący
Marketplace Partnera. Dowiązywane są do niego wszystkie transakcje
startowane przez wspomniany Marketplace.
Specyfikacja – dokumentacja opisująca komunikację pomiędzy Serwisem a Systemem.
System Płatności Online AP (System) – rozwiązanie informatyczno-funkcjonalne, w ramach którego AP udostępnia Partnerowi aplikację umożliwiającą procesowanie płatności Klientów dokonanych przy użyciu Instrumentów Płatniczych, a także weryfikację statusu płatności oraz odbiór płatności.
Szybki Przelew – realizacja płatności za pośrednictwem przelewu wewnątrzbankowego z rachunku Klienta na rachunek AP. Od płatności dokonywanych za pośrednictwem PBL płatność różni się koniecznością samodzielnego wypełnienia wszystkich danych potrzebnych do dokonania przelewu przez Klienta.
Transakcja - oznacza transakcję płatniczą w rozumieniu Ustawy z dnia 19 sierpnia 2011 r. o usługach płatniczych.
Transakcja wejściowa – część procesu obsługi płatności, dotycząca wpłaty dokonywanej przez Klienta do AP.
Transakcja rozliczeniowa – część procesu obsługi płatności, dotycząca przelewu wykonywanego przez AP na rachunek Partnera. Aby powstała Transakcja rozliczeniowa, Transakcja wejściowa musi zostać przez Klienta opłacona. Transakcja rozliczeniowa może dotyczyć pojedynczej transakcji wejściowej (wpłaty), bądź agregować ich wiele.
Ustawa – ustawa z dn. 19 sierpnia 2011 r. o usługach płatniczych.
Ważność linku – parametr określający moment, po przekroczeniu którego Link płatności przestaje być aktywny. Powinna być ustawiana przez parametr LinkValidityTime w Linku płatności.
Ważność transakcji – parametr określający moment, po przekroczeniu którego System płatności online blokuje i automatycznie zwraca wpłaty Klienta. Wartość domyślna obliczana jest poprzez dodanie 6 dni do dnia wybrania przez Klienta Kanału Płatności. Może ona być również ustawiana przez parametr ValidityTime w Linku płatności. W takim przypadku, po upłynięciu wskazanego czasu link przestaje być aktywny, a wpłaty są zwracane do Klienta. Maksymalna ważność transakcji to 31 dni.
Widget Autopay – mechanizm umożliwiający realizacje płatności Kartą za produkty/usługi oferowane przez Partnera, w której dane Karty wprowadzane są przez Klienta do mechanizmu osadzonego bezpośrednio w Serwisie Partnera. Wywołanie formatki kartowej widgetu wymaga implementacji kodu JavaScript wykorzystującego dedykowaną bibliotekę AP.
Widget Onboardingowy - rozwiązanie pozwalające Integratorowi na osadzenie Formularza Integratorskiego (przygotowanego przez Autopay) bezpośrednio na stronie internetowej Integratora, dzięki czemu Partner podczas rejestracji swojego sklepu nie jest przekierowywany na domenę Autopay - cały proces jest realizowany w Serwisie Partnera.
WhiteLabel – model integracji, w którym Klient już w Serwisie dokonuje wyboru kanału płatności oraz akceptuje regulaminy (o ile konieczność ich akceptacji wynika z indywidualnych ustaleń między Partnerem i AP), a start transakcji zawiera wypełnione pole GatewayID (oraz w określonych przypadkach DefaultRegulationAcceptanceID lub RecurringAcceptanceID).
Rozpoczęcie zlecenia płatniczego – moment, w którym użytkownik bramki płatniczej dokonuje wyboru kanału płatności i następuje przekierowanie do strony zgodnej z wybranym kanałem płatności albo (dla płatności automatycznych, portfeli elektronicznych czy BLIK) następuje próba obciążenia karty lub rachunku u dostawcy kanału płatności.
TEST
host_bramki: https://testpay.autopay.eu
host_kartowy_bramki: https://testcards.autopay.eu
PRODUKCJA
host_bramki: https://pay.autopay.eu
host_kartowy_bramki: https://cards.autopay.eu
W Serwisie Partnera, po skompletowaniu zamówienia, Klientowi prezentowana jest opcja możliwości wykonania płatności z wykorzystaniem Systemu. Kliknięcie w odpowiedni link powoduje rozpoczęcie transakcji i otwarcie w nowym oknie:
a) dedykowanej strony Systemu przygotowanej przez AP, na której Klientowi prezentowana jest lista dostępnych Kanałów Płatności oraz podsumowanie zarejestrowanej transakcji (patrz Model Paywall) lub
b) bezpośrednio strony Kanału Płatności (Banku, BLIK lub do płatności Kartą) - (patrz Model WhiteLabel).
Po stronie Systemu następuje walidacja przekazanych parametrów i zapisanie transakcji z ustalonym okresem ważności. Jeśli w momencie walidacji, czas ważności linku będzie już przekroczony, Klientowi zostanie wyświetlony odpowiedni komunikat (weryfikacja ważności transakcji następuje także przy zmianie statusu płatności). Po pozytywnej weryfikacji parametrów transakcji (oraz po wybraniu Kanału Płatności), Klient dokonuje autoryzacji transakcji. W jej tytule, oprócz nadawanych przez System identyfikatorów, może być także umieszczany stały opis, ustalony wcześniej pomiędzy AP a Partnerem lub dynamiczna wartość przekazywana przez Partnera przy starcie transakcji.
Zalecany model integracji polega na nadaniu komunikatu rozpoczęcia transakcji w tle, tzn. bez przekierowania użytkownika do Systemu (patrz Przedtransakcja). W tym modelu, możliwe jest zastosowanie zaawansowanych form autoryzacji transakcji (WhiteLabel, płatności automatyczne, SDK mobilne), diagnozowania poprawności przekazywanych parametrów oraz wielu innych rozszerzeń.
Po zakończeniu autoryzacji transakcji (na stronie Kanału Płatności) klient powraca z niego do Systemu, gdzie następuje automatyczne przekierowanie Klienta do Serwisu Partnera.
WSKAZÓWKA: Szczegółowy opis struktury linku powrotu znajduje się w części Przekierowanie do serwisu Partnera.
Otrzymany z Kanału Płatności status autoryzacji (płatności) przekazywany jest z Systemu do Serwisu Partnera za pomocą komunikatu ITN. System będzie ponawiać wysyłanie komunikatów, aż do potwierdzenia odbioru przez Serwis Partnera lub upłynięcia czasu ważności powiadomienia. Transakcje, które zostaną zapłacone po opływie okresu ważności transakcji – zostaną zwrócone do Klienta (nadawcy przelewu).
Opcjonalnie System może powiadamiać o fakcie wystawienia Transakcji rozliczeniowej. Służy do tego odpowiednio zmodyfikowany komunikat ISTN.
Wymagane dane wymieniane podczas integracji różnią się dla środowiska testowego i produkcyjnego. Poniżej lista parametrów przekazywanych przez AP do Partnera oraz w kierunku odwrotnym.
Przekazywane są też informacje ogólne tj. aktywne kanały płatności wraz z grafikami (w wyniku odpytywania o listę dostępnych kanałów płatności).
Opcjonalnie, mogą pojawić się dodatkowe dane przekazywane przez Partnera do AP, na przykład: informacje o wymaganej zawartości koszyka i sposobie przetwarzania go (w raportach, rozliczeniach, panelu administracyjnym), dodatkowe wymagania (dla zasilenia salda przedpłaconego). Dla płatności automatycznych BLIK również domyślna długość życia aktywowanych płatności automatycznych oraz domyślna etykieta aktywowanych płatności automatycznych.
W minimalnej wersji integracji należy zaimplementować obsługę rozpoczęcia transakcji, powrotu z niej oraz obsługę komunikacji ITN.
WSKAZÓWKA: Zaleca się zapoznanie ze schematem działania. W razie potrzeby warto zapoznać się także z dodatkowymi parametrami lub usługami.
Podczas wykonywania testów należy uzupełniać białe pola arkusza oraz podesłać go zwrotnie do AP, w celu potwierdzenia poprawności integracji przed migracją na środowisko produkcyjne.
WSKAZÓWKA: Przed wdrożeniem produkcyjnym zaleca się wykonać testy zgodnie ze scenariuszami testowymi w wersji podstawowej, a dla bardziej zaawansowanych integracji również zgodnie ze scenariuszami dodatkowymi.
Serwis Partnera inicjując transakcję przekazuje do Systemu płatności online parametry niezbędne do jej zrealizowania oraz późniejszego przekazania statusu płatności.
Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded).
Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8 (oraz protokołem transportowym – zakodować przed wysłaniem, o ile narzędzie wykorzystane do wysyłki komunikatu nie robi tego samodzielnie, przykład kodowania: URLEncode).
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera, nadawany w trakcie rejestracji usługi jednoznacznie identyfikuje Serwis Partnera w Systemie płatności online. Dopuszczalne są cyfry. |
2 | OrderID | TAK | string{1,32} | Identyfikator transakcji o długości do 32 znaków alfanumerycznych alfabetu łacińskiego. Wartość pola musi być unikalna dla Serwisu Partnera. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: -_ |
3 | Amount | TAK | amount | Kwota transakcji. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. UWAGA: Dopuszczalna wartość pojedynczej Transakcji w Systemie produkcyjnym to odpowiednio:
|
4 | Description | NIE | string{1,79} | Tytuł transakcji (wpłaty); na początku tytułu przelewu umieszczane są identyfikatory transakcji nadawane przez System płatności online, do tego doklejana jest wartość tego parametru. W niektórych przypadkach, niezależnych od AP tytuł przelewu może zostać dodatkowo zmodyfikowany przez Bank, w którym nastąpiła wpłata dokonana przez klienta. Wartość parametru dopuszcza alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: . : - , spacja . |
5 | GatewayID | NIE | integer{1,5} | Identyfikator Kanału Płatności, za pomocą, którego Klient zamierza uregulować płatność. Ten parametr odpowiada w szczególności za model prezentowania Kanałów Płatności:
|
6 | Currency | NIE | string{1,3} | Waluta transakcji; domyślną walutą jest PLN (użycie innej waluty musi być uzgodnione w trakcie integracji). W ramach ServiceID obsługiwana jest jedna waluta. Dopuszczalne jedynie wartości: PLN, EUR, GBP oraz USD. |
7 | CustomerEmail | NIE | string{3,255} | Adres email Klienta. |
19 | ValidityTime | NIE | string{1,19} | Moment upłynięcia ważności transakcji; po jego przekroczeniu link przestaje być aktywny, a wszelkie wpłaty są zwracane do nadawcy przelewu; przykładowa wartość: 2021-10-31 07:54:50; w przypadku braku parametru ustawiana jest wartość domyślna 6 dni. Maksymalna ważność transakcji to 31 dni (w przypadku ustawienia wartości parametru dalej, niż 31 dni do przodu, czas ważności zostanie odpowiednio skrócony). Np. transakcja wystartowana w chwili 2020-05-01 08:00:00, z parametrem ValidityTime = 2021-05-01 08:00:00, otrzyma ważność do 2020-06-01 08:00:00.(Czas w CET) |
34 | LinkValidityTime | NIE | string{1,19} | Moment upłynięcia ważności linku; po jego przekroczeniu link przestaje być aktywny, nie wpływa to jednak na czas oczekiwania na wpłatę; przykładowa wartość: 2014-10-30 07:54:50; proszę zwrócić uwagę na to, aby do czasu ważności linku, dostosowany był czas ważności transakcji (być może zajdzie potrzeba podania również parametru ValidityTime, aby wydłużyć jej standardową ważność). |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. |
Rozpoczęcie transakcji następuje przez przesłanie wywołaniem HTTPS kombinacji powyższych parametrów na ustalony w trakcie rejestracji usługi adres Systemu płatności online.
UWAGA: Liczba transakcji wystartowanych przez Partnera w ciągu jednej minuty może wynieść maksymalnie 100, chyba że Partner i AP ustalą wyższy limit w ramach zawartej umowy.
Przykład rozpoczęcia transakcji:
Adres:
Parametry:
ServiceID=2
OrderID=100
Amount=1.50
Hash=2ab52e6918c6ad3b69a8228a2ab815f11ad58533eeed963dd990df8d8c3709d1
Przesłanie komunikatu bez wszystkich wymaganych parametrów (ServiceID, OrderID, Amount i Hash) lub zawierającego błędne ich wartości, spowoduje zatrzymanie procesu płatności wraz z podaniem kodu błędu transakcji i krótką informacją o błędzie (brak powrotu na stronę Serwisu Partnera).
WAŻNE! "Para parametrów ServiceID i OrderID jednoznacznie identyfikuje transakcję. Niedopuszczalne jest powtórzenie się wartości parametru OrderID przez cały okres świadczenia usług przez System na rzecz jednego Serwisu Partnera (ServiceID)."
Opcjonalny parametr GatewayID służy do określenia Kanału Płatności, za pomocą którego ma zostać zrealizowana płatność. Pozwala to przenieść ekran wyboru Kanałów Płatności do Serwisu. Aktualna lista identyfikatorów Kanałów Płatności, wraz z logotypami, dostępna jest poprzez metodę gatewayList.
Komunikat rozpoczęcia transakcji może być nadany w tle, tzn. bez przekierowania użytkownika do Systemu płatności online. W tym modelu, samego wyboru Kanału Płatności, Klient także dokonuje w Serwisie Partnera.
Niezwłocznie po zakończeniu autoryzacji transakcji przez Klienta jest on przekierowywany z witryny Kanału Płatności na witrynę Systemu płatności online, gdzie następuje automatyczne przekierowanie Klienta do Serwisu Partnera.
Przekierowanie realizowane jest poprzez wysłanie żądania HTTPS (metodą GET) pod ustalony wcześniej adres powrotu w Serwisie Partnera. Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
2 | OrderID | TAK | string{1,32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
Przykład komunikatu przekierowującego Klienta z Systemu płatności online do Serwisu Partnera
https://sklep_nazwa/strona_powrotu?ServiceID=123458&OrderID=123402816&Hash=5432d69a66d721b2f5f785432bf5a1fc1b913bdb3bba465856a5c228fe95c1f8
System przekazuje powiadomienia o zmianie statusu transakcji niezwłocznie po otrzymaniu takiej informacji z Kanału Płatności, a komunikat zawsze dotyczy pojedynczej transakcji. Potwierdzenia przesyłane są przez System płatności online na adres na serwerze Serwisu Partnera, ustalony w trakcie dodawania konfiguracji Serwisu Partnera.
UWAGA: Domena musi być publiczna i dostępna przez System. Domena musi być zabezpieczona ważnym certyfikatem, wystawionym przez publiczny urząd certyfikacji (Certificate authority) Serwer musi się przedstawiać pełnym łańcucha certyfikatów (Chain of Trust) Komunikacja musi się odbywać w oparciu o prokół TLS w wersji 1.2 lub 1.3 *Inne formy zazabezpieczenia połączenia np. VPN, mTLS muszą być uzgadniane indywidualnie z osobą odpowiedzialną za wdrożenie.
Przykład:
https://sklep_nazwa/odbior_statusu
Powiadomienie o zmianie statusu transakcji wejściowej polega na wysłaniu przez System dokumentu XML zawierającego nowe statusy transakcji.
Dokument wysyłany jest protokołem HTTPS (domyślnie port 443) – metodą POST, jako parametr HTTP o nazwie transactions. Parametr ten zapisany jest mechanizmem kodowania transportowego Base64.
Format dokumentu (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transactionList>
<serviceID>ServiceID</serviceID>
<transactions>
<transaction>
<orderID>OrderID</orderID>
<remoteID>RemoteID</remoteID>
<amount>999999.99</amount>
<currency>PLN</currency>
<gatewayID>GatewayID</gatewayID>
<paymentDate>YYYYMMDDhhmmss</paymentDate>
<paymentStatus>PaymentStatus</paymentStatus>
<paymentStatusDetails>PaymentStatusDetails</paymentStatusDetails>
</transaction>
</transactions>
<hash>Hash</hash>
</transactionList>
UWAGA: Węzeł transactions może zawierać jedynie jeden węzeł transaction (a więc powiadomienie dotyczy zawsze jednej transakcji). Wartości elementów orderID i amount dotyczących każdej z transakcji są identyczne z wartościami odpowiadających im pól, podanymi przez Serwis Partnera przy rozpoczęciu danej transakcji. Wyjątkiem są tutaj modele, w których prowizja doliczana jest do kwoty transakcji. Wówczas wartość amount w ITN jest powiększona o tą prowizję. Walidację kwot można wtedy przeprowadzić na podstawie opcjonalnego pola ITN startAmount. Należy jednak zgłosić zapotrzebowanie na to pole podczas integracji.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera, nadawany w trakcie rejestracji usługi,jednoznacznie identyfikuje Serwis Partnera w Systemie płatności online. |
2 | orderID | TAK | string{1,32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
3 | remoteID | TAK | string{1,20} | Alfanumeryczny identyfikator transakcji nadany przez System płatności online. Warto go zapisać przy zamówieniu na potrzeby dalszej obsługi (dla wielu transakcji z tym samym OrderID, dla zwrotów itp.). Sytuacja taka może mieć miejsce np. w przypadku, gdy Klient zmieni Kanał Płatności, wywoła ponownie ten sam start transakcji z historii przeglądarki itp. System umożliwia blokowanie takich przypadków, jednak opcja nie jest zalecana (nie byłoby możliwe opłacenie porzuconej transakcji). |
5 | amount | TAK | amount | Kwota transakcji. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. |
6 | currency | TAK | string{1,3} | Waluta transakcji. |
7 | gatewayID | NIE | string{1,5} | Identyfikator Kanału Płatności, za pomocą, którego Klient uregulował płatność. |
8 | paymentDate | TAK | string{14} | Moment zautoryzowania transakcji, przekazywany w formacie YYYYMMDDhhmmss. (Czas CET) |
9 | paymentStatus | TAK | enum | Status autoryzacji transakcji, przyjmuje wartości (opis zmian statusów dalej):
|
10 | paymentStatusDetails | NIE | string{1,64} | Szczegółowy status transakcji, wartość może być ignorowana przez Serwis Partnera. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
WSKAZÓWKA: Element hash (komunikatu) służy do autentykacji dokumentu. Opis sposobu obliczania skrótu znajduje się w części Bezpieczeństwo transakcji.
W odpowiedzi na powiadomienie oczekiwany jest status HTTP 200 (OK) oraz tekst w formacie XML (niekodowany Base64), zwracany przez Serwis Partnera w tej samej sesji HTTP, zawierający potwierdzenie otrzymania statusu transakcji.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8"?>
<confirmationList>
<serviceID>ServiceID</serviceID>
<transactionsConfirmations>
<transactionConfirmed>
<orderID>OrderID</orderID>
<confirmation>Confirmation</confirmation>
</transactionConfirmed>
</transactionsConfirmations>
<hash>Hash</hash>
</confirmationList>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera pochodzący z komunikatu. |
2 | orderID | TAK | string{32} | Identyfikator transakcji, nadany w Serwisie Partnera i przekazany w starcie transakcji, pochodzący z komunikatu. |
3 | confirmation | TAK | string{1,25} | Element służy do przekazania stanu weryfikacji autentyczności transakcji przez Serwis Partnera. Wartość elementu wyznaczana jest przez sprawdzenie poprawności wartości parametru serviceID oraz currency, porównanie wartości pól orderID i amount w komunikacie powiadomienia oraz w komunikacie rozpoczynającym transakcję, a także weryfikację zgodności wyliczonego skrótu z parametrów komunikatu z wartością przekazaną w polu hash komunikatu. Wyjątkiem są modele, w których prowizja doliczana jest do kwoty transakcji. Wówczas wartość amount w ITN jest powiększona o tą prowizję. Walidację kwot można wtedy przeprowadzić na podstawie opcjonalnego pola ITN startAmount. Należy jednak zgłosić zapotrzebowanie na to pole podczas integracji. Przewidziano dwie wartości elementu confirmation:
|
nd. | hash | TAK | string{1,128} | Element hash (w odpowiedzi na komunikat) służy do autentykacji odpowiedzi i liczony jest z wartości parametrów odpowiedzi. Opis sposobu obliczania skrótu znajduje się w części Bezpieczeństwo transakcji. |
W wypadku braku poprawnej odpowiedzi na wysłane powiadomienia, System podejmie kolejne próby przekazania najnowszego statusu transakcji po upływie określonego czasu. Serwis Partnera powinien wykonywać własną logikę biznesową (np. mail z potwierdzeniem), jedynie po pierwszym komunikacie o danym statusie płatności.
WSKAZÓWKA: Warto zapoznać się ze Schematem ponawiania komunikatów ITN/ISTN/IPN/RPAN/RPDN.
Wybór przez Klienta metody płatności każdorazowo spowoduje wysłanie statusu PENDING. W kolejnym komunikacie ITN system dostarczy status SUCCESS lub FAILURE.
UWAGA Status PENDING nie zostanie wysłany, jeśli:
Dla pojedynczej transakcji (o unikatowych parametrach OrderID oraz RemoteID) nie może nastąpić zmiana statusu SUCCESS na PENDING lub SUCCESS na FAILURE.
W każdym przypadku może nastąpić zmiana statusu szczegółowego – paymentStatusDetails (kolejne komunikaty o zmianie statusu szczegółowego są jedynie informacyjne i nie powinny prowadzić do ponownego wykonania opłacanej usługi/wysyłki produktu itp.).
W szczególnych przypadkach użycia może nastąpić zmiana statusu:
a) FAILURE na SUCCESS (np. po zatwierdzeniu przez konsultanta AP transakcji wpłaconej z błędną kwotą. Takie zachowania wymaga specjalnych uzgodnień biznesowych i nie jest włączone domyślnie),
b) SUCCESS na FAILURE (np. po wywołaniu wielu transakcji z tym samym OrderID, ale różnym RemoteID). Taki przypadek występuje w sytuacji rozpoczęcia przez Klienta wielu płatności z tym samym OrderID (np. Klient zmienia decyzję, jakim Kanałem płatności chce opłacić transakcję). Każda z rozpoczętych przez niego płatności generuje ITNy i poszczególne transakcje Partner powinien rozróżnić na podstawie parametru RemoteID. Ponieważ czas otrzymania statusu FAILURE może być bardzo różny, może się zdarzyć otrzymanie takiego statusu po odebraniu SUCCESS (oczywiście z innym RemoteID). W takim wypadku, komunikat ITN powinien być potwierdzany, ale nie powinien pociągać za sobą anulowania statusu transakcji w systemie Partnera.
W modelu, w którym nie jest potrzebne powiadamianie mailem/smsem Klienta o statusach innych niż SUCCESS, można ograniczyć ilość informacji zapisywanych do bazy Serwisu oraz śledzenie zmian RemoteID.
Wystarczy:
dla statusów innych niż SUCCESS, za każdym razem potwierdzać ITN poprawną strukturą odpowiedzi, statusem CONFIRMED oraz poprawnie policzoną wartością pola Hash,
w przypadku otrzymania pierwszego statusu SUCCESS, dodać również aktualizację statusu, jego czasu i RemoteID w bazie Serwisu oraz realizację procesów biznesowych (powiadomienia do Klienta o zmianie statusu, wykonania opłacanej usługi/wysyłki produktu itp.),
w przypadku otrzymania kolejnego statusu SUCCESS, za każdym razem potwierdzać ITN poprawną strukturą odpowiedzi, statusem CONFIRMED oraz poprawnie policzoną wartością pola Hash, bez aktualizacji bazy Serwisu oraz bez procesów biznesowych.
W modelu, w którym potrzebna jest cała historia zmian statusów transakcji i/lub powiadamianie Klienta o ważniejszych zmianach statusów transakcji należy zastosować logikę przybliżoną do poniższego opisu.
W Systemie płatności online zastosowano kilka mechanizmów zwiększających bezpieczeństwo realizowanych przy jego użyciu transakcji. Transmisja między wszystkimi stronami transakcji realizowana jest z użyciem bezpiecznego połączenia opartego na protokole TLS z 2048-bitowym kluczem.
Dodatkowo, komunikacja zabezpieczana jest funkcją skrótu obliczoną z wartości pól komunikatu i współdzielonego klucza (sam klucz współdzielony przechowywany jest w Systemie w postaci zaszyfrowanej algorytmem AES-ECB).
Jako funkcja skrótu wykorzystywany jest algorytm SHA256 lub SHA512 (metoda ustalana na etapie konfigurowania danego Serwisu Partnera w Systemie płatności online). Domyślna funkcja to SHA256.
Opis sposobu obliczania wartości funkcji skrótu oraz przykłady obliczeń dla podstawowych komunikatów.
UWAGA: Przykłady nie uwzględniają wszystkich możliwych pól opcjonalnych, dlatego w razie występowania takich pól w konkretnym komunikacie, należy uwzględnić je w funkcji skrótu w kolejności zgodnej z numerem obok pola.
Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wartości pól, bez nazw parametrów, a pomiędzy kolejnymi (niepustymi) wartościami wstawiany jest separator (w postaci znaku |). Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów w dokumentacji.
WAŻNE! W przypadku braku opcjonalnego parametru w komunikacie lub w przypadku pustej wartości parametru, nie należy używać separatora!
Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między Serwis Partnera i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu i stanowi ona wartość pola Hash komunikatu.
Hash = funkcja(wartości_pola_1_komunikatu + "|" + wartości_pola_2_komunikatu + "|" + ... + "|" + wartości_pola_n_komunikatu + "|" + klucz_współdzielony);
Dane Serwisu Partnera:
ServiceID = 2klucz_współdzielony = 2test2
Adres bramki https://{host_bramki}/sciezka
a. Rozpoczęcie transakcji.
Wywołanie POST bez koszyka, z parametrami:
ServiceID=2
OrderID=100
Amount=1.50
Hash=2ab52e6918c6ad3b69a8228a2ab815f11ad58533eeed963dd990df8d8c3709d1
gdzie
Hash=SHA256(“2|100|1.50|2test2”)
b. Rozpoczęcie transakcji. Wywołanie POST z koszykiem.
WSKAZÓWKA: Opcja szczegółowo omówiona w części Koszyk produktów.
ServiceID = 2
OrderID = 100
Amount = 1.50
Product (opisany niżej)
klucz_współdzielony = 2test2
Koszyk produktów (XML)
<?xml version="1.0" encoding="UTF-8"?>
<productList>
<product>
<subAmount>1.00</subAmount>
<params>
<param name="productName" value="Nazwa produktu 1" />
</params>
</product>
<product>
<subAmount>0.50</subAmount>
<params>
<param name="productType" value="ABCD" />
<param name="ID" value="EFGH" />
</params>
</product>
</productList>
Po zakodowaniu funkcją base64 otrzymujemy wartość parametru Product:
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cHJvZHVjdExpc3Q+PHByb2R1Y3Q+PHN1YkFtb3VudD4xLjAwPC9zdWJBbW91bnQ+PHBhcmFtcz48cGFyYW0gbmFtZT0icHJvZHVjdE5hbWUiIHZhbHVlPSJOYXp3YSBwcm9kdWt0dSAxIiAvPjwvcGFyYW1zPjwvcHJvZHVjdD48cHJvZHVjdD48c3ViQW1vdW50PjAuNTA8L3N1YkFtb3VudD48cGFyYW1zPjxwYXJhbSBuYW1lPSJwcm9kdWN0VHlwZSIgdmFsdWU9IkFCQ0QiIC8+PHBhcmFtIG5hbWU9IklEIiB2YWx1ZT0iRUZHSCIgLz48L3BhcmFtcz48L3Byb2R1Y3Q+PC9wcm9kdWN0TGlzdD4=
Wartość Hash liczona jest w następujący sposób:
Hash=SHA256(“2|100|1.50|PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cHJvZHVjdExpc3Q+PHByb2R1Y3Q+PHN1YkFtb3VudD4xLjAwPC9zdWJBbW91bnQ+PHBhcmFtcz48cGFyYW0gbmFtZT0icHJvZHVjdE5hbWUiIHZhbHVlPSJOYXp3YSBwcm9kdWt0dSAxIiAvPjwvcGFyYW1zPjwvcHJvZHVjdD48cHJvZHVjdD48c3ViQW1vdW50PjAuNTA8L3N1YkFtb3VudD48cGFyYW1zPjxwYXJhbSBuYW1lPSJwcm9kdWN0VHlwZSIgdmFsdWU9IkFCQ0QiIC8+PHBhcmFtIG5hbWU9IklEIiB2YWx1ZT0iRUZHSCIgLz48L3BhcmFtcz48L3Byb2R1Y3Q+PC9wcm9kdWN0TGlzdD4=|2test2”)
Dane Serwisu Partnera:
ServiceID = 2
klucz_współdzielony = 2test2
<https://sklep_nazwa/strona_powrotu?ServiceID=2>&OrderID=100&Hash=254eac9980db56f425acf8a9df715cbd6f56de3c410b05f05016630f7d30a4ed
gdzie
Hash=SHA256("2|100|2test2")
Dane Serwisu Partnera:
serviceID = 1
klucz_współdzielony = 1test1
ITN (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transactionList>
<serviceID>1</serviceID>
<transactions>
<transaction>
<orderID>11</orderID>
<remoteID>91</remoteID>
<amount>11.11</amount>
<currency>PLN</currency>
<gatewayID>1</gatewayID>
<paymentDate>20010101111111</paymentDate>
<paymentStatus>SUCCESS</paymentStatus>
<paymentStatusDetails>AUTHORIZED</paymentStatusDetails>
</transaction>
</transactions>
<hash>a103bfe581a938e9ad78238cfc674ffafdd6ec70cb6825e7ed5c41787671efe4</hash>
</transactionList>
gdzie
Hash=SHA256(“1|11|91|11.11|PLN|1|20010101111111|SUCCESS|AUTHORIZED|1test1”)
Przykładowa odpowiedź (XML)
<?xml version="1.0" encoding="UTF-8"?>
<confirmationList>
<serviceID>1</serviceID>
<transactionsConfirmations>
<transactionConfirmed>
<orderID>11</orderID>
<confirmation>CONFIRMED</confirmation>
</transactionConfirmed>
</transactionsConfirmations>
<hash>c1e9888b7d9fb988a4aae0dfbff6d8092fc9581e22e02f335367dd01058f9618</hash>
</confirmationList>
gdzie wartość
Hash=SHA256("1|11|CONFIRMED|1test1");
Dane Serwisu Partnera:
ServiceID = 100
MessageID = 11111111111111111111111111111111
Currencies = PLN,EUR
Language = PL
klucz_współdzielony = 1test1
gdzie wartość
Hash=SHA256('100|11111111111111111111111111111111|PLN,EUR|PL|1test1')
Odpowiedź na powyższe wywołanie może być następująca (uwaga: brak pola hash w odpowiedzi):
{
"result": "OK",
"errorStatus": null,
"description": null,
"gatewayGroups": [
{
"type": "PBL",
"title": "Przelew internetowy",
"shortDescription": "Wybierz bank, z którego chcesz zlecić płatność",
"description": null,
"order": 1,
"iconUrl": null
},
{
"type": "BNPL",
"title": "Kup teraz, zapłać później",
"shortDescription": "Kup teraz, zapłać później",
"description": null,
"order": 2,
"iconUrl": null
}
],
"serviceID": "10000",
"messageID": "2ca19ceb5258ce0aa3bc815e80240000",
"gatewayList": [
{
"gatewayID": 106,
"name": "Płatność testowa PBL",
"groupType": "PBL",
"bankName": "NONE",
"iconURL": "https://testimages.autopay.eu/pomoc/grafika/106.gif",
"state": "OK",
"stateDate": "2023-10-03 14:35:01",
"description": "Płatność testowa",
"shortDescription": null,
"descriptionUrl": null,
"availableFor": "BOTH",
"requiredParams": ["Nip"],
"mcc": {
"allowed": [1234, 9876],
"disallowed": [1111]
},
"inBalanceAllowed": true,
"minValidityTime": null,
"order": 1,
"currencies": [
{
"currency": "PLN",
"minAmount": 0.01,
"maxAmount": 5000.00
}
],
"buttonTitle": "Płacę"
},
{
"gatewayID": 701,
"name": "Zapłać później z Payka",
"groupType": "BNPL",
"bankName": "NONE",
"iconUrl": "https://testimages.autopay.eu/pomoc/grafika/701.png",
"state": "OK",
"stateDate": "2023-10-03 14:37:10",
"description": "<div class=\"payway_desc\"><h1>Dane dotyczące kosztu</h1><p>Zapłać później - jednorazowo do 45 dni (...). Szczegóły oferty na: <a href="?r="https://payka.pl\" target=\"_blank\">Payka.pl</a></p></div>",
"shortDescription": "Zapłać później - jednorazowo do 45 dni lub w kilku równych ratach",
"descriptionUrl": null,
"availableFor": "B2C",
"requiredParams": [],
"mcc": null,
"inBalanceAllowed": false,
"minValidityTime": 60,
"order": 2,
"currencies": [
{
"currency": "PLN",
"minAmount": 49.99,
"maxAmount": 7000.00
}
],
"buttonTitle": "Płacę"
}
]
}
Niniejszy rozdział opisuje zasady związane z wymianą komunikatów pomiędzy AP, a Platformą Integratora w ramach funkcjonalności dodawania i edycji Serwisów, która domyślnie odbywa się za pomocą REST API oraz opcjonalnie przy użyciu Web-Services protokołu SOAP (Usługa udostępnia swoją definicję w postaci dokumentu WSDL).
Partner udostępnia na swojej Platformie odnośnik, którego wybór przez Klienta powoduje wysłanie komunikatu do AP celem otrzymania linku kierującego do Formularza Integratorskiego przygotowanego przez AP (efekty wizualne takie jak kolorystyka, czy logo Integratora na formularzu ustalane są podczas integracji).
UWAGA Istnieje również możliwość osadzenia Formularza Integratorskiego przygotowanego przez Autopay bezpośrednio na stronie internetowej Integratora (w Iframe). Do tego celu wykorzystywany jest element języka HTML o nazwie Iframe. Wykorzystanie tego typu rozwiązania wiąże się z dodatkowym nakładem prac po stronie Integratora, jednak umożliwia pozostanie Partnera na stronie www Integratora w całym procesie rejestracji/edycji sklepu. Rozwiązanie zostało szczegółowo opisane w rozdziale pt. "Widget Onboardingowy".
Dane zebrane na formularzu (po jego wypełnieniu przez Klienta) są przetwarzane przez AP, gdzie w zależności od typu formularza wykonywana jest rejestracja/edycja/dodanie kolejnego serwisu. Po pozytywnym przejściu tego kroku dane konfiguracyjne serwisu oraz linki weryfikacyjne (przy edycji danych niewrażliwych linki się nie pojawią) wysyłane są asynchronicznie do Integratora kanałami ustalonymi w trakcie integracji. Równolegle odbywa się również wysyłka do Klienta wiadomości email zawierającej linki do płatności weryfikacyjnej (isnieje możliwość wyłączenia tej wysyłki celem zastąpienia jej komunikacją odbywającą się bezpośrednio przez Partnera).
Klient w tym czasie zostaje automatycznie przekierowany na stronę powrotu Integratora (adres zostaje ustalony w trakcie integracji) lub zostaje mu zaprezentowana strona z podziękowaniem za skorzystanie z usługi, na której opcjonalnie mogą znaleźć się linki do płatności weryfikacyjnych i/lub link do Platformy Integratora.
Po opłaceniu przez Klienta transakcji weryfikacyjnej, AP sprawdza poprawność danych zadeklarowanych przez tegoż Klienta podczas rejestracji serwisu. W przypadku nadania przez AP pozytywnego statusu weryfikacji, usługa płatności w serwisie zostaje aktywowana, a do Klienta zostaje wysłana wiadomość z regulaminem zaakceptowanym przez niego na formularzu rejestracyjnym.
WAŻNE! Produkcyjna wersja usługi znajduje się za firewallem. Dostęp jest przydzielany dla skończonej i zdefiniowanej w trakcie integracji puli IP. Nie dotyczy to środowiska testowego.
WAŻNE! Dla jednego Integratora na danym środowisku (test/produkcja) przewidziany jest jeden identyfikator Platformy (PlatformID) oraz klucz współdzielony wykorzystywany do budowania hasha dla wszystkich komunikatów wymienianych pomiędzy Integratorem a AP w obrębie procesu rejestracji i edycji serwisów.
WAŻNE! Wygenerowany przez AP link prowadzący do formularza rejestracji/edycji danych serwisu ma domyślny czas ważności 24 godzin. Wartość ta może być zmieniona na prośbę Integratora.
WAŻNE! Niedopuszczalne jest udostępnianie w jakiejkolwiek formie (również w kodzie uruchamianej na serwerze osób trzecich) danych autoryzacyjnych do usługi udostępnianej przez AP (PlatformID/klucz współdzielony).
WAŻNE! Jeśli podczas rejestracji lub edycji sklepu klient wybierze kilka walut, przy pomocy których mogą być wykonywane płatności w sklepie, każda z tych walut wraz z przypisanym do niej rachunkiem rozliczeniowym musi zostać osobno zweryfikowana, poprzez przelew weryfikacyjny.
WAŻNE! Na formularzu służącym do edycji danych, przed wyświetlaniem na nim aktualnych danych Serwisu musi nastąpić weryfikacja tożsamości. W tym celu Klientowi zaprezentowane są dwa kanały weryfikacji: wiadomość sms lub email. Po wyborze jednego z nich, do Klienta jest wysyłany kod weryfikacyjny (do tego celu wykorzystany jest numer telefonu lub adres email podany przez Klienta w procesie rejestracji), który musi zostać przez niego wpisany na dodatkowym formularzu. Po poprawnym uzupełnieniu tego pola i jego weryfikacji przez AP Klient otrzymuje dostęp do formularza edycji danych wraz z całą jego zawartością.
UWAGA: W części Obsługa transakcji i rozliczeń opisane zostały funkcjonalności i sposób ich integracji w zakresie związanym z obsługą płatności dla Serwisu oraz usługami powiązanymi z obsługą płatności np. schematem rozliczeń.
W modelu Integratora nie są dostępne poniższe funkcje części transakcyjnej:
a) Dane wymieniane podczas integracji
b) Koszyk produktów
Wymiana komunikatów (w formacie JSON) pomiędzy AP, a Platformą Integratora, realizujących funkcjonalność pobierania linków do formularza rejestracji/edycji serwisów odbywa się za pomocą REST API. Dostęp do usługi zabezpieczony jest poprzez filtrowanie adresów IP.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | platformId | TAK | integer | Stały unikalny identyfikator Platformy nadany przez System płatności online. |
2 | messageId | TAK | string{32} | Unikalny identyfikator żądania w ramach Platformy nadawany przez stronę inicjującą dany komunikat. |
3 | messageTime | TAK | dateTime | Czas wygenerowania komunikatu, komunikaty z czasem ustawionym późniejszym niż 5 minut od czasu serwera Systemu płatności online będą odrzucane. Warto ustawić czas komunikatu now()-1min, na wypadek rozsynchronizowania czasu na serwerach. Przykład: 2016-07-20T09:35:00.000 (komunikat wygenerowany w chwili 2016-07-20 09:36:00). |
nd. | hash | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
nd. | formAction | TAK | string | Parametr wskazujący jaki link do formularza ma zostać zwrócony w odpowiedzi na przesłane żądanie. Dozwolone wartości:
|
nd. | formParams | TAK/NIE | string{32} | Wymagalność zależy od konfiguracji Integratora. Jest to obiekt zawierający dodatkowe pola, będące dla AP informacją o tym, jakiej konfiguracji rejestrowanego Serwisu oczekuje Integrator. W przypadkach kiedy Integrator posiada pewne informacje o Partnerze może je przekazać w odpytaniu o link, po to żeby określić konfigurację serwisu Partnera, zmniejszyć ilość pól na formularzu rejestracji/edycji i nie wymagać od Partnera wpisywania kolejny raz tych samych danych. Dla wskazanych poniżej pól istnieje możliwość skonfigurowania ich widoczności w zależności od formAction (REGISTER/UPDATE). Oznacza to, że np. pole SERVICE_URL może być podane przez integratora w odpytaniu o link do formularza i wyświetlone na formularzu rejestracji jako edytowalne, ale na formularzu edycji może zostać ukryte. Dla fromAction = ADD_SERVICE zachowanie pól jest zdefiniowane zawsze tak samo jak dla fromAction = REGISTER. Aktualnie dostępne pola:
|
Przykład 1:
{
"platformId":1,
"messageId":"22111111112411111111111111111130",
"messageTime":"2016-07-20T09:35:00.000",
"hash":"43688c048e451fba81ea7895cca13c5b6eb953a6ddf23c6089918259163381e1",
"formAction":"REGISTRATION",
"formParams":{
"SERVICE_URL":"https://serivce-integrator-test.pl",
"COMMISSION_MODEL":{
"PLN":"5"
},
"IS_CARDS_ENABLED":"TRUE"
}
}
Przykład 2:
{
"platformId":1,
"messageId":"11111111111111111111111111211254",
"messageTime":"2016-07-20T09:35:00.000",
"hash":"b16c13f8b2f6e43d583689287aaa8ca87181d037df8083c9d678e34a23983750",
"formAction":"UPDATE",
"acceptorId":120,
"serviceIds":[
11111
]
}
Przykład 3:
{
"platformId":1,
"messageId":"11111111111111111111111111211254",
"messageTime":"2016-07-20T09:35:00.000",
"hash":"b16c13f8b2f6e43d583689287aaa8ca87181d037df8083c9d678e34a23983750",
"formAction":"UPDATE",
"formParams":{
"SERVICE_URL":"https://serivce-integrator-test-nowy.pl",
"COMMISSION_MODEL":{
"PLN":"4"
},
"acceptorId":120,
"serviceIds":[
11111
]
}
Przykład 4:
{
"platformId":1,
"requestId":"22111111112411111111111111111131",
"messageTime":"2016-07-20T09:35:00.000",
"hash":"81bc2f50d4284cf4c638c4cf0ca6a07827eccf937152db151979b394a67a863d",
"formAction":"ADD_SERVICE",
"acceptorId":222222,
"formParams":{
"SERVICE_URL":"https:// serivce-integrator-test.pl ",
"COMMISSION_MODEL":{
"PLN":"5"
},
"IS_CARDS_ENABLED":"TRUE"
}
}
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
WSKAZÓWKA: Poprawna odpowiedź – status http 200.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | link | TAK | integer | Zawiera wygenerowany link do formularza rejestracyjnego. |
2 | messageId | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID), wartość pola musi być unikalna w obrębie Integratora. |
3 | formHash | TAK | string | Identyfikator linku do formularza, który służy Integratorowi do powiązania linku do formularza konkretnego Klienta z komunikatem wysyłanym po rejestracji, informującym o powstałej konfiguracji serwisu. |
nd. | hash | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów Kolejność sklejania pól jest zgodna z kolejnością. |
WSKAZÓWKA: Odpowiedź z komunikatem błędu – status http 400.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
nd. | errors | TAK/NIE | Zawiera wygenerowany link do formularza rejestracyjnego. | |
nd. | field | TAK | string | Wskazuje na pole, którego dotyczy błąd. |
nd. | error | TAK | string | Słowny opis błędu. |
nd. | errorCode | TAK | integer | Kod błędu – pełen wykaz błędów poniżej. |
Przykład poprawnej odpowiedzi:
{
"link": "https://integrator-form-domain/ e2287514541105a2eda2b85751e88be5998aec8c99cd83ba3073365ce1a243a1",
"hash": "f9e02e83fe50920ee2efb0d2322b6200a71f3afcc366893487ced7ad2330a610",
"messageId": "11111111111111111111111111111229",
"formHash": "e2287514541105a2eda2b85751e88be5998aec8c99cd83ba3073365ce1a243a1"
}
Przykłady błędnej odpowiedzi:
{
"errors": [
{
"field": "acceptorId",
"error": "Value for field acceptorId required!",
"errorCode": 6003
}
]
}
>
{
"errors": [
{
"field": "messageTime",
"error": "Message time is outdated",
"errorCode": 6016
}
]
}
>
{
"errors": [
{
"field": "hash",
"error": "Invalid hash",
"errorCode": 6000
}
]
}
Parametr | Kod błędu | Opis |
---|---|---|
hash | 6000 | Błędny hash. |
messageId | 6001 | Wartość parametru messageId nie jest unikatowa. |
acceptorId | 6002 | Został podany parametr acceptorId, który jest niedozwolony. |
acceptorId | 6003 | Parametr acceptorId nie został podany a jest wymagany. |
serviceId | 6004 | Został podany parametr serviceId, który jest niedozwolony. |
acceptorId | 6005 | Akceptor z podanym Id nie istnieje. |
serviceId | 6006 | Serwis z podanym Id nie istnieje. |
serviceIds | 6007 | Parametr serviceIds zawiera więcej lub mniej niż jeden element. |
serviceIds | 6008 | Sklep jest aktualnie weryfikowany, nie jest obecnie możliwe wykonanie kolejnej edycji. |
formParams | 6009 | Dla formularza edycji podano dodatkowe parametry które są niedozwolone. |
formParams | 6010 | W żądaniu o link do rejestracji serwisu podano nieznane parametry. |
formParams | 6011 | W żądaniu o link do rejestracji nie podano wymaganego parametru. |
formParams | 6012 | W żądaniu o link do rejestracji podano błędny format parametru. |
formParams | 6013 | W żądaniu o link do rejestracji podano błędny CommissionModel. |
formParams | 6014 | W żądaniu o link do rejestracji podano nieobsługiwaną walutę. |
messageTime | 6015 | Błędny format daty wysłanej w odpytaniu o link do formularza. |
messageTime | 6016 | Data wysłana w odpytaniu o link do formularza jest nie poza dopuszczalnym zakresem. |
platformId | 6017 | Parametr platformId nie został podany a jest wymagany. |
messageId | 6018 | Parametr messageId nie został podany a jest wymagany. |
messageId | 6019 | Wartość parametru messageId ma niepoprawną długość. |
formAction | 6020 | Niedozwolona wartość parametru formAction. |
messageTime | 6021 | Parametr messageTime nie został podany a jest wymagany. |
hash | 6022 | Parametr hash nie został podany a jest wymagany. |
hash | 6023 | Podano błędną wartość parametru hash. |
formAction | 6024 | Parametr formAction nie został podany a jest wymagany. |
hash | 6025 | Podano niepoprawny protokół w którymś z adresów URL. Oczekiwany HTTPS. |
formparams | 6026 | Podano błędny składniowo adres URL w którymś z parametrów. |
- | 6099 | Wystąpił nieoczekiwany/nieokreślony błąd. |
Jest to dodatkowa, oferowana przez Autopay opcja w procesie onboardingu sklepu, pozwalająca Integratorowi na osadzenie formularza bezpośrednio na stronie internetowej Integratora. W tej wersji rozwiązania Formularz rejestracji/edycji sklepu nadal przygotowany i utrzymywany jest po stronie Autopay, z tą różnicą, że Partner cały proces przechodzi znajdując się w serwisie Integratora, z pominięciem przekierowania na domenę Autopay. Umieszczenie formularza na stronie Integratora odbywa się poprzez użycie elementu języka HTML o nazwie IFRAME. Integrator decydując się na tego typu rozwiązanie będzie dodatkowo zobowiązany do zaimplementowania funkcjonalności pozwalającej na odbieranie eventów wysyłanych przez iframe Autopay, niezbędnych do prawidłowego wyświetlania Formularza Onboardingowego w serwisie Integratora.
UWAGA Autopay zaleca osadznie Widgetu onboardingowego w serwisie Integratora, którego strona www zabezpieczona jest certyfikatem SSL.
UWAGA Adres www do Formularza onboardingowego umieszczny w IFRAME na serwisie Integratora jest wartością zmienną (zmienia się parametr formHash w linku), dlatego należy o niego odpytać przed każdorazowym wyświetleniem strony z formularzem na serwisie Integratora.
<!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Example usage of Autopay onboarding widget</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
padding: 0;
margin: 0;
}
.container {
width: 100%;
padding-left: 15px;
padding-right: 15px;
max-width: 1200px;
margin: 0 auto;
}
header {
padding: 30px 0;
border-bottom: 1px solid #ccc;
}
footer {
padding: 30px 0;
border-top: 1px solid #ccc;
}
iframe {
width: 700px;
border: 0;
}
</style>
</head>
<body>
<header>
<div class="container">
INTEGRATOR PAGE HEADER
</div>
</header>
<main>
<section>
<div class="container">
<h1>Example usage of Autopay onboarding widget</h1>
<p>integrator text before</p>
</div>
</section>
<section>
<div class="container">
<iframe id="iframe" src="?r=quot;https://adres-formularza-onboardingowego/form/<formHash>"></iframe>
</div>
</section>
<section>
<div class="container">
<p> integrator text after</p>
</div>
</section>
</main>
<footer>
<div class="container">
INTEGRATOR PAGE FOOTER
</div>
</footer>
<script type="text/javascript">
// wait for page to load everything
document.addEventListener("DOMContentLoaded', function() {
// create listener for widget events
window.addEventListener('message', (e) => {
// if event origin not matches autopay onboarding origin, then event not belongs to widget
if (!/onboarding\.autopay\.eu$/.test(e.origin) {
return;
}
// if there is no data in event or data is not string, then event is not valid
if (!e.data || typeof e.data !== 'string') {
return;
}
let messageData;
// parse event data string to JSON, if it fails, messageData will remain empty
try {
messageData = JSON.parse(e.data)
} catch (err) {}
if (!messageData) {
return;
}
// listener for HEIGHT_CHANGE event, thanks to which the iframe window is at full height and the scroll bar is not displayed
if (messageData.event === 'HEIGHT_CHANGE') {
document.getElementById('iframe').style.height = messageData.data + 'px'
}
// listener for SCROLL_TOP event, which scrolls page to iframe top, because scroll can't happen in full height iframe window
if (messageData.event === 'SCROLL_TOP') {
const scrollToPosition = window.scrollY + document.getElementById('iframe').getBoundingClientRect()['y'];
window.scrollTo({left: 0, top: scrollToPosition, behavior: 'smooth'});
}
// listener for FORM_SUCCESS event, which provides necessary data to continue onboarding process
if (messageData.event === 'FORM_SUCCESS') {
console.log('Verification links:', messageData.data.verificationLinks)
}
})
})
</script>
</body>
</html>
Przekierowanie Klienta może nastąpić bezpośrednio po poprawnym wykonaniu rejestracji/edycji sklepu lub może być udostępnione na stronie z podziękowaniem w formie odnośnika.
Po wysłaniu formularza przez Klienta i finalizacji procesu rejestracji/edycji, AP musi wysłać dane konfiguracyjne Serwisu oraz Linków Weryfikacyjnych do Integratora. Może się to odbyć na kilka sposobów. Kanały wysyłki ustalane są z Integratorem w trakcie integracji.
Umożliwiamy dostarczenie powyższych informacji poprzez wymianę komunikatów w technologii REST, Web-Services lub poprzez wysyłkę wiadomości email pocztą elektroniczną (w formie pliku zabezpieczonego hasłem).
Każdy z kanałów wysyłek ma swój system ponawiania w przypadku nieudanej próby przesłania informacji do Integratora.
Ze względów bezpieczeństwa sugerujemy, aby wymiana informacji o danych konfiguracyjnych była wykonywana przy użyciu REST API (domyślna) lub Web-Services na zestawionym tunelu IPSec lub poprzez filtrowanie adresów IP.
Do powiązania komunikatu ICN (otrzymanego przez Integratora) z konkretną rejestracją Klienta z formularza służy pole formHash, które jest wysyłane zarówno w komunikacie ICN jak i w odpowiedzi na odpytanie o link do formularza. Dzięki temu Integrator posiada informację, dla której rejestracji otrzymał dane konfiguracyjne w komunikacie ICN.
Wymiana komunikatów pomiędzy AP, a Serwisem Partnera realizujących funkcjonalności dodawania i edycji Serwisów Partnerów odbywa się za pomocą REST API. Komunikaty wysyłane są w formacie JSON.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | acceptorId | TAK | integer | Id akceptanta. |
2 | serviceId | TAK | integer | Id serwisu. |
3 | serviceKey | TAK | string | Sól do hasha przypisana do serwisu. Przy jej pomocy Integrator będzie generował hash wykorzystywany w komunikatach dotyczących procesu płatności i rozliczeń za transakcje. |
4 | link | TAK | string | Link do przelewu weryfikacyjnego. W komunikacie przekazywany w formie listy linków obiektu verificationLinks. W przypadku przekazania kilku linków weryfikacyjnych kolejność do wyliczenia hash powinna być taka sama jak kolejność występowania linków w komunikacie. |
nd. | hash | TAK | integer | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Przykład wyliczenia: SHA256(wartość_acceptoridwartość_ serviceIdwartość_serviceKeywartość_link1wartość_link2sól_do_hash) |
nd. | verificationLinks | NIE | Obiekt przechowujący listę parametrów dotyczących linków weryfikacyjnych. | |
nd. | currency | NIE | string | Waluta, której dotyczy link weryfikacyjny. |
nd. | panelLogin | NIE | string | Login Klienta do panelu administracyjnego. |
nd. | panelAddress | NIE | string | Adres URL do panelu administracyjnego. |
nd. | formHash | TAK | string | Identyfikator linku do formularza, który służy Integratorowi do powiązania linku do formularza konkretnego Klienta z komunikatem wysyłanym po rejestracji, informującym o powstałej konfiguracji serwisu. |
nd. | method | NIE | string | Informacja o tym, jakiego typu formularza dotyczy wysłana konfiguracja. Dopuszczalne wartości: REGISTER UPDATE ADD_SERVICE |
Przykład 1.
{
"acceptorID":11111,
"serviceID":22222,
"serviceKey":"sa22a2729462f643cf4c989dddcf226b99b3a6bda11db43a433ab31a7ec2abe925",
"hash":"580a285b9bf95e60d4eaeb470d32858a5f0191a2a51b40a18ee7612fa9ced187",
"verificationLinks ":[
{
"link":"sampleLink",
"currency":"PLN"
}
],
"panelLogin":"sample panel login",
"panelPassword":"sample panel password",
"panelAddress":"sample panel address",
"formHash":"sample form hash",
"method":"REGISTER"
}
nazwa | wymagany | typ | opis |
---|---|---|---|
resultStatus | TAK | string | Status odpowiedzi. Dopuszczalne wartości: OK ERROR |
description | TAK | string | Dodatkowy opis dla odpowiedzi. |
{
"resultStatus":"OK",
"description":"sample description"
}
Wymiana komunikatów pomiędzy AP, a Serwisem Partnera realizujących funkcjonalności dodawania i edycji Serwisów Partnerów odbywa się za pomocą technologii Web-Services protokołu SOAP.
Usługa ta udostępnia swoją definicję w postaci dokumentu WSDL (Web Service Definitions Language), dostarczanego przez AP podczas integracji.
<xsd:element name="InstantConfigurationNotificationRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:elementname="InstantConfigurationNotification" type="tns: InstantConfigurationNotification "/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name=" InstantConfigurationNotification ">
<xsd:sequence>
<xsd:sequence>
<xsd:element name="AcceptorID" type="xsd:int"/>
<xsd:element name="ServiceID" type="xsd:int"/>
<xsd:element name="ServiceKey" type="xsd:string"/>
<xsd:element name="Hash" type="xsd:string"/>
<xsd:element minOccurs="0" name="VerificationLinks" type="tns:VerificationLinks"/>
<xsd:element minOccurs="0" name="PanelLogin" type="xsd:string"/>
<xsd:element minOccurs="0" name="PanelPassword" type="xsd:string"/>
<xsd:element minOccurs="0" name="PanelAddress" type="xsd:string"/>
<xsd:element name="FormHash" type="xsd:string"/>
<xsd:element name="Method" type="tns:Method"/>
</xsd:sequence>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="VerificationLink">
<xsd:sequence>
<xsd:element name="Currency" type="xsd:string"/>
<xsd:element name="Link" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="VerificationLinks">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="VerificationLink" type="tns:VerificationLink"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="Method">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="REGISTER"/>
<xsd:enumeration value="UPDATE"/>
<xsd:enumeration value="ADD_SERVICE"/>
</xsd:restriction>
</xsd:simpleType>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | AcceptorId | TAK | integer | Id akceptanta. |
2 | ServiceId | TAK | integer | Id serwisu. |
3 | ServiceKey | TAK | string | Sól do hasha przypisana do serwisu. Przy jej pomocy Integrator będzie generował hash wykorzystywany w komunikatach dotyczących procesu płatności i rozliczeń za transakcje. |
4 | Link | NIE | string | Link do przelewu weryfikacyjnego. |
nd. | Hash | TAK | integer | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Przykład wyliczenia: SHA256(wartość_acceptoridwartość_ serviceIdwartość_ serviceKeywartość_link1wartość_link2sól_do_hash) |
nd. | VerificationLinks | NIE | string | Obiekt przechowujący listę obiektów VerificationLink dotyczących Linków Weryfikacyjnych. |
nd. | VerificationLink | NIE | string | Obiekt przechowujący parametry dotyczące Linków Weryfikacyjnych. |
nd. | Link | NIE | string | Link do przelewu weryfikacyjnego. |
nd. | Currency | NIE | string | Waluta, której dotyczy Link Weryfikacyjny. |
nd. | PanelLogin | NIE | string | Login Klienta do panelu administracyjnego. |
nd. | PanelPassword | NIE | string | Tymczasowe hasło Klienta do panelu administracyjnego. |
nd. | PanelAddress | NIE | string | Tymczasowe hasłoAdres URL do panelu administracyjnego. |
nd. | FormHash | TAK | string | Identyfikator linku do formularza, który służy Integratorowi do powiązania linku do formularza konkretnego Klienta z komunikatem wysyłanym po rejestracji, informującym o powstałej konfiguracji serwisu. |
nd. | Method | NIE | string | Informacja o tym, jakiego typu formularza dotyczy wysłana konfiguracja. Dopuszczalne wartości: REGISTER UPDATE ADD_SERVICE |
Przykład 1.
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2: InstantConfigurationNotificationRequest
xmlns:ns2="http://integrator/ws/">
< InstantConfigurationNotification>
<AcceptorID>11111</AcceptorID>
<ServiceID>22222</ServiceID>
<ServiceKey>22a2729462f643cf4c989dddcf226b99b3a6bda11db43a433ab31a7ec2abe925</ServiceKey>
<Hash>580a285b9bf95e60d4eaeb470d32858a5f0191a2a51b40a18ee7612fa9ced187</Hash>
<VerificationLinks>
<VerificationLink>
<Currency>PLN</Currency>
<Link>sampleLink</Link>
</VerificationLink>
</VerificationLinks>
<FormHash>generated_hash</FormHash>
<Method>REGISTER</Method>
</ InstantConfigurationNotification>
</ns2: InstantConfigurationNotificationRquest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<xsd:element name=" InstantConfigurationNotificationResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Result" type="tns:ResultStatus"/>
<xsd:element name="Description" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
>
<xsd:simpleType name="ResultStatus">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="OK"/>
<xsd:enumeration value="ERROR"/>
</xsd:restriction>
</xsd:simpleType>
nazwa | wymagany | typ | opis |
---|---|---|---|
ResultStatus | TAK | string | Status odpowiedzi. Dopuszczalne wartości: OK ERROR |
Description | TAK | string | Dodatkowy opis dla odpowiedzi. |
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2: InstantConfigurationNotificationResponse
xmlns:ns2="http://integrator/ws/">
<Result>OK</Result>
<Description>sample description</Description>
</ns2: InstantConfigurationNotificationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Informacje o serwisie są wysyłane na adres email wskazany przez integratora w formie pliku zabezpieczonego hasłem. Numer telefonu, na który mają być wysyłane hasła jest ustalany z Integratorem w trakcie integracji.
System Autopay umożliwia informowanie Integratora o zmianie danych AML Sklepu. Dzięki temu Integrator może po swojej stronie na bieżąco aktualizować dane, które zostały zmienione w Autopay i prezentować je Partnerowi.
Zostało to zrealizowane poprzez wysyłkę komunikatów w formacie JSON metodą HTTP POST. Poprawne działanie usługi wymaga zaimplementowania po stronie Integratora metody pozwalającej na przyjęcie wspomnianego komunikatu.
Struktura komunikatu wysyłanego do Integratora dzieli się na trzy główne węzły przedstawione w tabeli poniżej.
Nazwa węzła | opis |
---|---|
revisionHeader | Obiekt przechowujący dane dotyczące rewizji czyli zmiany w systemie, która została wprowadzona przez klienta w systemie Integratora |
dataHeader | Obiekt przechowujący informacje służące do autentykacji komunikatu |
currentData | Obiekt przechowujący informację aktualnych danych AML dotyczących Sklepu po stronie Autopay. Są to ostatnie pozytywnie zweryfikowane dane w systemie Autopay. Jeśli komunikat związany jest z rejestracją, która nie dostała pozytywnego statusu weryfikacji w polu revisionHeader.autopayVerificationStatus, to currentData = null (w systemie nie ma zweryfikowanych danych dla tego service/acceptanta) |
Przykład
{
"revisionHeader":{
"orderId":"123_2d87806818cf319d7127ffb",
"revisionId":"03d5627b-b9fe-40c0-ae32-5c9620d804ee",
"autopayVerificationStatus":"POSITIVE"
},
"dataHeader":{
"acceptorId":345,
"dataTime":"2024-01-16T 09:16:13",
"serviceId":123,
"hash":"35a56e960b4a4650b727b098bafd1912cf4e3012c8927ec29b3af6408bc99199"
},
"currentData":{
"company":{
"name":"Testowa firma",
"address":{
"address":"ul Testowa 77",
"postalCode":"80-462",
"city":"Gdańsk",
"country":"PL",
"street":null,
"houseNumber":null,
"flatNumber":null
},
"nip":"8219663675",
"regon":"955459555",
"edg":"123",
"krs":"1234567890",
"phone":{
"currentValue":"+48123456789",
"waitingValue":null
},
"representingPersons":[
{
"personName":{
"firstName":"Jan",
"lastName":"Kowalski"
},
"pesel":"PL",
"documentData":{
"number":"BKI332498",
"type":"ID",
"expirationDate":"2030-01-01",
"country":"PL"
},
"citizenship":"32061970611",
"birthData":{
"date":"1932-06-19",
"country":"PL"
}
}
],
"activityKind":"SP_ZOO",
"beneficials":[
{
"personName":{
"firstName":"Piotr",
"lastName":"Nowak"
},
"citizenship":"PL",
"pesel":"32061970611",
"birthDate":"1932-06-19"
}
],
"registrationDate":"2000-01-01",
"plenipotentiary":{
"personName":{
"firstName":"Jan",
"lastName":"Kowalski"
},
"citizenship":"PL",
"birthData":{
"date":"1932-06-19",
"country":"PL"
},
"pesel":"32061970611",
"documentData":{
"number":"BKI332498",
"type":"ID",
"expirationDate":"2030-01-01",
"country":"PL"
}
},
"physicalPerson":null,
"partners":[
{
"personName":{
"firstName":"Jan",
"lastName":"Kowalski"
},
"citizenship":"PL",
"pesel":"32061970611",
"birthData":{
"date":"1932-06-19",
"country":"PL"
},
"documentData":{
"number":"BKI332498",
"type":"ID",
"expirationDate":"2030-01-01",
"country":"PL"
}
}
]
},
"service":{
"name":"Testowy sklep",
"serviceUrl":"https://test.autopay.eu",
"urlITN":"https://test.autopay.eu/itn",
"returnUrl":"https://test.autopay.eu/return",
"trade":{
"id":1,
"name":"Alkohol"
},
"invoiceEmail":"invoice@test.autopay.eu",
"contactEmail":{
"currentValue":"contact@test.autopay.eu",
"waitingValue":null
},
"complaintEmail":"complaint@test.autopay.eu",
"reportEmail":"report@test.autopay.eu",
"balanceDetails":[
{
"settlementNRB":"59124053967877760136628953",
"currency":"PLN",
"swiftCode":null,
"commissionModel":2,
"regulationId":12
}
]
}
}
}
Nazwa pola | Opis |
---|---|
revisionHeader.revisionId | revisionHeader.revisionId |
revisionHeader.autopayVerificationStatus | status weryfikacji po stronie Autopay danych wysłanych w ramach rewizji. Status ten NIE dotyczy danych z węzła currentData |
revisionHeader.orderId | identyfikator płatności jeśli taka wystąpiła podczas tworzenia rewizji (akcji rejestracji lub aktualizacji danych) |
dataHeader.dataTime | data i godzina pobrania danych z systemu Autopay |
dataHeader.serviceId | id service’u, którego dotyczą dane |
dataHeader.acceptorId | id acceptanta, którego dotyczą dane |
dataHeader.hash | wartość kontrolna weryfikująca integralność nagłówka liczona według wzoru SHA256(acceptorId|dataTime|serviceId|secret_key) np: SHA256(345|2024-01-16T08:08:51.271|123|secret_key) |
currentData.company | dane firmy rejestrującej płatności, głównie dane AML |
currentData.service | dane konfiguracyjne serwisu |
Istnieje możliwość, że niektóre z danych kontaktowych będą wymagać weryfikacji wykonanej przez Klienta. Pola których może dotyczyć weryfikacja to:
currentData.company.phone
currentData.service.contactEmail
Każde z tych pól reprezentowane jest w postaci obiektu:
{
"currentValue":"wartość",
"waitingValue":null
}
currentValue - wartość aktualnie obowiązująca w systemie
waitingValue - wartość oczekująca na weryfikacje po stronie klienta. W sytuacji gdy klient wprowadził kilka wartości
nie weryfikując żadnej z nich pole waitingValue zawierać będzie ostatnią z nich. Wartość null oznacza, że żadna dana
nie oczekuje na weryfikację po stronie klienta.
Może wystąpić kilka postaci tego nagłówka:
W pełni uzupełniony:
"revisionHeader":{
"revisionId":"046b8dcf-3581-4079-813c-34d0a2871fae",
"autopayVerificationStatus":"PENDING",
"orderId":"151007_2d87806818cf319d7127ffb"
}
Nagłówek taki wystąpi, gdy podczas akcji zainicjalizowanej przez Integratora wystąpi konieczność opłacenia transakcji weryfikacyjnej przez klienta.
Puste OrderId:
"revisionHeader":{
"revisionId":"046b8dcf-3581-4079-813c-34d0a2871fae",
"autopayVerificationStatus":"PENDING",
"orderId":null
}
Taka forma nagłówka wystąpi gdy akcja Integratora wygeneruje weryfikację niewrażliwą tzn taką, która nie wymaga opłacenia transakcji weryfikacyjnej.
Brak nagłówka revisionHeader:
"revisionHeader":null
Nagłówek revisionHeader nie wystąpi gdy zmiana w obrębie service/acceptanta zainicjalizowana zostanie przez Autopay np. w wyniku okresowej weryfikacji danych.
Pole określa status weryfikacji dla wskazanej rewizji. Możliwe wartość tego pola:
PENDING - rewizja oczekuje na weryfikacje
POSITIVE - rewizja została zaakceptowana
NEGATIVE - rewizja została odrzucona
NEED_FEEDBACK - wymagana jest informacja/akcja po stronie klienta
Wartość pola revisionHeader.autopayVerificationStatus oznacza status weryfikacji po stronie Autopay i nie ma związku z weryfikacją danych kontaktowych wykonywanych przez klienta.
Wartość pola revisionHeader.autopayVerificationStatus nie dotyczy danych z węzła currentData, jest to status przesłanej rewizji.
{
"personName":{
"firstName":"Jan",
"lastName":"Kowalski"
},
"pesel":"69010583482",
"documentData":{
"number":"BKI332498",
"type":"ID",
"expirationDate":"2030-01-01",
"country":"PL"
},
"citizenship":"PL",
"birthData":{
"date":"1951-06-19",
"country":"PL"
}
}
"address":{
"address":"ul Testowa 77/3",
"postalCode":"80-462",
"city":"Gdańsk",
"country":"PL",
"street":null,
"houseNumber":null,
"flatNumber":null
}
"address":{
"address":null,
"postalCode":"80-462",
"city":"Gdańsk",
"country":"PL",
"street":"ul Testowa",
"houseNumber":77,
"flatNumber":3
}
Proces udostępnienia sklepowi płatności za pośrednictwem kart płatniczych, wymaga weryfikacji sklepu zarówno po stronie AP jak i po stronie administratora płatności kartowych, dlatego uruchomienie zazwyczaj trwa dłużej niż sama aktywacja sklepu.
System umożliwia wysyłkę natychmiastowego powiadomienia w przypadku włączania lub wyłączenia możliwości wykonywania płatności przy użyciu kart płatniczych w sklepie, aby zapewnić spójność konfiguracji sklepu pomiędzy Platformą Integratora a AP. Zostało to zrealizowane poprzez wysyłkę komunikatu w formacie JSON przy użyciu REST API.
UWAGA: Poprawne działanie usługi wymaga zaimplementowania po stronie Integratora metody pozwalającej na przyjęcie wspomnianego komunikatu.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceId | TAK | integer | Stały unikalny identyfikator sklepu nadany przez System płatności online. |
2 | orderId | TAK | string | Unikalny identyfikator żądania nadawany przez AP. Składnia orderId: wartośćserviceId_unikalnylosowyciągznaków |
3 | cardsStatus | TAK | string | Status uruchomienia płatności kartowych w sklepie. Dostępne wartości: ACTIVE INACTIVE |
nd. | hash | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
nd. | currencies | TAK | string | Lista walut, dla których zmienił sie status uruchomienia płatności kartowych |
Przykład.
{
"serviceId":"1111111",
"orderId":"22222",
"cardsStatus":"ACTIVE",
"hash":"81eb70b8f2c4576bfb375a7ccbfcfb196b235556bcc329aa40a3dc8bfd",
"currencies":["PLN","EUR","GBP","USD"]
}
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceId | TAK | integer | Stały unikalny identyfikator sklepu nadany przez System płatności online. |
2 | orderId | TAK | string | Unikalny identyfikator żądania nadawany przez AP. |
3 | confirmation | TAK | string | Status potwierdzenia: - CONFIRMED - NOTCONFIRMED |
nd. | hash | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
Przykład.
{
"serviceId":"1111111",
"orderId":"22222",
"confirmation":"CONFIRMED",
"hash":"81eb70bcb8f2c4576bfb375a7ccbfcfb196b2355986556b29aa40a3dc8bfd"
}
System umożliwia wysyłkę do Integratora natychmiastowego powiadomienia o włączeniu oraz wyłączeniu wskazanych kanałów płatności na danym sklepie. Zostało to zrealizowane poprzez wysyłkę komunikatu w formacie JSON. Poprawne działanie usługi wymaga zaimplementowania po stronie Integratora metody pozwalającej na przyjęcie wspomnianego komunikatu.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceId | TAK | integer | Stały unikalny identyfikator sklepu nadany przez System płatności online. |
2 | orderId | TAK | string | Unikalny identyfikator żądania nadawany przez Autopay. |
- | gatewayConfigurations | TAK | Obiekt przechowujący listę kanałów płatności, dla których nastąpiła zmiana aktywności. | |
3 | gatewayConfiguration.gatewayId | TAK | integer | Identyfikator kanału płatności. |
4 | gatewayConfiguration.active | TAK | boolean | Informacja, czy wskazany kanał płatności został włączony czy wyłączony. |
- | hash | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. |
UWAGA: Jeśli podczas integracji z Partnerem ustalono separator do liczenia hash’a dla komunikatów, zostanie on użyty. W takim przypadku liczenie hash będzie odbywać się według schematu:
Hash = SHA256(wartość_pola_1_komunikatu + separator + wartość_pola_2_komunikatu + separator + wartość_pola_3_komunikatu + separator + [kolejne pola oddzielone separatorem]+ klucz_współdzielony)
Przykład:
{
"serviceId": 111111,
"gatewayConfigurations": [
{
"gatewayId": 101,
"active": false
},
{
"gatewayId": 100,
"active": true
}
],
"orderId": "47781_0a25c3c9-e0a7-4bfa-9bdf-75ca75c2569d",
"hash": "5f3dfeec2cea228e2f4db8840fdc0e4d91d224da195618c0c67c6a7ea53c1832"
}
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceId | TAK | integer | Stały unikalny identyfikator sklepu nadany przez System płatności online. |
2 | orderId | TAK | string | Unikalny identyfikator żądania nadawany przez Autopay. |
3 | confirmation | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
Przykład:
Przykład.
{
"serviceId":"1111111",
"orderId":"22222",
"confirmation":"CONFIRMED",
"hash":"81eb70bcb8f2c4576bfb375a7ccbfcfb196b2355986556b29aa40a3dc8bfd"
}
Komunikat służący do uzyskania aktualnych w Systemie danych Partnera. Ponieważ AP jest zobligowane, aby gwarantować aktualność danych obsługiwanych Partnerów, może nastąpić ich aktualizacja (w dowolnym momencie) na podstawie zaufanych źródeł zewnętrznych. W związku z powyższym, wymagane jest, aby przed każdym wyświetleniem na Platformie Integratora, nastąpiła ich aktualizacja na Platformie poprzez wywołanie metody GetAMLCompanyData.
<xsd:element name="GetAMLCompanyDataReq">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="AcceptorID" type="xsd:int"/>
<xsd:element name="Header" type="tns:Header"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
nazwa pola | typ | opis |
---|---|---|
AcceptorID | integer | ID akceptanta. |
Header | header | Obiekt służący do przekazywania danych nagłówka dotyczących bezpieczeństwa komunikacji i poprawności przesyłanych danych. |
<xsd:complexType name="Header">
<xsd:sequence>
<xsd:element name="PlatformId" type="xsd:string"/>
<xsd:element name="MessageTime" type="xsd:dateTime"/>
<xsd:element name="RequestId" type="xsd:long"/>
<xsd:element name="Hash" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | PlatformId | TAK | string | Stały unikalny identyfikator Platformy nadany przez System płatności online. |
2 | MessageTime | TAK | dateTime | Czas wygenerowania komunikatu, komunikaty z czasem ustawionym późniejszym niż 5 minut od czasu serwera Systemu płatności online będą odrzucane. Warto ustawić czas komunikatu now()-1min, na wypadek rozsynchronizowania czasu na serwerach. Przykład: 2016-07-20T09:35:00.000 (komunikat wygenerowany w chwili 2016-07-20 09:36:00). |
3 | RequestId | TAK | long | Unikalny identyfikator żądania w ramach Platformy nadawany przez stronę inicjującą dany komunikat. |
nd. | Hash | TAK | string{64} | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) Przykład: SHA256(11112016-07-20T09:35:00. 000111222333aaabbbccc) gdzie: PlatfromId = 1111 MessageTime = 2016-07-20T09:35:00.000 RequestId = 111222333 Klucz współdzielony = aaabbbccc |
Komunikat jest odpowiedzią na GetAMLCompanyDataResp.
<xsd:element name="GetAMLCompanyDataResp">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Result" type="xsd:string"/>
<xsd:element name="ErrorStatus" type="xsd:string" nillable="true"/>
<xsd:element name="Company" type="tns:Company"/>
<xsd:element name="isServiceActive" type="xsd:boolean" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
nazwa pola | typ | opis |
---|---|---|
Result | string | OK – operacja zakończona sukcesem ERROR – błąd przy edycji Partnera |
ErrorStatus | string | Status błędu. |
Company | Company | Obiekt z danymi firmy Partnera. |
isServiceActive | boolean | Informacja o tym, czy serwis jest aktywny. |
WSKAZÓWKA: Typ komunikatu Company, oraz poszczególne jego składowe, opisano szczegółowo w części Typy złożone.
System umożliwia Integratorowi pobranie aktualnej, pełnej listy regulaminów odpowiadających dostępnym dla Integratora stawkom prowizyjnym (CommissionModel) lub konkretnej listy regulaminów ograniczonej filtrami podanymi w parametrach żądania. W tym celu należy wywołać metodę getLegalData (https://domena_BMAutopay/getLegalData) z odpowiednimi parametrami. Wymiana komunikatów pomiędzy Autopay, a platformą Integratora odbywa się w formacie JSON. Wszystkie parametry przekazywane są metodą POST (Content-Type: application/json). Poniżej znajduje się lista dostępnych parametrów. Dostęp do usługi zabezpieczony jest poprzez filtrowanie adresów IP.
Kolejność do hash | Nazwa | Wymagany | Typ | Opis |
---|---|---|---|---|
. | header | TAK | Obiekt przechowujący pola autoryzacyjne komunikatu. | |
1 | platformId | TAK | integer | Stały unikalny identyfikator Platformy nadany przez System płatności online. |
2 | messageId | TAK | string{32} | nikalny identyfikator żądania w ramach Platformy nadawany przez stronę inicjującą dany komunikat. |
3 | messageTime | TAK | dateTime | Czas wygenerowania komunikatu, komunikaty z czasem ustawionym późniejszym niż 5 minut od czasu serwera Systemu płatności online będą odrzucane. Warto ustawić czas komunikatu now()-1min, na wypadek rozsynchronizowania czasu na serwerach. Przykład: 2016-07-20T09:35:00.000 (komunikat wygenerowany w chwili 2016-07-20 09:36:00). |
- | hash | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony). |
- | filterParams | NIE | Obiekt przechowujący parametry będące filtrami zapytania. Niewysłanie filtrów w zapytaniu komunikacie żądanie do Autopay spowoduje zwrócenie pełnej listy regulaminów dostępnej dla Integratora. | |
- | commissionmodelList | NIE | Lista stawek prowizyjnych, dla których mają zostać zwrócone regulaminy. Podanie konkretnej stawki spowoduje zwrócenie odpowiadającego jej regulaminu. | |
- | languageList | NIE | Lista języków, w których mają zostać zwrócone regulaminy. Przykład: Podanie języka PL spowoduje zwrócenie wszystkich regulaminów napisanych w języku polskim. |
Przykłąd.
Odpytanie o listę regulaminów dla stawek prowizyjnych 1 oraz 2, w języku polskim oraz angielskim dla waluty PLN.
{
"header":{
"platformId":"111111",
"messageId":22222,
"messageTime":"2020-06-01 09:36:00",
"hash":"31772235489560079037848456"
},
"filterParams":{
"commissionmodelList":[
1,
2
],
"languageList":[
"PL",
"EN"
]
}
}
Poprawna odpowiedź - status http 200.
Kolejność do hash | Nazwa | Wymagany | Typ | Opis |
---|---|---|---|---|
1 | status | TAK | string | Wartość: OK – w przypadku statusu http 200. |
2 | messageId | TAK string {32} | Pole zwracające wartość identyfikatora komunikatu żądania. | |
- | hash | TAK | string | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. |
- | regulationList | TAK | Obiekt przechowujący listę zwracanych regulaminów. | |
- | regulationId | TAK | integer | Identyfikator regulaminu, odsyłany do Autopay w metodach RegisterCompany, UpdateCompany, UpdateService, UpdateConfiguration, będący informacją dla Autopay jaki regulamin został zaakceptowany na formularzu Integratora. |
- | regulationLink | TAK | string | Link do pliku z regulaminem. |
- | commissionmodel | TAK | integer | tawka prowizyjna, której dotyczy regulamin. |
- | language | TAK | string | Język w jakim został napisany regulamin. |
- | currency | TAK | string | Waluta stawki prowizyjnej, której dotyczy regulamin. |
Odpowiedź z komunikatem błędu - status http 400.
Kolejność do hash | Nazwa | Wymagany | Typ | Opis |
---|---|---|---|---|
errors | TAK | Obiekt przechowujący listę błędów zawartych w komunikacie żądania. | ||
field | TAK | string | Wskazuje na pole, którego dotyczy błąd. | |
error | TAK | string | Słowny opis błędu. | |
errorCode | integer | Kod błędu – pełen wykaz błędów znajduje poniżej |
Przykład.
Zwrócenie listy regulaminów
{
"regulationList": [
{
"commissionModel": 1,
"language": "PL",
"regulationLink":"https://platnosci-accept.bm.pl/regulations/api/download/4eaf489b-c27f-40ac-b888-032f562077dd",
"regulationId": 41,
"currency": "PLN"
},
{
"commissionModel": 3,
"language": "PL",
"regulationLink":"https://platnosci-accept.bm.pl/regulations/api/download/70c5638e-7301-46f9-87e1-522dcff1db4e",
"regulationId": 42,
"currency": "PLN"
},
{
"commissionModel": 6,
"language": "PL",
"regulationLink":"https://platnosci-accept.bm.pl/regulations/api/download/0ef22461-7245-4501-970f-e09f2929856f",
"regulationId": 43,
"currency": "PLN"
}
],
"messageId": "22121111112411112211111311212260",
"status": "OK",
"hash": "a2bd34888537a5c91c2700f12ec4e59786b03e9d4a92ad9ffd1dc49c8c8edad2"
}
Wykaz kodów błędów
Kod błędu | Opis | Parametr, którego dotyczy błąd |
---|---|---|
6000 | Błędny hash | hash |
6023 | Paramert hash nie został podany, a jest wymagany | hash |
6017 | Parametr platformId nie został podany a jest wymagany | platformId |
6018 | Parametr messageId nie został podany a jest wymagany. | messageId |
6019 | Wartość parametru messageId ma niepoprawną długość. | messageId |
6015 | Błędny format daty | messageTime |
6015 | Data wysłana w odpytaniu o link do formularza jest nie poza dopuszczalnym zakresem. | messageTime |
6015 | Parametr messageTime nie został podany a jest wymagany. | messageTime |
6027 | Błędna wartość w liście. | commissionmodelList |
6028 | łędna wartość w liście. | languageList |
6029 | Nie podano obiektu header. | header |
Komunikat umożliwiający zmianę konfiguracji Sklepu przez Integratora bez konieczności wykonywania przelewu weryfikacyjnego.
<xsd:element name="UpdateConfigurationReq">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ServiceID" type="xsd:int" minOccurs="0"/>
<xsd:element name="Header" type="tns:Header"/>
<xsd:element name="ConfigurationData" type="tns:ConfigurationData"/>
<xsd:element name="Currency" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
nazwa | wymagany | typ | opis |
---|---|---|---|
ServiceID | NIE | integer | ID serwisu. |
Header | NIE | Header | Obiekt służący do przekazywania danych nagłówka dotyczących bezpieczeństwa komunikacji i poprawności przesyłanych danych. |
ConfigurationData | NIE | ConfigurationData | Obiekt służący do przekazania informacji o nowej konfiguracji sklepu. |
Currency | NIE | string | Waluta. |
<xsd:complexType name="Header">
<xsd:sequence>
<xsd:element name="PlatformId" type="xsd:string"/>
<xsd:element name="MessageTime" type="xsd:dateTime"/>
<xsd:element name="RequestId" type="xsd:long"/>
<xsd:element name="Hash" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | PlatformId | TAK | string | Stały unikalny identyfikator Platformy nadany przez System płatności online. |
3 | MessageTime | TAK | dateTime | Czas wygenerowania komunikatu, komunikaty z czasem ustawionym późniejszym niż 5 minut od czasu serwera Systemu płatności online będą odrzucane. Warto ustawić czas komunikatu now()-1min, na wypadek rozsynchronizowania czasu na serwerach. Przykład: 2016-07-20T09:35:00.000 (komunikat wygenerowany w chwili 2016-07-20 09:36:00). |
4 | RequestId | TAK | long | Unikalny identyfikator żądania w ramach Platformy nadawany przez stronę inicjującą dany komunikat. |
nd. | Hash | TAK | string{64} | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
<xsd:complexType name="ConfigurationData">
<xsd:sequence>
<xsd:element name="isTransactionRefundAllowed" type="tns:BooleanType" minOccurs="0"/>
<xsd:element name="CommissionModel" type="xsd:long" nillable="true"/>
<xsd:element name="isCardsPaymentRequired" type="tns:BooleanType" minOccurs="0"/>
<xsd:element name="ServiceUrl" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
isTransactionRefundAllowed | NIE | BooleanType | Informacja czy Partner chce udostępnić dla Serwisu opcję wypłat z Rachunku Płatniczego oraz zwrotów transakcji. Niewysłanie elementu bądź wysłanie wartości FALSE powoduje zablokowanie tej opcji. Wysłanie TRUE powoduje jej udostępnienie Serwisowi. |
CommissionModel | NIE | long | Numer uzgodnionego w trakcie integracji modelu prowizyjnego. |
isCardsPaymentRequired | NIE | BooleanType | Informacja czy Partner chce udostępnić dla Serwisu opcję płatności kartami. Niewysłanie elementu bądź wysłanie wartości false, powoduje wyłączenie kart. Wysłanie TRUE, powoduje rozpoczęcie procesu aktywacji kart, lub utrzymanie dostępności kart (w przypadku pozytywnie zakończonego procesu aktywacji kart dla Serwisu). |
ServiceUrl | NIE | string | Pole pozwalające na zmianę adresu tymczasowego podanego podczas rejestracji na adres docelowy. |
UWAGA: Podany w ServiceUrl adres musi zawierać stałą część domeny.
Na przykład zmiana adresu: https://nazwasklepu.integrator.pl na https://nazwasklepu.pl
Komunikat jest odpowiedzią na UpdateConfigurationReq.
<xsd:element name="UpdateConfigurationResp">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Result" type="xsd:string"/>
<xsd:element name="ErrorStatus" type="xsd:string" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
nazwa pola | typ | opis |
---|---|---|
Result | xsd:string | OK – operacja zakończona sukcesem ERROR – błąd przy edycji serwisu |
ErrorStatus | xsd:string | Status błędu, jeśli wystąpił ERROR. |
ActivationLink | xsd:string | Adres URL, prowadzący do Systemu skonfigurowanej pod proces weryfikacji poprzez przelew. |
Komunikat służący do anulowania edycji danych serwisu, który jest aktualnie w trakcie weryfikacji. Metoda jest wykorzystywane w momencie, konfiguracja Integratora po stronie Systemu Autopay blokuje obsługę wielu weryfikacji na raz aby zachować spójność zmienianych danych. Poprawne wykonanie CancelUpdate umożliwia wysłanie danych z formularza celem edycji danych sklepu, bez oczekiwania na finalny status weryfikacji poprzedniej edycji danych.
UWAGA: Próby pobrania linka do formularza dla serwisu, który jest aktualnie w trakcie weryfikacji zakończą się błędem: SHOP_IN_VERIFICATION_STATUS.
<xsd:element name="CancelUpdateReq">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ServiceID" type="xsd:int" minOccurs="0"/>
<xsd:element name="AcceptorID" type="xsd:int" minOccurs="0"/>
<xsd:element name="Header" type="tns:Header"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
nazwa pola | typ | opis |
---|---|---|
ServiceID | int | ID serwisu. |
AcceptorID | int | ID akceptanta. |
Header | header | Obiekt służący do przekazywania danych nagłówka dotyczących bezpieczeństwa komunikacji i poprawności przesyłanych danych. |
<xsd:element name="CancelUpdateResp">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Result" type="xsd:string"/>
<xsd:element name="ErrorStatus" type="xsd:string" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
nazwa pola | typ | opis |
---|---|---|
Result | xsd:string | OK- operacja zakończona sukcesem ERROR – błąd przy edycji serwisu. |
ErrorStatus | xsd:string | Gdy wystąpił ERROR. |
Typ komunikatu służący do przekazywania danych nagłówka dotyczących bezpieczeństwa komunikacji i poprawności przesyłanych danych.
<xsd:complexType name="Header">
<xsd:sequence>
<xsd:element name="PlatformId" type="xsd:string"/>
<xsd:element name="MessageTime" type="xsd:date"/>
<xsd:element name="RequestId" type="xsd:long"/>
<xsd:element name="Hash" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | PlatformId | TAK | string | Stały unikalny identyfikator Platformy nadany przez System płatności online. |
3 | MessageTime | TAK | dateTime | Czas wygenerowania komunikatu, komunikaty z czasem ustawionym późniejszym niż 5 minut od czasu serwera Systemu płatności online będą odrzucane. Warto ustawić czas komunikatu now()-1min, na wypadek rozsynchronizowania czasu na serwerach. Przykład: 2016-07-20T09:35:00.000 (komunikat wygenerowany w chwili 2016-07-20 09:36:00). |
4 | RequestId | TAK | long | Unikalny identyfikator żądania w ramach Platformy nadawany przez stronę inicjującą dany komunikat. |
nd. | Hash | TAK | string{64} | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
Ten typ komunikatu służy do przekazywania adresu danego podmiotu.
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name=”Address” type=”xsd:string/>
<xsd:element name=”PostalCode” type=”xsd:string/>
<xsd:element name=”City” type=”xsd:string/>
<xsd:element name=”Country” type=”xsd:string/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
Address | TAK | string | Adres. |
PostalCode | TAK | string | Kod pocztowy. |
City | TAK | string | Miasto. |
Country | TAK | string | Kraj. |
Typ opisujący numer NIP z ograniczeniem od 2 do 15 znaków.
<xsd:simpleType name="NIPType">
<xsd:restriction base="xsd:string">
<xsd:minLength value="2"/>
<xsd:maxLength value="15"/>
</xsd:restriction>
</xsd:simpleType>
Typ opisujący walutę.
<xsd:simpleType name="Currency">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="PLN"/>
<xsd:enumeration value="EUR"/>
<xsd:enumeration value="USD"/>
<xsd:enumeration value="GBP"/>
<xsd:enumeration value="CZK"/>
</xsd:restriction>
</xsd:simpleType>
System przelewu rozliczeniowego w przypadku rachunku zagranicznego.
<xsd:simpleType name="ForeignTransferModeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="SWIFT"/>
<xsd:enumeration value="SEPA"/>
</xsd:restriction>
</xsd:simpleType>
Obiekt jest listą typów beneficjentów rzeczywistych Partnera.
<xsd:complexType name="Beneficials">
<xsd:sequence>
<xsd:element name="Beneficial" type="tns:Beneficial" minOccurs="0" maxOccurs="2"/>
</xsd:sequence>
</xsd:complexType>
Obiekt zawiera typ beneficjenta rzeczywistego oraz ewentualną listę beneficjentów tego typu.
<xsd:complexType name="Beneficial">
<xsd:sequence>
<xsd:element name="BeneficialType" type="xsd:int"/>
<xsd:element name="BeneficialOwners" type="tns:BeneficialOwners" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
BeneficialType | TAK | int | Typ beneficjenta: 11 - BENEFICJENT UDZIAŁOWIEC- osoba fizyczna, która ma pośrednio lub bezpośrednio więcej niż 25% udziałów/głosów 12 - BENEFICJENT KONTROLA- osoba fizyczna, sprawująca kontrolę poprzez jednostkę dominującą według przepisów o rachunkowości 13 - BENEFICJENT KIEROWNICTWO- osoby zajmujące wyższe stanowisko kierownicze w Spółce (zarząd lub rada nadzorcza) 14 - BENEFICJENT WSPÓLNIK-wspólnik spółki 15 - BENEFICJENT INNY- osoba nie będąca beneficjentem rzeczywistym; istnieje osoba fizyczna wywierająca na nią wpływ lub sprawująca nad nią kontrolę 16 - BENEFICJENT WŁAŚCICIEL |
BeneficialOwners | NIE | BeneficialOwners | Lista beneficjentów danego typu. |
Typ opisuje listę beneficjentów rzeczywistych.
<xsd:complexType name="BeneficialOwners">
<xsd:sequence>
<xsd:element name="BeneficialOwner" type="tns:BeneficialOwner" minOccurs="0" maxOccurs="8"/>
</xsd:sequence>
</xsd:complexType>
Typ opisuje dane pojedynczego beneficjenta rzeczywistego.
<xsd:complexType name="BeneficialOwner">
<xsd:sequence>
<xsd:element name="FirstName" type="xsd:string" nillable="false"/>
<xsd:element name="LastName" type="xsd:string" nillable="false"/>
<xsd:element name="Citizenship" type="xsd:string"/>
<xsd:element name="Share" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
FirstName | TAK | string | Imię beneficjenta. |
LastName | TAK | string | Nazwisko beneficjenta. |
Citizenship | TAK | string | Obywatelstwo beneficjenta. |
Share | NIE | int | Ilość udziałów/akcji beneficjenta wyrażona w procentach. Udział musi być większy lub równy 25[%]. Suma udziałów wszystkich beneficjentów Partnera nie powinna przekraczać 100[%]. Udziały określane są tylko dla beneficjentów typu 11. |
Typ komunikatu opisujący pełnomocnika.
<xsd:complexType name="Plenipotentiary">
<xsd:sequence>
<xsd:element name="FirstName" type="xsd:string"/>
<xsd:element name="LastName" type="xsd:string"/>
<xsd:element name="Citizenship" type="xsd:string"/>
<xsd:element name="Pesel" type="xsd:string" minOccurs="0"/>
<xsd:element name="BirthDate" type="xsd:string" minOccurs="0"/>
<xsd:element name="BirthCountry" type="xsd:string" minOccurs="0"/>
<xsd:element name="DocumentType" type="xsd:string" minOccurs="0"/>
<xsd:element name="Document" type="xsd:string" minOccurs="0"/>
<xsd:element name="DocumentExpirationDate" type="xsd:string" minOccurs="0"/>
<xsd:element name="DocumentCountryId" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
FirstName | TAK | string | Imię pełnomocnika. |
LastName | TAK | string | Nazwisko pełnomocnika. |
Citizenship | TAK | string | Obywatelstwo pełnomocnika. |
Pesel | NIE | string | Pesel pełnomocnika. W przypadku braku peselu należy podać datę oraz państwo urodzenia. |
BirthDate | NIE | string | Data urodzenia pełnomocnika w formacie YYYY-mm-dd (np. 1990-01-01). Podawana, kiedy nie jest znany pesel lub pełnomocnik nie posiada numeru pesel. |
BirthCountry | NIE | string | Państwo urodzenia pełnomocnika. |
DocumentType | TAK | string | Typ dokumentu. Akceptowane wartości: PASSPORT lub ID. |
Document | TAK | string | Numer dokumentu. |
DocumentExpirationDate | TAK | string | Data ważności dokumentu. |
DocumentCountryId | TAK | string | ID państwa dokumentu beneficjenta. Wymagane w przypadku podania DocumentType=PASSPORT. WSKAZÓWKA: Akceptowalne wartości zostały podane w części Zmiana konfiguracji Serwisu - "UPDATECONFIGURATION" |
Typ opisuje listę wspólników.
<xsd:complexType name="Partners">
<xsd:sequence>
<xsd:element name="Partner" type="tns:Partner" minOccurs="0" maxOccurs="7"/>
</xsd:sequence>
</xsd:complexType>
Typ komunikatu opisujący wspólnika.
<xsd:complexType name="Partners">
<xsd:sequence>
<xsd:element name="FirstName" type="xsd:string"/>
<xsd:element name="LastName" type="xsd:string"/>
<xsd:element name="Citizenship" type="xsd:string"/>
<xsd:element name="Pesel" type="xsd:string" minOccurs="0"/>
<xsd:element name="BirthDate" type="xsd:string" minOccurs="0"/>
<xsd:element name="BirthCountry" type="xsd:string" minOccurs="0"/>
<xsd:element name="DocumentType" type="xsd:string" minOccurs="0"/>
<xsd:element name="Document" type="xsd:string" minOccurs="0"/>
<xsd:element name="DocumentExpirationDate" type="xsd:string" minOccurs="0"/>
<xsd:element name="DocumentCountryId" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
FirstName | TAK | string | Imię wspólnika. |
LastName | TAK | string | Nazwisko wspólnika. |
Citizenship | TAK | string | Obywatelstwo wspólnika. |
Pesel | NIE | string | Pesel wspólnika. W przypadku braku peselu należy podać datę oraz państwo urodzenia. |
BirthDate | NIE | string | Data urodzenia wspólnika w formacie YYYY-mm-dd (np. 1990-01-01). Podawana, kiedy nie jest znany pesel lub partner nie posiada numeru pesel. |
DocumentType | TAK | string | Typ dokumentu. Akceptowane wartości: PASSPORT lub ID. |
Document | TAK | string | Numer dokumentu. Wymagany dla activitykind: CIVIL_PARTNERSHIP. Dla innych form prawnych pole nie powinno być wypełniane. |
DocumentExpirationDate | TAK | string | Data ważności dokumentu. |
DocumentCountryId | TAK | string | ID państwa dokumentu beneficjenta. Wymagane w przypadku podania DocumentType=PASSPORT. WSKAZÓWKA: Akceptowalne wartości zostały podane w części Zmiana konfiguracji Serwisu - "UPDATECONFIGURATION" |
Typ komunikatu opisujący Serwis Partnera.
<xsd:complexType name="Service">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string" nillable="false"/>
<xsd:element name="ServiceUrl" type="xsd:string" nillable="false"/>
<xsd:element name="UrlITN" type="xsd:string" nillable="false"/>
<xsd:element name="ReturnUrl" type="xsd:string" nillable="false"/>
<xsd:element name="SettlementNRB" type="xsd:string" />
<xsd:element name="SwiftCode" type="xsd:string" minOccurs="0"/>
<xsd:element name="ForeignTransferMode" type="tns:ForeignTransferModeType" minOccurs="0"/>
<xsd:element name="CommissionModel" type="xsd:long" nillable="true"/>
<xsd:element name="isCardsPaymentRequired" type="xsd:boolean" minOccurs="0" />
<xsd:element name="AverageServiceTurnover" type="xsd:decimal" minOccurs="0" />
<xsd:element name="AverageTransactionAmount" type="xsd:decimal" minOccurs="0" />
<xsd:element name="EconomicPurpose" type="xsd:string" minOccurs="0" />
<xsd:element name="EconomicPurposeDescription" type="xsd:string" minOccurs="0" />
<xsd:element name="NumericTrade" type="xsd:int" minOccurs="0" />
<xsd:element name="InvoiceEmail" type="xsd:string" minOccurs="0" />
<xsd:element name="ContactEmail" type="xsd:string" minOccurs="0"/>
<xsd:element name="ComplaintEmail" type="xsd:string" minOccurs="0"/>
<xsd:element name="ReportEmail" type="xsd:string" minOccurs="0"/>
<xsd:element name="isTransactionRefundAllowed" type="xsd:boolean" minOccurs="0" />
<xsd:element name="Currency" type="tns:Currency" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
Name | TAK | string | Nazwa Serwisu Partnera. |
ServiceUrl | TAK | string | Adres URL Serwisu Partnera. |
UrlITN | TAK | string | Adres URL, na który jest wysyłany ITN z powiadomieniem o zmianie statusu transakcji po otrzymaniu takiej informacji z Kanału Płatności. |
ReturnUrl | TAK | string | Adres URL strony powrotu do płatności. |
SettlementNRB | TAK | string | Numer konta bankowego do przekazu środków i weryfikacji poprzez Przelew weryfikacyjny. |
SwiftCode | NIE | string | Kod SWIFT. Wymagany w przypadku podania numeru rachunku innego niż polski. |
ForeignTransferMode | NIE | ForeignTransferModeType | System jakim wykonywane będą przelewy rozliczeniowe. Wymagany w przypadku podania numeru rachunku innego niż polski. |
CommissionModel | NIE | long | Numer uzgodnionego w trakcie integracji modelu prowizyjnego. |
isCardsPaymentRequired | NIE | boolean | Informacja czy Partner chce udostępnić dla Serwisu opcję płatności kartami. Niewysłanie elementu bądź wysłanie wartości FALSE, powoduje wyłączenie kart. Wysłanie TRUE powoduje rozpoczęcie procesu aktywacji kart lub utrzymanie dostępności kart (w przypadku pozytywnie zakończonego procesu aktywacji kart dla Serwisu). |
AverageServiceTurnover | NIE | decimal(2) | Średni obrót Serwisu. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. |
AverageTransactionAmount | NIE | decimal(2) | Średnia wartość transakcji. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. |
EconomicPurpose | TAK | string | Partner oświadcza, iż zawiera Umowę w następującym celu gospodarczym: DEVELOPMENT_ACTIVITY: rozwój działalności gospodarczej Partnera poprzez przyjmowanie od Klientów zapłaty za pośrednictwem Instrumentów Płatniczych (PBL, Karta, Szybki Przelew), o których mowa w Umowie, START_ACTIVITY: rozpoczęcie działalności gospodarczej przez Partnera w ramach realizowania sprzedaży Produktów na odległość, OTHER: opis szczegółowy w polu EconomicPurposeDescription |
EconomicPurposeDescription | NIE | string | Opis celu gospodarczego wypełniany dla pola EconomicPurpose o wartości OTHER. Dopuszczalne jedynie wielkie litery alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń |
NumericTrade | TAK | int | Branża, w której specjalizuje się Serwis Partnera. Pole jednokrotnego wyboru. Jeśli Serwis Partnera podlega pod kilka kategorii wybiera główną, która generuje największy obrót. Słownik wartości: 1 Alkohol 2 Antyki, dzieła sztuki 3 Apteki i suplementy diety 4 Artykuły medyczne 5 Artykuły parafarmaceutyczne, suplementy, zioła 6 Artykuły spożywcze 7 Aukcje 8 Bielizna 9 Bilety 10 Biżuteria i zegarki 11 Militaria 12 Budowlane 13 Charytatywna 14 Chemia gospodarcza i przemysłowa 15 Dewocjonalia 16 Dom i ogród 17 Dziecko 18 E-book (książki elektroniczne) 19 Edukacja 20 Elektronika 21 E-papierosy 22 Filatelistyka 23 Finanse 24 Fundacja 25 Gadżety 26 Galanteria 27 Gastronomia 28 Gry online (nie hazard), loga, dzwonki do tel. komórkowych 29 Instytucje 30 Karty/kody pre-paid/telekarty 31 Kolekcjonerstwo 32 Komputery i sprzęt komputerowy, drukarki 33 Konta WWW i pocztowe 34 Kosmetyki i perfumy 35 Książki, gazety, czasopisma 36 Kwiaty i prezenty 37 Materiały biurowe 38 Motoryzacja 39 Multimedia i muzyka 40 Masowy Wystawca Faktur 41 Numizmatyka 42 Odzież 43 Ogłoszenia 44 Oprogramowanie, gry komputerowe i aplikacje 45 Prasa/Prenumerata 46 Rachunki 47 Rękodzieło 48 Sektor publiczny 49 Sprzęt AGD/RTV 50 Sprzęt fotograficzny 51 Sprzęt medyczny 52 Sprzęt sportowy 53 Szkolenia 54 Turystyka i hotelarstwo 55 Ubezpieczenia 56 Usługi 57 Usługi foto (odbitki) i poligraficzne 58 Usługi medyczne 59 VOD 60 Wędkarstwo 61 Wielobranżowość 62 Wyposażenie wnętrz, meble 63 Wypożyczalnia samochodów 64 Wyroby tytoniowe 65 Zabawki 66 Zoologia |
InvoiceEmail | TAK | string | Adres email do wysyłki faktur oraz raportów miesięcznych. |
ContactEmail | TAK | string | Adres email Partnera. |
ComplaintEmail | TAK | string | Adres email do reklamacji. |
ReportEmail | TAK | string | Adres email do wysyłki raportów dziennych. |
isTransactionRefundAllowed | TAK | boolean | Informacja czy Partner chce udostępnić dla Serwisu opcję wypłat z Rachunku Płatniczego oraz zwrotów transakcji. Niewysłanie elementu bądź wysłanie wartości FALSE powoduje zablokowanie tej opcji. Wysłanie TRUE powoduje jej udostępnienie Serwisowi. |
Currency | TAK | currency | Waluta serwisu. |
Typ komunikatu służący do przekazywania danych Partnera.
<xsd:complexType name="Company">
<xsd:sequence>
<xsd:element name="CompanyRemoteId" type="xsd:string"/>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Address" type="tns:Address"/>
<xsd:element name="Nip" type="tns:NIPType"/>
<xsd:element name="Krs" type="xsd:string"/>
<xsd:element name="Phone" type="xsd:string"/>
<xsd:element name="RepresentingPersonFirstName" type="xsd:string"/>
<xsd:element name="RepresentingPersonLastName" type="xsd:string"/>
<xsd:element name="RepresentingPersonPesel" type="xsd:string"/>
<xsd:element name="RepresentingPersonDateOfBirth" type="xsd:string"/>
<xsd:element name="RepresentingPersonBirthCountry" type="xsd:string" minOccurs="0"/>
<xsd:element name="RepresentingPersonCitizenship" type="xsd:string"/>
<xsd:element name="RepresentingPersonPersonalDocumentType" type="xsd:string"/>
<xsd:element name="RepresentingPersonPersonalDocument" type="xsd:string"/>
<xsd:element name="RepresentingPersonPersonalDocumentExpirationDate" type="xsd:string"/>
<xsd:element name="RepresentingPersonPersonalDocumentCountryId" type="xsd:string" minOccurs="0"/>
<xsd:element name="Service" type="tns:Service"/>
<xsd:element name="ActivityKind" type="xsd:string"/>
<xsd:element name="LegalForm" type="xsd:string" minOccurs="0"/>
<xsd:element name="PanelAdministrator" type="xsd:string" minOccurs="0" />
<xsd:element name="isListedOnTheStockExchange" type="tns:BooleanType" />
<xsd:element name="Beneficials" type="tns:Beneficials" minOccurs="0" />
<xsd:element name="TradeRegisterName" type="xsd:string" minOccurs="0"/>
<xsd:element name="RegistrationDate" type="xsd:string" minOccurs="0"/>
<xsd:element name="Plenipotentiary" type="tns:Plenipotentiary" minOccurs="0"/>
<xsd:element name="Partners" type="tns:Partners" minOccurs="0" />
<xsd:element name="PhysicalPerson" type="tns:PhysicalPerson" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
CompanyRemoteId | TAK | string | ID reprezentujące Partnera. |
Name | TAK | string | Pełna nazwa handlowa Partnera. Nazwa Akceptanta. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. |
Address | TAK | address | Adres, pod którym jest zarejestrowana działalność handlowa Partnera (możliwość rejestracji wyłącznie z krajów należących do EOG). Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. |
Nip | TAK | NIPType | NIP Partnera. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. |
Krs | TAK | string | KRS Partnera. Wymagany dla ActivityKind=GENERAL_PARTNERSHIP, LIMITED_LIABILITY_PARTNERSHIP, LIMITED_PARTNERSHIP, LIMITED_JOINT_STOCK_PARTNERSHIP, SP_ZOO, SA, SOCIETY, FOUNDATION, COOPERATIVE, CHURCH. |
Phone | TAK | string | Telefon kontaktowy Partnera. |
RepresentingPersonFirstName | TAK | string | Imię osoby reprezentującej Partnera. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. |
RepresentingPersonLastName | TAK | string | Nazwisko osoby reprezentującej Partnera. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. |
RepresentingPersonPesel | NIE | string | PESEL osoby reprezentującej Partnera. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. |
RepresentingPersonDateOfBirth | NIE | string | Data urodzenia osoby reprezentującej Partnera w formacie YYYY-mm-dd (np. 1990-01-01). Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. Wymagany, kiedy reprezentant nie posiada numeru PESEL. |
RepresentingPersonBirthCountry | NIE | string | Państwo urodzenia. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. Wymagany, kiedy reprezentant nie posiada numeru PESEL. |
RepresentingPersonCitizenship | TAK | string | Obywatelstwo. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY. |
RepresentingPersonPersonalDocumentType | TAK | string | Typ dokumentu potwierdzającego tożsamość osoby reprezentującej Partnera. Dopuszczalne wartości: PASSPORT – paszport ID – dowód osobisty Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY, GENERAL_PARTNERSHIP, LIMITED_LIABILITY_PARTNERSHIP, LIMITED_PARTNERSHIP, LIMITED_JOINT_STOCK_PARTNERSHIP, SP_ZOO, SA, SOCIETY, FOUNDATION, COOPERATIVE, GOVERNMENT, SELF_GOVERNMENTAL_UNIT, SELF_GOVERNMENTAL, CULTURAL_INSTITUTION, STATE_OWNED_ENTERPRISE, STATE_CULTURAL_INSTITUTION, PUBLIC_SECTOR_INSTITUTION, RESEARCH_INSTITUTION, CHURCH, FOREIGN |
RepresentingPersonPersonalDocument | TAK | string | Seria i numer dowodu osobistego (lub nr paszportu - dokumentu potwierdzającego tożsamość osoby nie posiadającej dowodu osobistego). Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY, GENERAL_PARTNERSHIP, LIMITED_LIABILITY_PARTNERSHIP, LIMITED_PARTNERSHIP, LIMITED_JOINT_STOCK_PARTNERSHIP, SP_ZOO, SA, SOCIETY, FOUNDATION, COOPERATIVE, GOVERNMENT, SELF_GOVERNMENTAL_UNIT, SELF_GOVERNMENTAL, CULTURAL_INSTITUTION, STATE_OWNED_ENTERPRISE, STATE_CULTURAL_INSTITUTION, PUBLIC_SECTOR_INSTITUTION, RESEARCH_INSTITUTION, CHURCH, FOREIGN. Dopuszczalne jedynie cyfry oraz wielkie litery alfabetu łacińskiego. |
RepresentingPersonPersonalDocumentExpirationDate | TAK | string | Data ważności dokumentu tożsamości (dowodu osobistego lub paszportu). Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY, GENERAL_PARTNERSHIP, LIMITED_LIABILITY_PARTNERSHIP, LIMITED_PARTNERSHIP, LIMITED_JOINT_STOCK_PARTNERSHIP, SP_ZOO, SA, SOCIETY, FOUNDATION, COOPERATIVE, GOVERNMENT, SELF_GOVERNMENTAL_UNIT, SELF_GOVERNMENTAL, CULTURAL_INSTITUTION, STATE_OWNED_ENTERPRISE, STATE_CULTURAL_INSTITUTION, PUBLIC_SECTOR_INSTITUTION, RESEARCH_INSTITUTION, CHURCH, FOREIGN. Dokument musi być ważny przynajmniej jeden dzień. Wymagany dla form prawnych: CIVIL_PARTNERSHIP, PROPRIETORSHIP. |
RepresentingPersonPersonalDocumentCountryId | TAK | string | ID kraju dokumentu. Niedozwolone dla ActivityKind=NON_ACCOUNTED_ACTIVITY, GENERAL_PARTNERSHIP, LIMITED_LIABILITY_PARTNERSHIP, LIMITED_PARTNERSHIP, LIMITED_JOINT_STOCK_PARTNERSHIP, SP_ZOO, SA, SOCIETY, FOUNDATION, COOPERATIVE, GOVERNMENT, SELF_GOVERNMENTAL_UNIT, SELF_GOVERNMENTAL, CULTURAL_INSTITUTION, STATE_OWNED_ENTERPRISE, STATE_CULTURAL_INSTITUTION, PUBLIC_SECTOR_INSTITUTION, RESEARCH_INSTITUTION, CHURCH, FOREIGN. Wymagany dla form prawnych: CIVIL_PARTNERSHIP, PROPRIETORSHIP. |
Service | TAK | Service | Serwis Partnera. |
LegalForm | TAK | string | Nazwa zagranicznej formy prawnej. Wymagany dla ActivityKind = FOREIGN. |
ActivityKind | TAK | string | Forma prawna. Poniżej prezentujemy dopuszczalne wartości. Integrator powinien prezentować Partnerowi formę prawną zgodną z wersją językową platformy: NON_ACCOUNTED_ACTIVITY – Działalność nieewidencjonowana osoby fizycznej PROPRIETORSHIP – Jednoosobowa działalność gospodarcza CIVIL_PARTNERSHIP – Spółka cywilna LIMITED_LIABILITY_PARTNERSHIP – Spółka partnerska GENERAL_PARTNERSHIP – Spółka jawna SP_ZOO – Spółka z ograniczoną odpowiedzialnością SA – Spółka akcyjna LIMITED_PARTNERSHIP – Spółka komandytowa LIMITED_JOINT_STOCK_PARTNERSHIP – Spółka komandytowo-akcyjna SOCIETY – Stowarzyszenie FOUNDATION – Fundacja COOPERATIVE – Spółdzielnia GOVERNMENT – Organ administracji rządowej, organ samorządu terytorialnego lub organ egzekucyjny (gminy, urzędy) SELF_GOVERNMENTAL_UNIT – Jednostka samorządu terytorialnego SELF_GOVERNMENTAL_CULTURAL_INSTITUTION – Samorządowa instytucja kultury STATE_OWNED_ENTERPRISE – Przedsiębiorstwo państwowe STATE_CULTURAL_INSTITUTION – Państwowa instytucja kultury PUBLIC_SECTOR_INSTITUTION – Instytucja gospodarki budżetowej RESEARCH_INSTITUTION – Instytut badawczy CHURCH – Kościół FOREIGN – Przedsiębiorca zagraniczny. |
PanelAdministrator | NIE | string | Imię i nazwisko administratora panelu Systemu płatności online. |
isListedOnTheStockExchange | TAK | boolean | Informacja czy Partner prowadzi spółkę, której papiery wartościowe są notowane na giełdzie w co najmniej jednym państwie członkowskim Unii Europejskiej lub w państwie równoważnym. Wymagane dla ActivityKind = FOREIGN. |
Beneficials | TAK | Beneficials | Beneficjenci. Niedozwolone dla ActivityKind=GOVERNMENT, SELF_GOVERNMENTAL_UNIT, SELF_GOVERNMENTAL_CULTURAL_INSTITUTION, STATE_OWNED_ENTERPRISE,STATE_CULTURAL_INSTITUTION, PUBLIC_SECTOR_INSTITUTION, RESEARCH_INSTITUTION, CIVIL_PARTNERSHIP |
TradeRegisterName | NIE | string | Nazwa rejestru handlowego. Wymagane w przypadku firmy zagranicznej. |
RegistrationDate | NIE | string | Data rejestracji firmy. |
Plenipotentiary | NIE | Plenipotentiary | Pełnomocnik. |
Partners | NIE | - | Lista wspólników. Wymagana dla aktivitykind= CIVIL_PARTNERSHIP, GENERAL_PARTNERSHIP, LIMITED_LIABILITY_PARTNERSHIP, LIMITED_PARTNERSHIP, LIMITED_JOINT_STOCK_PARTNERSHIP |
PhysicalPerson | NIE | PhysicalPerson | Osoba fizyczna. Wymagane dla ActivityKind=NON_ACCOUNTED_ACTIVITY |
Typ komunikatu służący do przekazywania danych osoby fizycznej. Wypełniany, kiedy ActivityKind = NON_ACCOUNTED_ACTIVITY.
<xsd:complexType name="PhysicalPerson">
<xsd:sequence>
<xsd:element name="FirstName" type="xsd:string"/>
<xsd:element name="LastName" type="xsd:string"/>
<xsd:element name="Pesel" type="xsd:string"/>
<xsd:element name="DocumentType" type="xsd:string" minOccurs="0"/>
<xsd:element name="Document" type="xsd:string"/>
<xsd:element name="DocumentExpirationDate" type="xsd:string"/>
<xsd:element name="DocumentCountryId" type="xsd:string" minOccurs="0"/>
<xsd:element name="Citizenship" type="xsd:string"/>
<xsd:element name="BirthDate" type="xsd:string" minOccurs="0"/>
<xsd:element name="BirthCountry" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
nazwa pola | wymagany | typ | opis |
---|---|---|---|
FirstName | TAK | string | Imię osoby fizycznej. |
LastName | TAK | string | Nazwisko osoby fizycznej. |
Pesel | NIE | string | PESEL osoby fizycznej. W przypadku braku peselu należy podać datę oraz państwo urodzenia. |
DocumentType | TAK | string | Typ dokumentu. Akceptowane wartości: PASSPORT ID |
Document | TAK | string | Numer dokumentu. |
DocumentExpirationDate | TAK | string | Data ważności dokumentu. |
DocumentCountryId | TAK | string | ID państwa dokumentu osoby fizycznej. Wymagany w przypadku DocumentType=PASSPORT. |
Citizenship | TAK | string | Obywatelstwo osoby fizycznej. |
BirthDate | NIE | string | Data urodzenia osoby fizycznej w formacie YYYY-mm-dd (np. 1990-01-01). Podawana, kiedy nie jest znany PESEL lub beneficjent nie posiada numeru PESEL. |
BirthCountry | NIE | string | Państwo urodzenia osoby fizycznej. |
Weryfikacja danych na formularzu odbywa się głównie w oparciu o formę prawną firmy. W zależności od niej oczekiwane są typy beneficjentów, określone są ich wzajemne wykluczenia oraz maksymalna ilość wystąpień dla każdego typu.
Typ beneficjenta jest definiowany na formularzu poprzez zaznaczenie przez Klienta odpowiedniego oświadczenia.
Forma prawna | Oświadczenie | Typ Beneficjenta | Maks. wystąpień w formularzu |
---|---|---|---|
NON_ACCOUNTED_ACTIVITY - Działalność nieewidencjonowana osoby fizycznej | Jestem beneficjentem rzeczywistym - nie istnieje inna osoba fizyczna wywierająca na mnie wpływ lub sprawująca nade mną kontrolę UWAGA: Klient wypełnia dane beneficjanta tylko w przypadku zaznaczenia oświadczenia dla typu BENEFICJENT INNY. |
BENEFICJENT WŁAŚCICIEL | 0 |
Nie jestem beneficjentem rzeczywistym - istnieje osoba fizyczna wywierająca na mnie wpływ lub sprawująca nade mną kontrolę. | BENEFICJENT INNY | 1 | |
PROPRIETORSHIP - Jednoosobowa działalność gospodarcza | Jestem beneficjentem rzeczywistym - nie istnieje inna osoba fizyczna wywierająca na mnie wpływ lub sprawująca nade mną kontrolę UWAGA: Klient wypełnia dane beneficjanta tylko w przypadku zaznaczenia oświadczenia dla typu BENEFICJENT INNY. |
BENEFICJENT WŁAŚCICIEL | 0 |
Nie jestem beneficjentem rzeczywistym - istnieje osoba fizyczna wywierająca na mnie wpływ lub sprawująca nade mną kontrolę. | BENEFICJENT INNY | 1 | |
CIVIL_PARTNERSHIP – Spółka cywilna | Jestem beneficjentem rzeczywistym - nie istnieje inna osoba fizyczna wywierająca na mnie wpływ lub sprawująca nade mną kontrolę UWAGA: Klient wypełnia dane beneficjanta tylko w przypadku zaznaczenia oświadczenia dla typu BENEFICJENT INNY. |
BENEFICJENT WŁAŚCICIEL | 0 |
Nie jestem beneficjentem rzeczywistym - istnieje osoba fizyczna wywierająca na mnie wpływ lub sprawująca nade mną kontrolę. | BENEFICJENT INNY | 8 | |
GENERAL_PARTNERSHIP – Spółka jawna | Beneficjentem rzeczywistym są wspólnicy Spółki UWAGA: Klient wypełnia dane beneficjanta tylko w przypadku zaznaczenia oświadczenia dla typu BENEFICJENT INNY. |
BENEFICJENT WSPÓLNIK | 0 |
Istnieje osoba fizyczna, inna niż wspólnicy, która wywiera wpływ lub sprawuje kontrolę nad Spółką | BENEFICJENT INNY | 8 | |
LIMITED_LIABILITY_PARTNERSHIP - Spółka partnerska | WSKAZÓWKA: Zasady weryfikacji danych beneficjenta analogiczne do GENERAL_PARTNERSHIP. | ||
LIMITED_PARTNERSHIP - Spółka komandytowa | WSKAZÓWKA: Zasady weryfikacji danych beneficjenta analogiczne do GENERAL_PARTNERSHIP. | ||
LIMITED_JOINT_STOCK_PARTNERSHIP - Spółka komandytowo-akcyjna | Istnieje osoba fizyczna, która ma pośrednio lub bezpośrednio więcej niż 25% akcji/głosów UWAGA: Klient wypełnia dane beneficjanta tylko w przypadku zaznaczenia oświadczenia dla typu BENEFICJENT UDZIAŁOWIEC. |
BENEFICJENT UDZIAŁOWIEC | 3 |
Nie istnieje osoba fizyczna, która ma pośrednio lub bezpośrednio więcej niż 25% akcji/głosów | BENEFICJENT WSPÓLNIK | 0 | |
SP_ZOO – Spółka z ograniczoną odpowiedzialnością | Istnieje osoba fizyczna, która ma pośrednio lub bezpośrednio więcej niż 25% akcji/głosów UWAGA: Typ BENEFICJENT KIEROWNICTWO nie może współistnieć z innymi typami beneficjentów. Typy BENEFICJENT UDZIAŁOWIEC oraz BENEFICJENT KONTROLA mogą ze sobą współistnieć więc klient może zaznaczyć na formularzu oba oświadczenia odpowiadające tym typom. |
BENEFICJENT UDZIAŁOWIEC | 3 |
Istnieje osoba fizyczna, sprawująca kontrolę poprzez jednostkę dominującą według przepisów o rachunkowości | BENEFICJENT KONTROLA | 8 | |
Osoby zajmujące wyższe stanowisko kierownicze w Spółce (zarząd lub rada nadzorcza) | BENEFICJENT KIEROWNICTWO | 8 | |
SA – Spółka akcyjna | WSKAZÓWKA: Zasady weryfikacji danych beneficjenta analogiczne do SP_ZOO. | ||
SOCIETY – Stowarzyszenie | Beneficjentem rzeczywistym jest zarząd stowarzyszenia UWAGA: W komunikacie może wystąpić tylko jeden z typów beneficjentów: BENEFICJENT KIEROWNICTWO lub BENEFICJENT INNY. Typy te się wzajemnie wykluczają. |
BENEFICJENT KIEROWNICTWO | 8 |
Istnieje osoba fizyczna, inna niż zarząd stowarzyszenia, która wywiera wpływ lub sprawuje kontrolę nad stowarzyszeniem | BENFICJENT INNY | 2 | |
FOUNDATION – Fundacja | Beneficjentem rzeczywistym jest zarząd stowarzyszenia UWAGA: Klient może zaznaczyć na formularzu tylko jedno z oświadczeń. Typy im odpowiadające wzajemnie wykluczają. |
BENEFICJENT KIEROWNICTWO | 8 |
Istnieje osoba fizyczna, inna niż zarząd stowarzyszenia, która wywiera wpływ lub sprawuje kontrolę nad fundacją | BENFICJENT INNY | 2 | |
COOPERATIVE – Spółdzielnia | Beneficjentem rzeczywistym jest zarząd spółdzielni UWAGA: Klient może zaznaczyć na formularzu tylko jedno z oświadczeń. Typy im odpowiadające wzajemnie wykluczają. |
BENEFICJENT KIEROWNICTWO | 8 |
Istnieje osoba fizyczna, inna niż zarząd spółdzielni, która wywiera wpływ lub sprawuje kontrolę nad spółdzielnią | BENFICJENT INNY | 2 | |
GOVERNMENT – Organ administracji rządowej, organ samorządu terytorialnego lub organ egzekucyjny (gminy, urzędy) | WSKAZÓWKA: Informacje o beneficjentach nie są zbierane. | ||
SELF_GOVERNMENTAL_UNIT – Jednostka samorządu terytorialnego | WSKAZÓWKA: Informacje o beneficjentach nie są zbierane. | ||
SELF_GOVERNMENTAL_CULTURAL_INSTITUTION – Samorządowa instytucja kultury | WSKAZÓWKA: Informacje o beneficjentach nie są zbierane. | ||
STATE_OWNED_ENTERPRISE – Przedsiębiorstwo państwowe | WSKAZÓWKA: Informacje o beneficjentach nie są zbierane. | ||
STATE_CULTURAL_INSTITUTION – Państwowa instytucja kultury | WSKAZÓWKA: Informacje o beneficjentach nie są zbierane. | ||
PUBLIC_SECTOR_INSTITUTION – Instytucja gospodarki budżetowej | WSKAZÓWKA: Informacje o beneficjentach nie są zbierane. | ||
RESEARCH_INSTITUTION – Instytut badawczy | WSKAZÓWKA: Informacje o beneficjentach nie są zbierane. | ||
CHURCH – Kościelna osoba prawna lub jej jednostka organizacyjna | Beneficjentem jest organ osoby prawnej (np. dla parafii beneficentem rzeczywistym jest proboszcz) UWAGA: Klient może zaznaczyć na formularzu tylko jedno z oświadczeń. Typy im odpowiadające wzajemnie wykluczają. |
BENEFICJENT KIEROWNICTWO | 8 |
Istnieje inna osoba fizyczna, inna niż organ kościelnej osoby prawnej, która wywiera wpływ lub sprawuje nad nią kontrolę | BENFICJENT INNY | 2 | |
FOREIGN – Przedsiębiorca zagraniczny | Istnieje osoba fizyczna, która ma pośrednio lub bezpośrednio więcej niż 25% udziałów/głosów UWAGA: Klient może zaznaczyć na formularzu tylko jedno z oświadczeń. Typy im odpowiadające wzajemnie wykluczają. |
BENEFICJENT UDZIAŁOWIEC | 2 |
Istnieje osoba fizyczna sprawująca kontrolę poprzez jednostkę dominują według przepisów o rachunkowości | BENEFICJENT KONTROLA | 8 | |
Osoby zajmujące wyższe stanowisko kierownicze w firmie (zarząd lub rada nadzorcza) | BENEFICJENT KIEROWNICTWO | 8 |
Partner zakładający nowe konto w Systemie zobowiązany jest wykonać Przelew weryfikacyjny. Po jego wykonaniu AP przeprowadza ocenę wiarygodności, prawidłowości danych Partnera oraz ocenę AML.
Kiedy Partner zaktualizuje dane, AP oczekuje wykonania Przelewu weryfikacyjnego – wyłącznie w przypadku wrażliwych i kluczowych danych.
Nazwa pola
UWAGA: ServiceUrl jest traktowany jako taki sam, jeśli:
a. różni się tylko protokołem (http/https)
b. w trakcie integracji z Partnerem został potwierdzony proces migracji adresu Serwisu z/do subdomeny CMSa Integratora (np. przykladowastrona.integrator.pl = przykladowastrona.pl)
c. została pominięta lub dodana składowa „www" adresu sklepu (np. przykladowastrona.pl = www. przykladowastrona.pl)
UWAGA: NIP, KRS oraz forma prawna są danymi, których nie można edytować. W przypadku konieczności zmiany tych danych należy ponownie zarejestrować Serwis.
Link do Przelewu weryfikacyjnego oraz wszystkie jego notyfikacje ITN, zawierają wymieniony podczas integracji dedykowany dla tego procesu ServiceID oraz OrderID zbudowany według schematu:
OrderID = ActivationServiceID_UID
gdzie:
WSKAZÓWKA: Parametry ITN dedykowane do procesu weryfikacji opisane są w ramach części Dodatkowe pola w komunikacie ITN/IPN transakcji wejściowej. W szczególności mowa tutaj o polach verificationStatus oraz verificationStatusReasons.
WSKAZÓWKA: Możliwe przejścia statusów płatności, weryfikacji oraz ich szczegółów zawierają części: Szczegółowy opis zmiany statusu weryfikacji – dla transakcji zakończonej poprawnie (wynik pozytywny lub negatywny), Szczegółowy opis zmiany statusu weryfikacji – dla transakcji nie zakończonej poprawnie.
Niniejszy dokument opisuje zasady związane z wymianą komunikatów pomiędzy AP, a Platformą Marketplace Partnera w ramach funkcjonalności dodawania Punktów Rozliczeń (technologia REST).
Partner powinien na swojej Platformie Marketplace udostępnić przycisk, którego kliknięcie przez Klienta spowoduje wywołanie w systemie AP metody generującej aktualny link do formularza pozwalającego na rejestrację Punktu Rozliczeń.
Po otrzymaniu wspomnianego linku Platforma Marketplace powinna wykonać automatyczne przekierowanie na formularz znajdujący się pod tym linkiem.
Wypełnienie i wysłanie danych Sklepu przez Klienta spowoduje rejestrację Punktu Rozliczeń w systemie AP oraz zwrócenie strony z podziękowaniem oraz linkiem do weryfikacji online, celem sprawdzenia poprawności wprowadzonych danych. Link weryfikacyjny jest wysyłany również na adres email podany przez Klienta na formularzu.
Po wykonaniu płatności weryfikacyjnej przez Klienta oraz otrzymaniu przez AP niezbędnych danych z Kanału Płatności, Punkt Rozliczeń otrzymuje końcowy status weryfikacji. Jego pozytywna wartość powoduje aktywację Punktu Rozliczeń i gotowość do wykonywania płatności przy jego udziale, a do Klienta zostanie wysłana wiadomość z regulaminem zaakceptowanym przez niego na formularzu rejestracyjnym.
WAŻNE! Produkcyjna wersja usługi znajduje się za firewallem. Dostęp do niej jest przydzielany dla skończonej i zdefiniowanej w trakcie integracji puli IP. Nie dotyczy to środowiska testowego.
WAŻNE! Dla jednej Platformy Marketplace na danym środowisku (test/produkcja) przewidziany jest jeden identyfikator Platformy (MarketplaceID) oraz klucz współdzielony dla usługi rejestracji.
WAŻNE! Niedopuszczalne jest udostępnianie w jakiejkolwiek formie (również w kodzie aplikacji uruchamianej na serwerze osób trzecich) danych autoryzacyjnych do usługi tj. MarketplaceID i klucza współdzielonego.
Dane | Przekazywane przez AP do Partnera | Przekazywane przez Partnera do AP |
---|---|---|
Adres REST | ✔ | ✖ |
MarketplaceID | ✔ | ✖ |
Metoda : link | ✔ | ✖ |
ServiceID (dla usługi Przelewu weryfikacyjnego) | ✔ | ✖ |
Klucz współdzielony dla usługi rejestracji Punktu Rozliczeń | ✔ | ✖ |
Klucz współdzielony dla usługi Przelewu weryfikacyjnego | ✔ | ✖ |
Mechanizm funkcji skrótu | ✔ | ✖ |
Adres testowego formularza | ✔ | ✖ |
Adres IP, z którego wysyłane są ITNy informujące o statusie weryfikacji Punktu Rozliczeń | ✔ | ✖ |
Adres do panelu administracyjnego dla Partnera (opcja) | ✔ | ✖ |
Login | ✔ | ✖ |
Hasło | ✔ | ✖ |
Adres ITN po przelewie weryfikacyjnym | ✖ | ✔ |
Adres powrotu po przelewie weryfikacyjnym | ✖ | ✔ |
Dane | Przekazywane przez AP do Partnera | Przekazywane przez Partnera do AP |
---|---|---|
Adres REST | ✖ | ✖ |
MarketplaceID | ✔ | ✖ |
Metoda : link | ✔ | ✖ |
ServiceID (dla usługi Przelewu weryfikacyjnego) | ✔ | ✖ |
Klucz współdzielony dla usługi rejestracji Punktu Rozliczeń | ✔ | ✖ |
Klucz współdzielony dla usługi Przelewu weryfikacyjnego | ✔ | ✖ |
Mechanizm funkcji skrótu | ✔ | ✖ |
Adres IP, z którego wysyłane są ITNy informujące o statusie weryfikacji Punktu Rozliczeń | ✔ | ✖ |
Adres do panelu administracyjnego dla Partnera (opcja) | ✔ | ✖ |
Login | ✔ | ✖ |
Hasło | ✔ | ✖ |
Adres IP, z którego następuje połączenie do WS | ✖ | ✔ |
Adres ITN po przelewie weryfikacyjnym | ✖ | ✔ |
Adres powrotu po przelewie weryfikacyjnym | ✖ | ✔ |
Wymiana komunikatów pomiędzy AP, a Serwisem Partnera realizujących funkcjonalności dodawania Punktów Rozliczeń odbywa się za pomocą technologii REST. Wszystkie parametry w komunikatach przekazywane są metodą POST. Protokół rozróżnia wielkość liter, zarówno w nazwach, jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
Po kliknięciu przez klienta przycisku rejestracji na Platformie Marketplace, na adres https://adres_usługi/api/marketplace/link powinno zostać wysłane odpytanie o aktualny link do formularza rejestracyjnego. Komunikat powinien zostać wysłany z nagłówkiem Content-Type: application/json oraz parametrami wskazanymi w tabeli poniżej:
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | marketplaceID | TAK | string | Stały unikalny identyfikator Marketplace nadany przez System płatności online. |
2 | messageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Wartość pola musi być unikalna dla każdego odpytania o link do formularza. |
nd. | hash | TAK | string{64} | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Parametry w łańcuchu są oddzielane od siebie znakiem "|". Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz przekazany podczas integracji. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash=SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
Przykład wyliczenia Hash dla poniższego komunikatu:
{
"marketplaceID":1,
"messageID":"12345678901234567890123456789000",
"hash":"wartosc_hash"
}
gdzie
Hash=SHA256(1|12345678901234567890123456789000|klucz_wspoldzielony) = wartosc_hash
W odpowiedzi na powyższe żądanie zwracany jest (w tej samej sesji HTTP) komunikat zawierający link do formularza lub w przypadku błędu jego opis wraz ze wskazaniem pola, którego dotyczy.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | typ | opis |
---|---|---|---|
1 | link | string | Wygenerowany link do formularza rejestracyjnego. |
2 | messageID | string{32} | Pseudolosowy identyfikator komunikatu. Jego wartość odpowiada wartości otrzymanej w komunikatu wysłanego z Platformy Marketplace. |
nd. | hash | string{64} | Wartość funkcji skrótu, służąca do autentykacji komunikatu, obliczana jest od łańcucha zawierającego sklejone pola komunikatu (konkatenacja pól). Sklejane są wyłącznie wartości pól, bez nazw parametrów. Kolejność sklejania pól jest zgodna z kolejnością ich występowania na liście parametrów. Do powstałego w powyższy sposób łańcucha doklejany jest na jego końcu klucz, współdzielony między System Platformy i System płatności online. Z tak powstałego łańcucha obliczana jest wartość funkcji skrótu SHA256 i stanowi ona wartość pola Hash komunikatu. Hash = SHA256(wartości_pól_komunikatu + klucz_współdzielony) |
nd. | errors | - | Lista błędów w komunikacie wysłanym z Platformy Marketplace. |
nd. | errors -> field | string | Nazwa pola, którego dotyczy błąd. |
nd. | errors -> error | string | Opis błędu. |
UWAGA: Po otrzymaniu przez Platformę Marketplace linku do formularza powinno zostać wykonane automatyczne przekierowanie na tenże formularz.
UWAGA: Każda próba rejestracji powinna być poprzedzona pobraniem linka do formularza.
UWAGA: Link do formularza jest aktywny domyślnie przez 24 godziny (wartość może być zmieniona na prośbę Partnera) od jego wygenerowania. Po upłynięciu tego okresu wyświetlenia formularza rejestracyjnego nie jest możliwe.
a) Poprawnie przetworzony request.
REQUEST
{
"marketplaceID":1,
"messageID":"12345678901234567890123456789000",
"hash":"437c941b5c88b9d0bfa58a1d073d724f55cfed794c1cf9648ba2340c3dcc803f"
}
RESPONSE
{
"link": "https://adres_usługi/marketplace/ee0e88d81c11b110c1a35a740996453d745dcde0be449686be6ec0777a02be5d",
"messageID": "12345678901234567890123456789000",
"hash": "d01e20cc8ab2c3fbe907e805329d915a20058e96f1d6d91a863361444cbd6379"
}
b) MessageID został był już w użyciu, nie jest unikatowy.
REQUEST
{
"marketplaceID":1,
"messageID":"12345678901234567890123456789012",
"hash":"e43ff5f4b3121d1fd267bd66aaf446b079c28292f2a966e23eb1e8a8c0aaf81a"
}
RESPONSE
{
"errors": [
{
"field": "messageID",
"error": "messageId not unique"
}
]
}
c) Unikatowe MessageID musi mieć 32 znaki.
REQUEST
{
"marketplaceID":1,
"messageID":"1234567890123456789012345678900022222",
"hash":"dc8d14b5e3491a700e7f2479f8c196cc0db76f41b2b2ffac1f042a6cad1e5914"
}
RESPONSE
{
"errors": [
{
"field": "messageID",
"error": "size must be between 32 and 32"
}
]
}
d) Podany hash jest niepoprawny.
REQUEST
{
"marketplaceID":1,
"messageID":"12345678901234567890123456789001",
"hash":"dc8d14b5e3491a700e7f2479f8c196cc0db76f41b2b2ffac1f042a6cad1eaaaa"
}
RESPONSE
{
"errors": [
{
"field": "hash",
"error": "Invalid hash"
}
]
}
Obsługa preautoryzacji kartowej dostarcza funkcjonalność blokowania środków na karcie Klienta na pewien (np. z góry ustalony w trakcie zakładania blokady) czas, a następnie dokonywania obciążenia. Szczególnym przypadkiem jest sytuacja, w której blokada jest zdejmowana bez potrącania jakiejkolwiek kwoty (np. usługa na rzecz klienta nie została wykonana).
Wszystkie te operacje (blokowanie środków, obciążanie, wycofywanie blokady) powinny być zlecone przez API Systemu Płatności Autopay. Jeśli w czasie ważności transakcji zakładającej blokadę, nie nastąpi zlecenie obciążenia karty, System dokonuje zwolnienia środków, powiadamiając o tym fakcie standardowym komunikatem o zmianie statusu transakcji (ITN).
Również pozostałe operacje (skuteczne obciążenie, założenie blokady na karcie oraz jej późniejsze obciążenia) skutkują wysyłką komunikatu ITN. Komunikat ten jest jedyną wiążącą informacją o zmianie statusu transakcji oraz (stosowany wraz z usługą transactionStatus; patrz część Odpytanie o status transakcji), pomaga obsłużyć transakcję nie zrywając sesji z użytkownikiem (nawet w przypadku różnych problemów sieciowych). Synchroniczne potwierdzenia operacji (węzeł confirmation, służą jedynie do prezentowania wstępnej informacji o zleceniu).
Można wyróżnić 3 podstawowe sposoby zakładania blokady na karcie:
a) Zakładanie blokady podczas autoryzacji płatności jednorazowej (Patrz Schemat A dla Preautoryzacji). Klient wypełnia formatkę kartową, po wystartowaniu transakcji, w której Partner wskazuje w parametrach startowych:
- kartowy kanał płatności (GatewayID=1500) oraz
- chęć zabezpieczenia środków, zamiast obciążenia (Hold=true)
b) Zakładanie blokady podczas inicjowania płatności automatycznej (zapisywania karty w Serwisie lub Aplikacji Mobilnej) (Patrz Schemat B dla Preautoryzacji).
WSKAZÓWKA: Cały cykl i wszystkie zdarzenia płatności automatycznej zgodnie z dokumentacją, zmodyfikowany o moment faktycznego obciążenia karty oraz założenia płatności automatycznej – w modelu preautoryzacji to operacja transactionClear powoduje te zdarzenia.
Klient wypełnia formatkę kartową, po wystartowaniu transakcji, w której Partner wskazuje w parametrach startowych:
- kartowy kanał płatności (GatewayID=1503),
- fakt zaakceptowania regulaminu usługi płatności automatycznej dostarczonego przez AP (RecurringAcceptanceState=ACCEPTED, lub po ustaleniach biznesowych wartości PROMPT/FORCE)
- wybór inicjalizacji płatności automatycznej wraz z potencjalnym obciążeniem karty (RecurringAction=INIT_WITH_PAYMENT)
- chęć zabezpieczenia środków, zamiast obciążenia (Hold=true)
c) Zakładanie blokady z wykorzystaniem wcześniej zapisanej karty (Patrz Schemat C dla Preautoryzacji).
WSKAZÓWKA: Cały cykl i wszystkie zdarzenia płatności automatycznej zgodnie z dokumentacją, zmodyfikowany o moment faktycznego obciążenia karty oraz założenia płatności automatycznej – w modelu preautoryzacji to operacja transactionClear powoduje te zdarzenia.
Klient nie wypełnia formatki kartowej, następuje natomiast backendowa (bez przekierowania) przedtransakcja, w której Partner wskazuje w parametrach startowych:
- kartowy kanał płatności (GatewayID=1503)
- wskazanie wcześniej dodanej karty (ClientHash pochodzący z RPAN)
- wybór metody płatności automatycznej (RecurringAction=MANUAL)
- chęć zabezpieczenia środków, zamiast obciążenia (Hold=true)
Każda z tych metod zakładania blokady skutkuje komunikatem ITN, którego status wskazuje wynik autoryzacji transakcji. Poza standardowymi statusami, w wypadku blokowania środków, System może dostarczyć w ITN status paymentStatus=ON_HOLD, który stanowi potwierdzenie założenia blokady środków na karcie Klienta. Ponadto ITN będzie standardowo zawierać globalny identyfikator transakcji (remoteID), który będzie niezbędny do późniejszego obciążenia założonej blokady.
Po założeniu blokady może nastąpić zlecenie przez Partnera obciążenia wcześniej zautoryzowanej karty (Patrz Schemat D dla Preautoryzacji). W tym celu należy wywołać dedykowaną usługę transactionClear (https://{host_bramki}/webapi/transactionClear) z odpowiednimi parametrami. Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID), wartość pola musi być unikalna i wskazywać konkretne zlecenie wypłaty w Serwisie Partnera. |
3 | RemoteID | TAK | string{1,20} | Alfanumeryczny identyfikator transakcji nadany przez System oraz przekazywany do Partnera w komunikacie ITN transakcji wejściowej. Jego podanie spowoduje obciążenie karty zautoryzowanej w transakcji o wskazanym RemoteID, jeśli jest w stanie blokady (status ON_HOLD). |
4 | Amount | TAK | amount | Kwota obciążenia (nie może być większa niż kwota blokady); jako separator dziesiętny używana jest kropka - '.' Format: 0.00. |
5 | Products | TAK | string{1,10000} | Informacje o produktach wchodzących w skład transakcji, przekazywany w postaci zakodowanego protokołem transportowym Base64 XMLa. Struktura musi zawierać wszystkie podane w preautoryzacji produkty, jednak może być uproszczona (w celu identyfikacji produktu, którego kwota ma być zaktualizowana, brane będą pod uwagę jedynie productID oraz idBalancePoint, a nową kwotę należy podać w subAmount). /Wymagane dla wielu produktów podanych w preautoryzacji. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
Do poprawnego odpytania należy, wraz z przekazywanymi parametrami, przesłać zdefiniowany nagłówek HTTP o odpowiedniej treści. Dołączony nagłówek powinien nosić nazwę 'BmHeader' i posiadać następującą wartość 'pay-bm', w całości powinien prezentować się następująco 'BmHeader: pay-bm'. W przypadku poprawnego komunikatu zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, zawierający potwierdzenie wykonania operacji lub opis błędu.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<balancePayoff>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<remoteOutID>RemoteOutID</remoteOutID>
<hash>Hash</hash>
</balancePayoff>
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<balancePayoff>
<balancePointID>BalancePointID</balancePointID>
<messageID>MessageID</messageID>
<remoteOutID>RemoteOutID</remoteOutID>
<hash>Hash</hash>
</balancePayoff>
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,32} | Identyfikator Serwisu Partnera. Pochodzi z żądania metody. Wymagany dla confirmation=CONFIRMED. |
2 | messageID | TAK | string{1,20} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. Wymagany dla confirmation=CONFIRMED. |
3 | confirmation | TAK | string{1,100} | Status potwierdzenia przyjęcia zlecenia. Może przyjmować dwie wartości: - CONFIRMED – operacja powiodła się. UWAGA: Nie oznacza to wykonania obciążenia! System asynchronicznie dostarczy ITN z paymentStatus=SUCCESS. - NOTCONFIRMED – operacja nie powiodła się. |
4 | reason | NIE | string{1,1000} | Wyjaśnienie szczegółów przetwarzania żądania. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. Wymagany dla confirmation=CONFIRMED. |
Po założeniu blokady może nastąpić zlecenie przez Partnera jej zwolnienia (bez potrącania jakichkolwiek środków) (Patrz Schemat E dla Preautoryzacji). Do tej operacji należy użyć usługi releaseHold (Patrz Anulowanie nieopłaconej transakcji). Po skutecznym zainicjowaniu zwolnienia blokady (poprawnej odpowiedzi na anulowanie transakcji), System asynchronicznie dostarczy ITN z paymentStatus=FAILURE oraz paymentStatusDetails=CANCELLED.
W przypadku bezczynności Partnera (po założeniu blokady) przez ustalony czas ważności transakcji, następuje jej zwolnienie przez System (bez potrącania jakichkolwiek środków) (Patrz Schemat F dla Preautoryzacji). System dokona anulowania transakcji, zdjęcia blokady oraz dostarczy ITN z paymentStatus=FAILURE oraz paymentStatusDetails=CANCELLED.
Przedtransakcja rozszerza standardowy model rozpoczęcia transakcji o obsługę określonych potrzeb:
zamówienia linku do płatności na podstawie przesłanych parametrów
obciążenia Klienta (jeśli nie jest wymagana dodatkowa autoryzacja dokonana przez Klienta)
zweryfikowania poprawności linku płatności, zanim Klient zostanie przekierowany do Systemu – wywołanie powoduje walidację parametrów i konfiguracji Systemu
skrócenia linka płatności – zamiast kilku/kilkunastu parametrów, link zostaje skrócony do dwóch identyfikatorów
ukrycia danych wrażliwych parametrów linku transakcji – przedtransakcja odbywa się backendowo, a link do kontynuacji transakcji nie zawiera danych wrażliwych, a jedynie identyfikatory kontynuacji
użycia SDK mobilnego w wariancie mieszanym – start transakcji wykonuje backend aplikacji mobilnej, a nie samo SDK z użyciem tokena transakcyjnego
WSKAZÓWKA: Szczegóły na temat wariantów SDK w Dokumentacji SDK.
Szczególne przypadki użycia Przedtransakcji, to obciążenia:
BLIK 0
Aby użyć tej usługi należy podać GatewayID=509 oraz przekazać
kod autoryzacji transakcji w parametrze AuthorizationCode.
BLIK 0 OneClick
Obciążenia „Płatności automatycznej"
Aby użyć tej usługi należy podać jeden z GatewayID o
gatewayType="Płatność automatyczna" oraz niezbędne parametry.
Autoryzacje poprzez portfele Visa
Aby użyć tej usługi należy podać GatewayID=1511 oraz przekazać
zakodowany token w parametrze PaymentToken. W przypadku braku
tokena, autoryzacja odbędzie się na stronie Systemu.
Autoryzacje poprzez portfele Google Pay
UWAGA: Usługa umożliwia obciążenie karty zapisanej w portfelu Klienta bez przekierowania do Systemu. Często następuje wymuszenie dodatkowej autoryzacji w postaci 3DS (domyślne zachowanie środowiska testowego, które można przekonfigurować).
W modelu Whitelabel należy zintegrować się zgodnie z opisem, a następnie podać GatewayID=1512 oraz zakodowany token w parametrze PaymentToken. W przypadku braku tokena (lub model inny, niż Whitelabel) wystarczy podać GatewayID=1512 - autoryzacja odbędzie się na stronie Systemu.
Autoryzacje poprzez portfele Apple Pay
Aby użyć tej usługi należy podać GatewayID=1513. Autoryzacja
odbędzie się na stronie Systemu.
Autoryzacja poprzez natywną formatkę SDK mobilnego
UWAGA: Usługa umożliwia obciążenie karty, której szczegóły podano na bezpiecznej formatce kartowej SDK, a sam start transakcji wykonuje backend aplikacji mobilnej.
Oprócz odpowiedniego GatewayID - 1500 dla płatności jednorazowej lub 1503 dla aktywacji płatności automatycznej (oraz innych parametrów) – należy podać uzyskany z SDK PaymentToken oraz parametr WalletType=SDK_NATIVE (opis w części Rozpoczęcie transakcji z dodatkowymi parametrami)
Obowiązkowym elementem w przypadku przedtransakcji jest przesłanie backendowo (używając np. cURL) standardowego komunikatu startu transakcji (patrz Rozpoczęcie transakcji), z nagłówkiem 'BmHeader' o wartości: 'pay-bm-continue-transaction-url':
Przykład nagłówka
'BmHeader: pay-bm-continue-transaction-url')
Dodatkowo zalecane jest przekazywanie parametru CustomerIP (do celów reklamacyjnych, sprawozdawczych).
Przykład startu Przedtransakcji (PHP)
$data = array(
'ServiceID' => '100047',
'OrderID' => ‘20161017143213’,
'Amount' => '1.00',
'Description' => 'test bramki',
'GatewayID' => '0',
'Currency' => 'PLN',
'CustomerEmail' => 'test@bramka.pl',
'CustomerIP' => '127.0.0.0',
'Title' => 'Test title',
'Hash' => 0c5ca136e8833e40efbf42a4da7c148c50bf99f8af26f5c9400681702bd72056
);
$fields = (is_array($data)) ? http_build_query($data) : $data;
$curl = curl_init('https://{host_bramki}/test_ecommerce');
curl_setopt($curl, CURLOPT_HTTPHEADER, array('BmHeader: pay-bm-continue-transaction-url'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
$curlResponse = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$response = curl_getinfo($curl);
curl_close($curl);
echo htmlspecialchars_decode($curlResponse);
W przypadku poprawnej walidacji parametrów (i konfiguracji) oraz potrzeby wykonania przez Klienta dodatkowej akcji (wybrania kanału płatności - jeśli podano GatewayID=0, wykonania/zatwierdzenia przelewu, podania kodu CVC/CVV, wykonania 3DS) – zostanie zwrócony XML z linkiem kontynuacji transakcji.
Przykład pliku z linkiem kontynuacji transakcji (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transaction>
<status>PENDING</status>
<redirecturl>
https://{host_bramki}/payment/continue/96VSD39Z6E/L6CGP5BH
</redirecturl>
<orderID>20180824105435</orderID>
<remoteID>96VSD39Z6E</remoteID>
<hash>
1c6eae2127f0c3f81fbed3b6372f128040729a4d4e562fb696c22e0db68dbbe1
</hash>
</transaction>
Obiekt transaction reprezentuje wpływ lub wypłatę środków z konta AP, np. zrealizowany zakup lub zwrot.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | status | TAK | string{1,32} | Status transakcji. W tym wypadku stała PENDING. |
2 | redirecturl | TAK | string{1,100} | Adres do kontynuacji transakcji rozpoczętej przez komunikat przedtransakcji. |
3 | orderID | TAK | string{1,32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
4 | remoteID | TAK | string{1,20} | Unikalny identyfikator transakcji nadany w Systemie AP. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez herwis. |
W przypadku niepoprawnej walidacji lub nieskutecznego obciążenia nie jest generowany link kontynuacji. Zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, informujący o statusie przetwarzania żądania.
Przykład statusu przetwarzania żądania (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transaction>
<orderID>OrderID</orderID>
<remoteID>RemoteID</remoteID>
<confirmation>ConfStatus</confirmation>
<reason>Reason</reason>
<blikAMList>
<blikAM>
<blikAMKey>Klucz1</blikAMKey>
<blikAMLabel>Etykieta1</blikAMLabel>
</blikAM>
<blikAM>
<blikAMKey>Klucz2</blikAMKey>
<blikAMLabel>Etykieta2</blikAMLabel>
</blikAM>
</blikAMList>
<paymentStatus>PaymentStatus</paymentStatus>
<hash>Hash</hash>
</transaction>
Parametry zwracane dla wyniku Przedtransakcji.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | orderID | TAK | string{1,32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. Wymagany dla confirmation=CONFIRMED. |
2 | remoteID | TAK | string{1,20} | Unikalny identyfikator transakcji nadany w Systemie AP. Wymagany dla confirmation=CONFIRMED. |
3 | confirmation | TAK | string{1,100} | Status potwierdzenia przyjęcia zlecenia. Może przyjmować dwie wartości: - CONFIRMED – operacja powiodła się. UWAGA: Nie oznacza obciążenia. - NOTCONFIRMED – operacja nie powiodła się. |
4 | reason | NIE | string{1,1000} | Wyjaśnienie przyczyny odrzucenia zlecenia (dla confirmation=NOTCONFIRMED), jeśli jest ona dostępna. |
5 | blikAMList | NIE | string{1,10000} | Lista dostępnych aplikacji mobilnych banków w opcji BLIK 0 OneClick (dla confirmation=NOTCONFIRMED oraz reason=ALIAS_NONUNIQUE). |
Format dla blikAMList:
|
||||
6 | paymentStatus | NIE | enum | Status autoryzacji transakcji, przyjmuje wartości: - PENDING – transakcja rozpoczęta - SUCCESS – poprawna autoryzacja transakcji - FAILURE – transakcja nie została zakończona poprawnie |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. Wymagany dla confirmation=CONFIRMED. |
W przypadku poprawnej walidacji parametrów (i konfiguracji) oraz braku potrzeby wykonania przez Klienta dodatkowej akcji – zwracane jest potwierdzenie zlecenia obciążenia.
Ma to miejsce w przypadkach, gdzie dane są wystarczające do wykonania obciążenia dla danego kanału płatności, na przykład: BLIK 0 bez wymaganego kodu BLIK (ani wskazania aliasu aplikacji mobilnej banku), płatność cykliczna, płatność Kartą OneClick bez wymaganego CVC/CVV/3DS.
Result
confirmation=CONFIRMED
Niepoprawna walidacja parametrów
W przypadku niepoprawnej walidacji parametrów (i konfiguracji) – zwracany jest błąd.
Result
confirmation=NOTCONFIRMED
Błąd może być również zwrócony w przypadku synchronicznej odpowiedzi z Kanału Płatności (np. błąd specyficzny dla próby inicjalizacji płatności automatycznej BLIK, tj. reason= RECURRENCY_NOT_SUPPORTED).
UWAGA: Błąd może być również zwrócony w przypadku synchronicznej odpowiedzi z Kanału Płatności (np. błąd specyficzny dla próby inicjalizacji płatności automatycznej BLIK, tj. reason=RECURRENCY_NOT_SUPPORTED). Innym znanym przypadkiem jest też błąd walidacji adresu podanego w parametrze startowym CustomerEmail (INVALID_EMAIL).
Status potwierdzenia przyjęcia zlecenia (confirmation) | Status Płatności (paymentStatus) | Opis zachowania Partnera |
---|---|---|
CONFIRMED | SUCCESS | Przyjęto transakcję do przetwarzania, status poprawny. Nie należy ponawiać próby obciążenia. Można wyświetlić potwierdzenie płatności, ale procesy biznesowe powinny być wstrzymane do potwierdzenia w ITN (zostanie ono wysłane po otrzymaniu przez AP poprawnego statusu transakcji z Kanału Płatności). |
CONFIRMED | FAILURE | Przyjęto transakcję do przetwarzania, status niepoprawny. Można ponowić próbę obciążenia z tym samym OrderID. Po otrzymaniu przez AP statusu transakcji z Kanału Płatności, wysłany zostanie komunikat ITN. UWAGA: Nie można ponawiać próby obciążenia z tym samym OrderID, jeśli w trakcie integracji uzgodniony zostanie model blokowania przez System startów transakcji z tym samym OrderID. Domyślnie zachowanie przez Partnera unikalności OrderID jest tylko zaleceniem i nie podlega weryfikacji w starcie transakcji. |
CONFIRMED | PENDING | Przyjęto transakcję do przetwarzania, ale nieznany jest jeszcze jej status. Nie należy ponawiać próby obciążenia. Dalsza obsługa, jak w przypadku Timeout. |
NOTCONFIRMED | - | Nie zlecono transakcji (przyczyna wskazana w węźle reason). Można ponowić próbę obciążenia z tym samym OrderID. Komunikat ITN nie powinien nigdy być wysłany. |
Timeout (lub inna odpowiedź, jak niepoprawna struktura, brak wymaganych pól, inny status potwierdzenia) | - | Należy poczekać na ITN do terminu ważności transakcji (w tym celu zaleca się stosowanie krótkiego czasu ważności, np. 15 min), informując Klienta o wyniku w ramach odrębnego procesu (mail/sms). Po tym czasie zaleca się odpytać o status transakcji (transactionStatus). Jeśli metoda zwróci brak zarejestrowanej transakcji (lub same statusy płatności FAILURE), można ponowić zlecenie obciążenia z takim samym OrderID. Alternatywnie można spróbować unieważnić transakcję, przyśpieszając tym samym proces uzyskiwania ostatecznego statusu transakcji i ew. proces ponowienia komunikatu startu transakcji. Należy w tym celu użyć usługi anulowania transakcji (transactionCancel) oraz potwierdzić jej działanie poprzez odpytanie o status transakcji (jak opisano wyżej). |
Szybki Przelew to forma płatności, która wymaga od Klienta samodzielnego przepisania danych do przelewu dostarczanych przez System. Jakiego typu jest dany Kanał płatności, mówi parametr gatewayType w odpowiedzi na wywołanie usługi „Odpytywanie o listę aktualnie dostępnych Kanałów Płatności". Dane do przelewu mogą być Klientowi wyświetlone:
na stronie AP (realizacja transakcji w oparciu o standardowy model startu transakcji opisany w części Rozpoczęcie transakcji)
w serwisie Partnera (realizację transakcji bez przekierowania Klienta na stronę AP opisano poniżej)
Dla poprawnego nadania komunikatu należy przesłać backendowo (np. cURLem) standardowy komunikat startu transakcji, z nagłówkiem 'BmHeader' o wartości: 'pay-bm' (w całości nagłówek powinien prezentować się następująco 'BmHeader: pay-bm'). W przypadku błędnego zdefiniowania nagłówka lub jego braku, komunikat zostanie błędnie odczytany. Dodatkowo zalecane jest przekazywanie parametru CustomerIP zgodnie z opisem w punkcie IP użytkownika (potrzebne do procesów reklamacyjnych, sprawozdawczych) oraz wymagane jest przekazanie niezerowego parametru GatewayID (o gatewayType „Szybki Przelew").
Implementacja startu transakcji w tle (PHP)
$data = array(
'ServiceID' => '100047',
'OrderID' => '20150723144517',
'Amount' => '1.00',
'Description' => 'test bramki',
'GatewayID' => '71',
'Currency' => 'PLN',
'CustomerEmail' => 'test@bramka.pl',
'CustomerIP' => '127.0.0.0',
'Title' => 'Test title',
'ValidityTime' => '2016-12-19 09:40:32',
'LinkValidityTime' => '2016-07-20 10:43:50',
'Hash' => 'e627d0b17a14d2faee669cad64e3ef11a6da77332cb022bb4b8e4a376076daaa'
);
$fields = (is_array($data)) ? http_build_query($data) : $data;
$curl = curl_init('https://{host_bramki}/test_ecommerce');
curl_setopt($curl, CURLOPT_HTTPHEADER, array('BmHeader: pay-bm'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
$curlResponse = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$response = curl_getinfo($curl);
curl_close($curl);
echo htmlspecialchars_decode($curlResponse);
W przypadku płatności tego typu, System generuje komplet danych potrzebnych do wykonania wewnątrzbankowego (a więc szybkiego) przelewu na rachunek bankowy AP. Dane te umieszczane są w odpowiedzi na start transakcji, w dokumencie xml.
Odpowiedź systemu płatności na start transakcji (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transaction>
<receiverNRB>47 1050 1764 1000 0023 2741 0516</receiverNRB>
<receiverName>Autopay</receiverName>
<receiverAddress>81-718 Sopot, ul. Powstańców Warszawy 6</receiverAddress>
<orderID>9IMYEH2AV3</orderID>
<amount>1.00</amount>
<currency>PLN</currency>
<title>9IMYEH2AV3 - weryfikacja rachunku</title>
<remoteID>9IMYEH2AV3</remoteID>
<bankHref>https://ssl.bsk.com.pl/bskonl/login.html</bankHref>
<hash> fe685d5e1ce904d059eb9b7532f9e06a64c34c1ea9fcf29b62afefdb7aad7b75 </hash>
</transaction>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | receiverNRB | TAK | string{32} | Numer rachunku odbiorcy przelewu (AP). |
2 | receiverName | TAK | string{1,100} | Nazwa odbiorcy przelewu (AP). |
3 | receiverAddress | TAK | string{1,100} | Dane adresowe odbiorcy przelewu (AP). |
5 | orderID | TAK | string{1,32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
6 | amount | TAK | amount | Kwota transakcji. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed przecinkiem i 2 po przecinku. UWAGA: Dopuszczalna wartość pojedynczej Transakcji w Systemie produkcyjnym wynosi min. 0.01 PLN, max. 100000.00 PLN (lub do wysokości indywidualnego limitu pojedynczej transakcji w Banku dla przelewu wewnątrzbankowego). |
7 | currency | TAK | string{1,3} | Waluta transakcji. |
8 | title | TAK | string{1,140} | Pełny tytuł przelewu (ID wraz z doklejonym polem Description ze startu transakcji). |
9 | remoteID | TAK | string{1,20} | Unikalny identyfikator przelewu nadany w Systemie AP. |
10 | bankHref | TAK | string{1,100} | Adres logowania w systemie bankowości internetowej, który można wykorzystać do stworzenia przycisku „Przejdź do banku". |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
UWAGA: Powyższe informacje należy wykorzystać do wyświetlenia danych przelewowych oraz przekierowania użytkownika do strony logowania banku.
Jest to rozwiązanie dedykowane dla płatności BLIK, pozwalające zrealizować płatność bez podawania kodu BLIK (oraz bez konieczności opuszczania Serwisu). Jej skuteczne zainicjowanie w Systemie powoduje automatyczne uruchomienie/wybudzenie aplikacji mobilnej banku i zaprezentowanie transakcji do potwierdzenia Użytkownikowi.
Potencjalne korzyści:
udostępnienie pierwszej wygodnej i bezpiecznej metody płatności w mCommerce niewymagającej podania numeru karty otwiera ten segment na nowych klientów,
lepsze doświadczenie zakupowe Klienta - płaci szybciej i wygodniej,
częstotliwość zakupów i wartość klienta w czasie – Klienci chętniej i częściej kupują w tych sklepach, w których proces zakupowy jest wygodniejszy,
współczynnik konwersji – Serwis ma większą kontrolę nad procesem zakupu i płatności (Klient go nie opuszcza), eliminowane jest ryzyko utraty koszyka,
szybka decyzja transakcyjna - w krótkim czasie transakcja podlega autoryzacji, odmowie lub unieważnieniu,
Serwis ma możliwość objęcia analizą samego etapu dokonywania płatności.
Warunkiem udostępnienia Klientowi BLIK 0 OneClick jest zautoryzowanie w Serwisie (posiadanie konta oraz wcześniejsze do niego zalogowanie). Jeśli podczas wcześniej wykonywanej płatności BLIK, wraz z innymi informacjami o płatności, Serwis przesłał dedykowany Alias UID (opis parametrów BlikUIDKey oraz BlikUIDLabel w innej części dokumentu), a Klient potwierdzając płatność w aplikacji mobilnej zaznaczył, że chce zapamiętać sklep, to skutkiem było trwałe powiązanie (typowo na okres 2 lat) Klienta Serwisu z jego aplikacją, czyli zarejestrowanie Aliasu UID. Kolejne jego użycie będzie skutkować autoryzacją transakcji bez podania kodu.
Zaleca się, aby przy wyborze Kanału Płatności BLIK nie wymuszać podania kodu BLIK. Warto natomiast wyświetlić hiperłącze „Chcę wprowadzić kod BLIK" pod przyciskiem „Kupuję i płacę", aby umożliwić wpisanie kodu w pierwszej próbie (na wypadek, gdyby Klient chciał dokonać płatności BLIK z innej aplikacji mobilnej niż ta, w której wcześniej zapamiętał dany Serwis).
Serwis powinien wykonać Przedtransakcję, ze zwróceniem szczególnej uwagi na:
podanie parametru GatewayID = 509 – wskazanie kanału płatności BLIK,
podanie parametrów BlikUIDKey oraz BlikUIDLabel – wskazanie wymaganego w usłudze BLIK 0 OneClick Alias UID (identyfikatora użytkownika)
podanie parametru AuthorizationCode – jeśli Klient podał kod BLIK,
podanie parametru BlikAMKey – jeśli Klient wskazał etykietę aplikacji mobilnej banku spośród zaprezentowanej w Serwisie listy,
obsługę możliwych odpowiedzi na przedtransakcję, w tym obsłużyć „Odpowiedź – brak kontynuacji" oraz błędy specyficzne dla BLIK 0 OneClick:
a) błąd wielu aplikacji mobilnych banku (confirmation=NOTCONFIRMED oraz reason=ALIAS_NONUNIQUE) – wyświetlenie listy etykiet zwróconej w przedtransakcji listy aliasów (pary klucz + etykieta zawarte w strukturze BlikAMList), w celu pobrania wybranego klucza i podania go w parametrze BlikAMKey kolejnej próby przedtransakcji
b) błędy autoryzacji (confirmation=NOTCONFIRMED oraz reason o jednej z wartości: ALIAS_DECLINED, ALIAS_NOT_FOUND, WRONG_TICKET, TICKET_EXPIRED, TICKET_USED) – wyświetlenie pola Kod Blik, w celu pobrania go i podania w parametrze AuthorizationCode kolejnej próby przedtransakcji
System umożliwia realizację przelewów do Urzędu Skarbowego.
nazwa walidatora: US_TITLE_VALIDATOR
Title="/TI/______________/OKR/______/SFP/_______/TXT/_________{idtransremote_out}", gdzie:
a) TI: oznacza identyfikator podatnika (P dla PESEL lub N dla NIP lub R dla REGON). Wpływa na:
b) OKR: Rok, typ okresu i numer okresu, za który dokonywana jest płatność podatku
Numer okresu:
c) SFP: symbol formularza płatności:
symbol formularza płatności | mikrorachunek | Budowa NRB, na który należy przekazać kwotę | Okres, za który dokonywana jest płatność podatku |
---|---|---|---|
CIT | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
CIT-10Z | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
CIT-11R | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
CIT-6R | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
CIT-6AR | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
CIT-8 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
CIT-8A | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
CIT-8B | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
CIT-9R | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
CIT-CFC | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
KP | NIE | XX XXXX XXXX XXXX XXX0 0007 0000 | |
SD | NIE | XX XXXX XXXX XXXX XXX0 0007 0000 | Należności niezwiązane z okresem rozliczeniowym. |
SD-2 | NIE | XX XXXX XXXX XXXX XXX0 0007 0000 | Należności niezwiązane z okresem rozliczeniowym. |
PCC | NIE | XX XXXX XXXX XXXX XXX0 0007 0000 | Należności niezwiązane z okresem rozliczeniowym. |
PCC-2 | NIE | XX XXXX XXXX XXXX XXX0 0007 0000 | Należności niezwiązane z okresem rozliczeniowym. |
PCC-3 | NIE | XX XXXX XXXX XXXX XXX0 0007 0000 | Należności niezwiązane z okresem rozliczeniowym. |
PIT | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
PIT-28 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PIT-36 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PIT-36L | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PIT-37 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PIT-38 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PIT-39 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PIT-4 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | miesięczny |
PIT-4R | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PPL | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
PIT-7 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
PIT-8A | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | miesięczny |
PIT-8AR | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | roczny |
PIT-CFC | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
PU1 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
PPD | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
PPE | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
PPW | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
VAT-7 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | miesięczny |
VAT-7K | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | kwartalny. Od 1.10 te symbole będą zastąpione przez JPK_V7K oraz JPK_V7M. |
VAT-7D | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | kwartalny |
VAT-8 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | miesięczny |
VAT-9M | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | miesięczny |
VAT-10 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
VAT-12 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
VAT-14 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
VAP-1 | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
VAI | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
VAT-IM | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | |
VAT-Z | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
VAT-In | TAK | LK 1010 0071 222Y XXXX XXXX XXXX | Należności niezwiązane z okresem rozliczeniowym. |
d) TXT: dodatkowy tekst (max 29 znaków)
e) {idtransremote_out} → stała tytułu, która musi znajdować się na końcu ciągu. W to miejsce nie należy wklejać żadnych dodatkowych wartości.
Google Pay to błyskawiczny i intuicyjny system płatności od Google. Pozwala on użytkownikowi na przeprowadzenie procesu płatności bez wypełniania formularza kartowego, ponieważ dane karty są przechowywane bezpiecznie na serwerach firmy.
Google Pay to produkt umożliwiający uzyskanie zaszyfrowanych danych karty płatniczej klienta pozwalających na jej obciążenie.
W celu dokonania płatności przez Google Pay należy zapisać kartę płatniczą na swoim koncie Google, używając jakiejkolwiek platformy Google (np. kupując aplikacje w Google Play) lub bezpośrednio na stronie Google Pay.
UWAGA: Usługa wymaga wcześniejszego podpisania umowy z operatorem kartowym. Po szczegółowe informacje należy zwrócić się do Działu Biznesu Autopay.
Po kliknięciu „Zapłać przez Google Pay" na stronie sklepu pojawia się formularz Google Pay. Klient potwierdza w nim swoje konto Google i kartę, którą zamierza zapłacić (na tym etapie może też zmienić kartę na inną lub dodać nową). Skrypt przekazuje zakodowane dane karty w tle poprzez funkcję postMessage, następnie sklep musi je przyjąć i zakodować przez funkcję base64 i w końcu wysłać w parametrze PaymentToken wraz z pozostałymi parametrami (danymi transakcji).
Na swojej stronie sklep musi wywołać skrypt udostępniony przez Google z podmienionymi danymi Procesora płatności.
WSKAZÓWKA: Szczegóły w dokumentacji deweloperskiej Google.
Szczegółowy schemat komunikacji i wymiany danych
WSKAZÓWKA: Przykład wysłania zapytania dostępny jest na GitHubie Autopay.
a) Podmienione dane Procesora płatności:
const tokenizationSpecification = {
type: 'PAYMENT_GATEWAY',
parameters: {
'gateway': 'bluemedia',
'gatewayMerchantId': paybmApiResponse.acceptorId
}
};
b) Dane zwrócone przez System Płatności Online AP przekazane w obiekcie PaymentDataRequest.merchantInfo:
PaymentDataRequest.merchantInfo = {
merchantId: paybmApiResponse.merchantId,
merchantOrigin: paybmApiResponse.merchantOrigin,
merchantName: paybmApiResponse.merchantName,
authJwt: paybmApiResponse.authJwt,
};
WSKAZÓWKA: Kompletny przykład integracji z Google Pay dostępny jest na GitHubie Autopay.
Aby zachować integralność estetyczną stylistyki stosowanej na stronie www oraz w aplikacji mobilnej należy skorzystać ze wskazówek, które znajdują się w części Brand Guidelines dokumentacji deweloperskiej Google w przypadku opisów styli oraz przycisków dla stron www, oraz w części Tutorial dokumentacji deweloperskiej Google, gdzie znajdują się informacje potrzebne przy tworzeniu aplikacji mobilnej.
Implementacja Apple Pay na stronie sklepu.
Prośba o kontakt z produktem infrastruktury płatniczej - potrzebne wsparcie IT.
- certyfikat komunikacyjny – do tzw. przedstawienia się – merchant identifier
- certyfikat obciążający – payment processing certificate
Implementacja Web zgodnie z dokumentem Apple Pay on the Web
Przygotowanie 2 endpointów po stronie Partnera, w domenie zgłoszonej w Apple (z wykorzystaniem 2 certyfikatów od Apple):
- do rozpoczęcia sesji
- do obciążenia Klienta na podstawie tokena od Apple
WSKAZÓWKA: safari (przeglądarka Klienta) komunikuje się z endpointem zwracającym sesję (o którym mowa powyżej), po czym Apple odpytuje się o sesję Autopay.
UWAGA: Certyfikaty AP CSR dla acceptu i dla produkcji różnią się).
Po wykorzystaniu go w procesie rejestracji Apple dostarczyć AP certyfikat podpisany przez Apple i wysłać poprzez formularz Autopay
WSKAZÓWKA: Klient powinien podać kraj, miasto, domenę strony www, email osoby kontaktowej.
W ramach realizacji płatności na stronie Partnera, rozpocząć sesję API Apple.
Następnie zwrócić Autopay token w parametrze startowym PaymentToken.
UWAGA: Odszyfrowanie tokena to obowiązek AP.
Format payment tokena: wycinek obiektu w formacie json, który zwraca api ApplePay:
EncryptedPaymentData {
String version;
String data;
String signature;
Header header;
}
Header {
String ephemeralPublicKey;
String publicKeyHash;
String transactionId;
String applicationData;
}
UWAGA: Przy wysyłce ApplePayPaymentRequest, trzeba uzupełnić pole applicationData o wartość orderId zakodowaną Base64, zgodnie z opisem w dokumencie applicationData.
Partner który chciałby osadzić część startów transakcji bezpośrednio w na swoim serwisie / w swoim koszyku (w tzw. modelu WhiteLabel), może to zrobić integrując Widget Autopay.
Aktualnie Widget Autopay wspiera zbieranie danych kartowych (w ramach PaywayId 1500
/1503
) oraz starty Visa Mobile (PaywayId 1523
)
WAŻNE! Partner nie jest upoważniony do przechowywania danych Karty (w szczególności numeru karty, kodu zabezpieczającego CVC, CVV2), z wyjątkiem parametrów przekazywanych przy realizacji płatności automatycznych przez AP, opisanych w tej części.
WAŻNE! Serwis Partnera w którym wykorzystywana jest funkcjonalność Widget Autopay musi być szyfrowana a HTML IFRAME z widgetem musi być osadzony na adresie HTTPS z użyciem protokołu TLS.
WAŻNE! Partner zobowiązuje się przedłożyć AP, w formie elektronicznej,
następujące dokumenty:
a) jednorazowo (przed zawarciem Umowy): wypełniony kwestionariusz SAQ-A PCI (Section 2); Dokument zostanie dostarczony przez AP lub jest możliwy do pobrania na stronie: https://www.pcisecuritystandards.org
b) kwartalnie: wynik kwartalnego audytu PCI ASV obejmującego skanowanie zewnętrznych (publicznych) adresów IP/sieci/domen – protokołu IPv4 oraz/lub IPv6. Audyt taki musi zostać przeprowadzony przez jednego z autoryzowanych wykonawców, z listy dostępnej pod adresem:
https://www.pcisecuritystandards.org/assessors_and_solutions/approved_scanning_vendors
Do osadzenia i komunikowania się z widget'em Autopay należy użyć Autopay WidgetJS SDK.
W skrócie, sprowadzać się to będzie do osadzenia HTML IFRAME z widget'em oraz skonfigurowania JS SDK w celu obsługi komunikatów (event'ów) produkowanych podczas interakcji Cardholder'a z widget'em.
Komunikatem finalnym jest event ze statusem FORM_SUCCESS
zawierający paymentToken
niezbędny do backend'owego startu transakcji na API Systemu Płatności Online AP.
Poniżej przykłady, jak w prosty sposób, przy użyciu Autopay WidgetJS SDK, osadzić i skomunikować widget, zarówno dla kanałów kartowych jak i dla kanału VisaMobile.
Autopay WidgetJS SDK jest dostępny pod adresem widget-new/widget-communication.min.js
po umieszczeniu go w sekcji <head>
<script src="?r=quot;https://testcards.autopay.eu/widget-new/widget-communication.min.js"></script>
uzyskujemy dostęp do obiektu WidgetConnection
var widgetConfigObject = { ... };
var widget = new WidgetConnection(widgetConfigObject)
który po uzupełnieniu o konfigurację w formie obiektu JSON umożliwi pełną komunikację z API Autopay, a w rezultacie zapewni otrzymywanie event'u o statusie FORM_SUCCESS
z paymentToken'em
.
Przykład konfiguracji dla danych kartowych
Konfiguracja:
{ language: 'pl', amount: 1.23, currency: 'PLN', serviceId: 123456 }
Zwrócony PaymentToken:
{status: 'FORM_SUCCESS', message: 'ey...9', id: 'OGFlZTYyYTMtN2U2OS00MTU1LTgyNDctNmMwMGI2NjE5ZDQy'}
Przykład konfiguracji dla danych VisaMobile
Konfiguracja:
{ language: 'pl', amount: 1.23, currency: 'PLN', serviceId: 123456, merchantName: 'ShopName' }
Zwrócony PaymentToken:
{status: 'FORM_SUCCESS', message: 'ey...9', prefix: '48', phoneNumber: '666666666', id: 'OGFlZTYyYTMtN2U2OS00MTU1LTgyNDctNmMwMGI2NjE5ZDQy'}
Język
Determinuje wersję językową widget'u w jakiej zostanie zaprezentowany.
Nazwa pola: language
Format string
Wartości: domyślnie pl
, aktualnie wspierane są następujące języki: cs
, de
, el
, en
, es
, fr
, hr
, hu
, it
, pl
, ro
, se
, sk
, sl
, uk
Kwota transakacji
Kwota transakcji
Nazwa pola: amount
Format float
Wartości: kwota zapisana w formacie float, czyli np: "1,23 PLN" to 1.23
amount: 1.23, currency: 'PLN', serviceId: 123456, merchantName: 'ShopName'
Waluta transakacji
Waluta transakcji
Nazwa pola: currency
Format string
Wartości: domyślnie PLN
, inne waluty w formacie zgodnym z aktualną konfiguracją serwisu
Numer serwisu
Numer serwisu otrzymany od Autopay (zależny od środowiska developerskiego)
Nazwa pola: serviceId
Format integer
Wartości: zazwyczaj sześciocyfrowy
Typ rekurencji (tylko dla kart)
Wskazanie rodzaju inicjacji rekurencji (Tylko dla kanału 1503 związanego z inicjacją rekurencji)
Nazwa pola: recurringAction
Format string
Wartości: 'INIT_WITH_REFUND', 'INIT_WITH_PAYMENT'
Nazwa sklepu (tylko dla VisaMobile)
Nazwa wyświetlana użykownikowi w powiadomieniu VisaMobile w aplikacji mobilnej banku (Tylko dla kanału 1523 VisaMobile)
Nazwa pola: merchantName
Format string
Wartości: Nazwa sklepu
WAŻNE! Poniższy przykład kodu HTML powstał gównie w celach poglądowych.
Aby go faktycznie uruchomić na swoim lokalnym komputerze, poniższy plik HTML musi zostać umieszczony pod jakąś lokalną domeną (dowolną, może być test.local
).
Ten HTML nie może być odpalany w przeglądarce w formie lokalnego pliku ponieważ eventyJS wymieniane pomiędzy IFRAME a stroną są weryfikowane pod kątem zgodności domeny (a wieć jakaś domena musi być obecna).
Poniższa strona ma za zadanie imitować Front Merchanta, pokazując jakie elementy należy zaimplementować aby dokonać integracji z Widget'em Autopay.
W przeglądarce poniższa, przykładowa strona składa się z trzech sekcji:
PayButon
spięty z SDK JS sterujący uruchomieniem procesu w widget'cie (w tym przykładzie przycisk uaktywnia się dopiero, gdy otrzymuje komunikat o poprawnej walidacji i uzyskaniu kompletu danych potrzebnych do wystartowania procesu)Kiedy zostanie wybrany kanał kartowy (payway: 1500 lub 1503), wczyta się dedykowany widok formatki kartowej (oparty o HTML IFRAME). W momencie wprowadzenia w widgecie pełnych, prawidłowych danych kartowych, (dzięki eventom walidacyjnym) nastąpi uaktywnienie się przycisku "Zapłać" na Froncie Merchanta.
Podpowiedź: Jak widać w przykładzie w modelu WhiteLabel jest również możliwa obsługa kanału VisaMobile. Implementacja/osadzenie są analogiczne do widgeta kartowego dlatego poniższy kod zawiera już oba przypadki.
Walidacja i skompletowanie danych
W momencie wpisywania danych karty Autopay Widget JS SDK otrzymuje od widget'u event'y VALIDITY_STATUS
z wartoscią valid: false
Gdy uzyskamy pełne dane karty, ostatnim event'em będzie VALIDITY_STATUS
z wartością valid: true
{status: 'VALIDITY_STATUS', message: null, valid: true, id: 'M2Zl...mU2'}
O ten event można oprzeć uaktywnianie przycisku PayButton
Podpowiedź: Na środowisku testowym płatności kartowe są oparte o mock 3ds i mock autoryzacyjny. Poszczególnym scenariuszom odpowiadają dedykowane numery kart testowych. Pełna lista przypadków testowych znajduje się w oddzielnym załączniku.
Ekran DCC
W przypadku gdy dany scenariusz i karta spełnia warunki uzyskania oferty DCC pojawi dodatkowy ekran z propozycją przewalutowania dla Cardholdera
Cardholder może zdecydować się na skorzystanie z obciążenia karty w natywnej dla niej walucie lub pozostawić oryginalną walute. Na tym ekranie również występuje walidacja.
Wybór waluty Cardholdera nie będzie miał wpływu na Merchanta i oryginalna kwotę samej transakcji, ale będzie miał wpływ na kwote jaką zostanie obciążna karta. Jeśli Cardholder nie chce skorzystać z oferty przewalutowania DCC, zaznacza oryginaną walute (czyli w tym przypadku PLN).
Uzyskanie tokenu
Przycisk należy powiązać z Autopay Widget JS SDK tak, aby jego kliknięcie triggerowało wywołanie metody widget.sendForm();
w obiekcie WidgetConnection
Co finalnie, zaowocuje uzyskaniem event'u FORM_SUCCESS
, czyli uzyskaniem wartości paymentToken'u (w polu message
).
{status: 'FORM_SUCCESS', message: 'eyJ...n19', id: 'M2Z...ZmU2'}
Poniżej przedstawiono szczegółowy schemat komunikacji miedzy Merchantem, Cardholderem a systemami płatniczymi Autopay w przypadku tzw. integracji WhiteLabel (czyli z użyciem widget'a kartowego)
Bezpieczne przekazania danych karty do systemu Autopay oraz pełny flow transakcji:
paymentToken'a
Poniżej przykład prostej implementacji HTML/JS z użyciem widget'u VisaMobile (oraz Widget'u kartowego)
{ 'status': 'FORM_SUCCESS', 'message': 'eyJrZ...', ... }
Kluczowe dla tej integracji jest miejsce w kodzie JS, które odpowiada za odebranie event'ów, a szczególnie event'u o statusie FORM_SUCCESS
, zawiera on bowiem w polu message
wartość paymentToken'u, którą merchant musi przekazać do swojego backend'u w celu skompletowania parametrów do Autopay API umożliwiających start płatnośći w Autopay.
Przykładowa strona
W przeglądarce poniższa, przykładowa strona składa się z trzech sekcji:
PayButon
spięty z SDK JS sterujący uruchomieniem procesu w widget'cie (w tym przykładzie przycisk uaktywnia się dopiero, gdy otrzymuje komunikat o poprawnej walidacji i uzyskaniu kompletu danych potrzebnych do wystartowania procesu)Kiedy zostanie wybrany kanał przeznaczony dla VisaMobile, wyświetla się dedykowany widok (oparty o HTML IFRAME), w którym podanie pełnego numeru telefonu (dzięki komunikatom walidacji) skutkuje uaktywnieniem przycisku "Zapłać".
Walidacja i skompletowanie danych
W momencie wpisywania numeru telefonu Autopay Widget JS SDK otrzymuje od widget'u event'y VALIDITY_STATUS
z wartoscią valid: false
Gdy uzyskamy pełen numer telefonu, ostatnim event'em będzie VALIDITY_STATUS
z wartością valid: true
{status: 'VALIDITY_STATUS', message: null, valid: true, id: 'M2Zl...mU2'}
O ten event można oprzeć uaktywnianie przycisku PayButton
Uzyskanie tokenu
Przycisk należy powiązać z Autopay Widget JS SDK tak, aby jego kliknięcie triggerowało wywołanie metody widget.sendForm();
w obiekcie WidgetConnection
Co finalnie, zaowocuje uzyskaniem event'u FORM_SUCCESS
, czyli uzyskaniem wartosci paymentToken'u.
{status: 'FORM_SUCCESS', message: 'eyJ...n19', prefix: '48', phoneNumber: '666666666', id: 'M2Z...ZmU2'}
Start transakcji:
paymentToken'a
Ewentualne anulowanie transakcji (z poziomu paywall'a PayAutopay ):
Obciążenie i zwrócenie wyniku:
Poniższy kod został wykorzystany do wygenerowania przykładowych integracji, o których była mowa wyżej w sekcjach z przykładami implementacji Widget'a Kartowego jak i Widget'a Visa Mobile
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Autopay Widget Integration Example</title>
<script src="?r=quot;https://testcards.autopay.eu/widget-new/widget-communication.min.js"></script>
<style>/* pominięte w przykladzie */</style>
</head>
<body>
<div>
<form onsubmit="submitForm(event)" novalidate>
<div class="form-group"><p>Transaction amount:</p><span>1,23 PLN</span></div>
<!-- przykładowa implementacja mechanizmu wyboru kanału płatności po stronie merchanta -->
<p>Choose payment method:</p>
<ul>
<li onclick="setPayway(event, 1500)">One time payment with card</li>
<li onclick="setPayway(event, 1503)">Remember your card</li>
<li onclick="setPayway(event, 1523)">Pay with VisaMobile</li>
</ul>
<!-- miejsce, w które wstrzyknięty zostanie HTML IFRAME z widget"em -->
<div class="form-group" id="iframe-wrapper">
<iframe id="iframe"></iframe>
</div>
<!-- przycisk wywołujący akcję w widget'cie -->
<button type="submit" id="button" disabled="disabled">PayButton</button>
</form>
</div>
<script type="text/javascript">
window.addEventListener('load', () => {
// pomocnicze zmienne (tylko na potrzeby przykładu)
var currentPayway = null;
var widget = null;
// przykładowe konfiguracje zależne od środowiska devloperskiego (tylko na potrzeby przykładu)
var AUTOPAY_CARDS_DOMAIN_ENV_PROD = 'https://cards.autopay.eu';
var AUTOPAY_CARDS_DOMAIN_ENV_TEST = 'https://testcards.autopay.eu';
var MERCHANTS_SERVICE_ID_ENV_PROD = 903555;
var MERCHANTS_SERVICE_ID_ENV_TEST = 903555;
// pomocnicza metoda obsługująca wybór kanału płatności i osadzenie widget'u
function setPayway (event, paywayId) {
if (currentPayway === paywayId) {
return;
}
currentPayway = paywayId
removeWidget();
disableSubmitButton();
markActiveIcon(event);
if (paywayId === 1500) {
startWidget('/widget-new/partner' , { language: 'en', amount: 1.23, currency: 'PLN', serviceId: MERCHANTS_SERVICE_ID_ENV_TEST });
return
}
if (paywayId === 1503) {
startWidget('/widget-new/partner' , { language: 'en', amount: 1.23, currency: 'PLN', serviceId: MERCHANTS_SERVICE_ID_ENV_TEST, recurringAction: 'INIT_WITH_REFUND' });
return
}
if (paywayId === 1523) {
startWidget('/widget-new/visamobile', { language: 'en', amount: 1.23, currency: 'PLN', serviceId: MERCHANTS_SERVICE_ID_ENV_TEST, merchantName: 'ShopName' });
return
}
}
// pomocnicza metoda (tylko na potrzeby przykładu) ustawiająca obramowanie na wybranym kanale płatności
function markActiveIcon (event) {
var currentActive = document.querySelector('ul li.active');
if (currentActive) {
currentActive.classList.remove('active');
}
var newActive = event.target;
if (newActive.nodeName.toLowerCase() === 'img') {
newActive = newActive.parentNode;
}
newActive.classList.add('active');
}
// główna metoda odpowiadająca za osadzenie IFRAME z widget'em i zestawienia komunikacji między nim a jego obiektowym reprezentantem WidgetConnection
function startWidget (widgetVariantUrl, widgetConfig) {
if (!widgetEvents || !WidgetConnection) {
return;
}
var iframeEl = document.getElementById('iframe');
iframeEl.src = AUTOPAY_CARDS_DOMAIN_ENV_TEST + widgetVariantUrl;
widget = new WidgetConnection(widgetConfig)
widget.startConnection(iframeEl).then(() => {
// obsłużenie głównego, finalnego event'u zawierającego wartość PaymentToken'a
widget.on(widgetEvents.formSuccess, function (message, eventData) {
console.log('payment token event =>', eventData);
console.log('payment token value:', message);
// w tym miejscu powinno być wywołanie API merchanta, aby przekazać paymentToken (message) do backend'u merchanta; <<<<<<<<<<<<<<<<<
})
// obsłużenie event'ów związanych z walidacją podczas wprowadzania danych w widget'cie przez użytkownika/cardholder'a
widget.on(widgetEvents.validityStatus, function (message, eventData) {
console.log('form validation status =>', eventData);
if (eventData.valid) {
enableSubmitButton();
} else {
disableSubmitButton();
}
})
// obsłużenie event'u związanego z walidacją w momencie wprowadzania danych w widget'cie przez użytkownika/cardholder'a
widget.on(widgetEvents.validationResult, function (message, eventData) {
console.log('form validation result =>', eventData);
if (eventData.valid) {
enableSubmitButton();
} else {
disableSubmitButton();
}
})
// obsłużenie event'u showModal
widget.on(widgetEvents.showModal, function () {
console.log('show modal');
})
})
}
// pomocnicza metoda (tylko na potrzeby przykładu) ustawiająca usuwanie widget'u dla innych, niż kartowe, kanałów płatnosći (w przykladzie jest kanał 106 PBL)
function removeWidget () {
if (!widget) {
return;
}
widget.stopConnection();
}
// pomocnicza metoda (tylko na potrzeby przykładu)
function enableSubmitButton () {
document.getElementById('button').removeAttribute('disabled');
}
// pomocnicza metoda (tylko na potrzeby przykładu)
function disableSubmitButton () {
document.getElementById('button').setAttribute('disabled', 'disabled');
}
// pomocnicza metoda (tylko na potrzeby przykładu) powiązująca naćiśnięcie aktywnego przycisku zapłać z wywołaniem sendForm() w obiekcie widget'u
function submitForm (event) {
event.preventDefault();
if (!widget || widget.invalid) {
return;
}
disableSubmitButton();
widget.sendForm();
}
window.setPayway = setPayway;
window.submitForm = submitForm
});
</script>
</body>
</html>
iFrame kartowy (PayBmCheckout) nie jest już wspierany, zamiast niego do płatności kartą osadzoną w serwisie Partnera należy użyć Widgeta Kartowego.
Płatności automatyczne to wyjątkowo wygodny i bezpieczny sposób dokonywania powtarzalnych transakcji. Polega ona na automatycznym pobieraniu należności od Klienta w jej terminach płatności. Usługę należy najpierw aktywować. W przypadku kart odbywa się to poprzez przekierowanie klienta do formatki aktywacyjnej usługi. W przypadku BLIK natomiast poprzez akceptację płatności automatycznej w Aplikacji Mobilnej. Po skutecznym zautoryzowaniu takiej transakcji aktywacyjnej, AP przekazuje do Partnera standardowy komunikat o zmianie statusu transakcji (ITN) oraz komunikat o uruchomieniu usługi płatności automatycznej (RPAN). Komunikat RPAN zawiera pole clientHash, którym Partner będzie identyfikować konkretną płatność automatyczną podczas późniejszych obciążeń oraz dezaktywacji usługi.
Wszystkie transakcje w ramach cyklu życia płatności automatycznej (aktywacja i obciążenia) są realizowane w ramach dedykowanych Kanałów Płatności (BLIK – GatewayID=522, Karty – GatewayID = 1503) o gatewayType="Płatność automatyczna". W przypadku integrowania płatności automatycznej BLIK, można podać (w danych podawanych przed integracją) długość życia aktywowanych płatności automatycznych (domyślnie bezterminowe) lub podawać ją w transakcji inicjalizującej (parametr RecurringValidityTime).
Aktywacja płatności automatycznej składa się z autoryzacji transakcji aktywacyjnej, komunikacji ITN oraz RPAN. Po otrzymaniu RPAN, Partner jest gotowy do wykonywania obciążeń cyklicznych (lub jednym kliknięciem).
Jest to przypadek aktywacji usługi płatności automatycznej podczas płatności za usługę/towar (a więc RecurringAction=INIT_WITH_PAYMENT i rozliczenie transakcji do Partnera).
Komunikat ITN wysyłany po płatności automatycznej jest podobny do tych, otrzymywanych po płatnościach jednorazowych (rozszerzony jest jedynie o węzeł RecurringData, oraz - dla płatności kartowej – CardData). Pozostałe dwa elementy procesu aktywacji usługi to start transakcji oraz RPAN.
Proces aktywacji usługi inicjowany jest z Serwisu Partnera, poprzez rozpoczęcie transakcji z parametrem RecurringAction pozwala sterować zachowaniem Systemu:
a) wartość INIT_WITH_PAYMENT - odpowiada aktywacji usługi płatności automatycznej podczas płatności za usługę/towar (karta lub rachunek obciążane są kwotą należności, a środki z płatności przekazywane są do Partnera); na liście dostępnych kanałów płatności System prezentuje tylko płatności automatyczne (o ile nie wybrano kanału płatności w Serwisie),
b) wartość INIT_WITH_REFUND – odpowiada aktywacji usługi płatności automatycznej poza procesem płatności za usługę/towar (karta lub rachunek obciążane są kwotą 1 PLN, po czym następuje automatyczny zwrot środków na rachunek Klienta); na liście dostępnych kanałów płatności System prezentuje tylko płatności automatyczne (o ile nie wybrano kanału płatności w Serwisie),
c) wartość INIT_WITHOUT_PAYMENT – odpowiada aktywacji usługi płatności automatycznej poza procesem płatności za usługę/towar; Wartość obsługiwana tylko w modelu White-Label, dla metody BLIK. Kwota startowa dla tej wartości to 0.00.
d) brak parametru (lub pusty) – o ile nie wybrano kanału płatności w Serwisie, System wyświetli wszystkie dostępne dla Serwisu kanały płatności (wraz z automatycznymi) oraz pozostawi Klientowi decyzję: płatność jednorazowa, czy uruchomienie płatności automatycznej. Jeśli Klient wybierze płatność automatyczną, to transakcja zostanie w standardowy sposób rozliczona na rzecz Partnera (a w RPAN wróci parametr RecurringAction=INIT_WITH_PAYMENT).
UWAGA: Niedozwolone jest rozpoczynanie transakcji aktywacyjnych z wybranym kanałem płatności automatycznej, ale bez wybranego RecurringAction.
W niektórych przypadkach (jeśli wynika to z odpowiedzi metody legalData) wymagane jest również podanie parametrów RecurringAcceptanceState (o wartości ACCEPTED, co oznacza to, że Klient przeczytał i zaakceptował regulamin płatności automatycznej na Serwisie Partnera) oraz RecurringAcceptanceID.
Aktywacja usługi kartowej płatności automatycznej odbywa się na formatkach dostarczanych przez AP. Klient jest zobowiązany do podania danych karty: Imię, Nazwisko, Numer karty, Datę ważności oraz kod CVV.
W przypadku automatycznej płatności z rachunku bankowego (BLIK), autoryzacja następuje bez podawania danych kartowych: np. kodem BLIK (transportowanym w parametrach startowych w AuthorizationCode), lub poprzez Alias BLIK OneClick (transportowanym w parametrach startowych w BlikUIDKey/BlikUIDLabel). Płatności automatyczne dla metody BLIK możemy uruchomić w dwóch wariantach:
Po zautoryzowaniu transakcji, System AP przekazuje do Serwisu Partnera komunikat o zmianie statusu transakcji (ITN) oraz komunikat o uruchomieniu usługi płatności automatycznej (RPAN). Komunikat RPAN jest dedykowany dla zdarzeń aktywacji płatności automatycznej i zawiera jej identyfikator (ClientHash), którym Partner będzie się posługiwać podczas późniejszych obciążeń oraz dezaktywacji usługi. RPAN zawiera też informację o akcji w procesie płatności automatycznej (RecurringAction, opisany wyżej).
Po otrzymaniu pozytywnego statusu płatności dla aktywacji płatności automatycznej, wysyłany jest do Serwisu dedykowany komunikat. Powiadomienie to polega na wysłaniu przez System AP dokumentu XML zawierającego dane o uruchomionej płatności automatycznej. Dokument wysyłany jest protokołem HTTPS (domyślnie port 443), metodą POST, jako parametr HTTP o nazwie recurring. Parametr ten jest zapisany mechanizmem kodowania transportowego Base64.
Format dokumentu (XML)
<?xml version="1.0" encoding="UTF-8"?>
<recurringActivation>
<serviceID>ServiceID</serviceID>
<transaction>
<orderID>OrderID</orderID>
<remoteID>RemoteID</remoteID>
<amount>999999.99</amount>
<currency>PLN</currency>
<gatewayID>GatewayID</gatewayID>
<paymentDate>YYYYMMDDhhmmss</paymentDate>
<paymentStatus>PaymentStatus</paymentStatus>
<paymentStatusDetails>PaymentStatusDetails</paymentStatusDetails>
<startAmount>999998.99</startAmount>
<invoiceNumber>InvoiceNumber</invoiceNumber>
<customerNumber>CustomerNumber</customerNumber>
<customerEmail>CustomerEmail</customerEmail>
<customerPhone>CustomerPhone</customerPhone>
</transaction>
<recurringData>
<recurringAction>RecurringAction</recurringAction>
<clientHash>ClientHash</clientHash>
<expirationDate>YYYYMMDDhhmmss</expirationDate>
</recurringData>
<cardData>
<index>Index</index>
<validityYear>ValidityYear</validityYear>
<validityMonth>ValidityMonth</validityMonth>
<issuer>Issuer</issuer>
<bin>BIN</bin>
<mask>Mask</mask>
</cardData>
<hash>Hash</hash>
</recurringActivation>
Wartości elementów: orderID, serviceID, amount dotyczące każdej z aktywowanych płatności automatycznych są identyczne z wartościami odpowiadających im pól podanymi przez Serwis przy rozpoczęciu danej płatności inicjalizacyjnej.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1. | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera, nadawany w trakcie rejestracji usługi, jednoznacznie identyfikuje Serwis Partnera w Systemie płatności online. |
2. | transaction -> orderID | TAK | string{1,32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
3. | transaction -> remoteID | TAK | string{1,20} | Alfanumeryczny identyfikator transakcji nadany przez System płatności online. |
5. | transaction -> amount | TAK | amount | Kwota transakcji. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce.UWAGA: Dopuszczalna wartość pojedynczej Transakcji w Systemie produkcyjnym wynosi odpowiednio: - dla PBL - min. 0.01 PLN, max. 100000.00 PLN (lub do wysokości ustalonej przez Bank wydający instrument płatniczy) - dla Kart płatniczych – min. 0.10 PLN, max. 100000.00 PLN (lub do wysokości indywidualnego limitu pojedynczej transakcji w Banku wydawcy Karty) - dla Szybkich przelewów - min. 0.01 PLN, max. 100000.00 PLN (lub do wysokości indywidualnego limitu pojedynczej transakcji w Banku dla przelewu wewnątrzbankowego) - dla BLIK - min. 0.01 PLN, max. 75000.00 PLN (lub do wysokości indywidualnego limitu pojedynczej transakcji w Banku dla przelewu wewnątrzbankowego) - dla OTP – min. 100.00 PLN, max. 2000.00 PLN - dla Alior Rat – min. 50.00 PLN, max. 7750.00 PLN |
6. | transaction -> currency | TAK | string{1,3} | Waluta transakcji. |
7. | transaction -> gatewayID | TAK | string{1,5} | Identyfikator Kanału Płatności, za pomocą, którego klient uregulował płatność. |
8. | transaction -> paymentDate | TAK | string{14} | Moment zautoryzowania transakcji, przekazywany w formacie YYYYMMDDhhmmss. (Czas CET) |
9. | transaction -> paymentStatus | TAK | enum | Status autoryzacji transakcji. Przyjmuje wartości (przejścia statusów identyczne z analogicznym polem w ITN): PENDING – transakcja rozpoczęta SUCCESS – poprawna autoryzacja transakcji, Serwis otrzyma środki za transakcję FAILURE – transakcja nie została zakończona poprawnie |
10. | transaction -> paymentStatusDetails | TAK | enum | Szczegółowy status transakcji, wartość może być ignorowana przez Serwis. |
11. | transaction -> startAmount | NIE | amount | Kwota transakcji podana w Linku Płatności (nie uwzględnia ew. kwoty prowizji naliczonej Klientowi). Suma prowizji Klienta i startAmount znajduje się w polu amount, gdyż jest to wynikowa wartość transakcji). Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. |
12. | transaction -> invoiceNumber | NIE | string{1,100} | Numer dokumentu finansowego w serwisie. |
13. | transaction -> customerNumber | NIE | string{1,35} | Numer klienta w serwisie. |
14. | transaction -> customerEmail | NIE | string{1,60} | Adres email klienta. |
15. | transaction -> customerPhone | NIE | string{9-15} | Numer telefonu użytkownika. |
16. | recurringData -> recurringAction | NIE | string{1,100} | Akcja w procesie płatności automatycznej. |
17. | recurringData -> clientHash | TAK | string{1,64} | Identyfikator płatności automatycznej. |
18. | recurringData -> expirationDate | NIE | string{14} | Moment wygaśnięcia ważności płatności automatycznej, przekazywany w formacie YYYYMMDDhhmmss. (Czas CET) |
19. | cardData -> index | NIE | string{1, 64} | Index karty płatniczej używanej w płatności automatycznej (jeśli użyto karty). |
20. | cardData -> validityYear | NIE | string{4} | Ważność karty w formacie YYYY (jeśli użyto karty). |
21. | cardData -> validityMonth | NIE | string{2} | Ważność karty w formacie mm (jeśli użyto karty). |
22. | cardData -> issuer | NIE | string{64} | Wystawca karty, możliwe wartości: - VISA - MASTERCARD - MAESTRO - AMERICAN EXPRESS (obecnie nie wspierane) - DISCOVER (obecnie nie wspierane) - DINERS (obecnie nie wspierane) - UNCATEGORIZED (nierozpoznany wystawca) |
23. | cardData -> bin | NIE | string{6} | Pierwsze 6 cyfr numeru karty. |
24. | cardData -> mask | NIE | string{4} | Ostatnie 4 cyfry numeru karty. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
WSKAZÓWKA: Element hash (komunikatu) służy do autentykacji dokumentu. Wartość tego elementu obliczana jest jako wartość funkcji skrótu z łańcucha zawierającego sklejone wartości wszystkich pól dokumentu oraz dołączonego klucza współdzielonego. Opis sposobu obliczania skrótu znajduje się w części Bezpieczeństwo transakcji.
Odpowiedź na powiadomienie
W odpowiedzi na powiadomienie oczekiwany jest status HTTP 200 (OK) oraz tekst w formacie XML (nie kodowany Base64), zwracany przez Serwis Partnera w tej samej sesji HTTP, zawierający potwierdzenie otrzymania komunikatu.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8"?>
<confirmationList>
<serviceID>ServiceID</serviceID>
<recurringConfirmations>
<recurringConfirmed>
<clientHash>ClientHash</clientHash>
<confirmation>Confirmation</confirmation>
</recurringConfirmed>
</recurringConfirmations>
<hash>Hash</hash>
</confirmationList>
Element confirmation służy do przekazania stanu weryfikacji autentyczności transakcji przez Serwis Partnera. Wartość elementu wyznaczana jest przez sprawdzenie poprawności wartości parametru serviceID, porównanie wartości pól orderID i amount w komunikacie powiadomienia oraz w komunikacie rozpoczynającym transakcję, a także weryfikację zgodności wyliczonego skrótu z parametrów komunikatu z wartością przekazaną w polu hash komunikatu.
Przewidziano dwie wartości elementu confirmation:
a) CONFIRMED – wartości parametrów w obu komunikatach oraz parametr hash są zgodne – transakcja autentyczna;
b) NOTCONFIRMED – wartości w obu komunikatach są różne lub niezgodność hash – transakcja nieautentyczna;
WSKAZÓWKA: Element hash (w odpowiedzi na komunikat) służy do autentykacji odpowiedzi i liczony jest z wartości parametrów odpowiedzi. Opis sposobu obliczania skrótu znajduje się w części Bezpieczeństwo transakcji.
W wypadku braku poprawnej odpowiedzi na wysłane powiadomienia, System płatności online podejmie kolejne próby jego przekazania po upływie określonego czasu. Serwis Partnera powinien wykonywać własną logikę biznesową (np. uruchomienie usługi płatności automatycznej, mailingu itp.) jedynie po pierwszym komunikacie o danym ClientHash.
Poniżej schemat opisujący planowe ponawianie komunikatów (zastrzegamy jednak możliwość ponowienia każdego z nich w dowolnym momencie).
Nr ponowienia | Odstęp do kolejnego ponowienia |
---|---|
1-12 | 3 min |
13-156 | 10 min |
157-204 | 1 godzina |
205-209 | 1 dzień |
UWAGA: Ciągłe ponawianie przez System identycznego komunikatu oznacza brak lub nieprawidłową na niego odpowiedź z Serwisu, oraz wymaga od Partnera pilnej diagnozy przyczyny.
Poprawne odebranie identyfikatora usługi (ClientHash), sprawia, że Partner jest gotowy do automatycznego obciążania Klienta za towary/usługi zakupione w Serwisie. Proces składa się z transakcji oraz komunikacji ITN.
Poniżej proces automatycznego obciążenia Klienta za usługę/towar (a więc RecurringAction=MANUAL/AUTO i rozliczenie transakcji do Partnera).
Komunikat ITN wysyłany po płatności automatycznej jest podobny do tych, otrzymywanych po płatnościach jednorazowych. Rozszerzony jest jedynie o węzeł RecurringData oraz (dla płatności kartowej) CardData.
Aby wykonać automatyczne obciążenie, Serwis Partnera powinien wykonać Przedtransakcję z parametrem ClientHash, zgodnym z aktywowaną wcześniej usługą płatności automatycznej (pochodzące z RPAN), z parametrem RecurringAcceptanceState o wartości NOT_APPLICABLE oraz odpowiednią wartość parametru RecurringAction:
a) AUTO - płatność cykliczna (obciążenie bez udziału Klienta),
b) MANUAL - płatność jednym kliknięciem (obciążenie zlecane przez Klienta, zwane OneClick).
UWAGA: Udział klienta w opcji MANUAL, zazwyczaj ogranicza się do wywołania komunikatu (wybranie w Serwisie opcji zapłaty zapamiętaną kartą). W zdecydowanej większości przypadków wymagana jest dodatkowa autoryzacja w banku (w postaci 3DS lub kodu CVC). Wtedy zamiast obciążenia (i statusu zlecenia w odpowiedzi na przedtranksację), System zwróci link do kontynuacji – takie jest domyślne zachowanie systemu na środowisku testowym. Aby przetestować scenariusz obciążenia bez potrzeby dodatkowej autoryzacji należy zgłosić potrzebę zmiany konfiguracji Systemu na czas testu.
UWAGA: Opcja niedostępna dla płatności automatycznych BLIK (BLIK OneClick).
Partner może dezaktywować usługę płatności automatycznych w dowolnym momencie. Proces może składać się z komunikatu zlecającego dezaktywację oraz komunikatu RPDN (dedykowanego dla zdarzeń rezygnacji z usługi płatności automatycznej).
Może się również zdarzyć, że rezygnacja z usługi zostanie zainicjowana ze strony AP (np. na wniosek Klienta, banku lub organizacji kartowej). W takiej sytuacji System również dostarczy komunikat RPDN.
Serwis może wyłączyć usługę poprzez dedykowany komunikat. Wszystkie parametry przekazywane są metodą POST (na adres https://{host_bramki}/deactivate_recurring). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera, nadawany w trakcie rejestracji usługi, jednoznacznie identyfikuje Serwis Partnera w Systemie płatności online. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID), wartość pola musi być unikalna dla Serwisu Partnera. |
3 | ClientHash | TAK | string{1,64} | Identyfikator płatności automatycznej. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
UWAGA: Element Hash (komunikatu) służy do autentykacji dokumentu. Wartość tego elementu obliczana jest jako wartość funkcji skrótu z łańcucha zawierającego sklejone wartości wszystkich pól dokumentu oraz dołączonego klucza współdzielonego.
W odpowiedzi na powiadomienie zwracany jest tekst w formacie XML w tej samej sesji HTTP, zawierający potwierdzenie.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8"?>
<confirmationList>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<recurringConfirmations>
<recurringConfirmed>
<clientHash>ClientHash</clientHash>
<confirmation>Confirmation</confirmation>
<reason>Reason</reason>
</recurringConfirmed>
</recurringConfirmations>
<hash>Hash</hash>
</confirmationList>
Element confirmation służy do przekazania stanu weryfikacji autentyczności operacji przez Serwis. Wartość elementu wyznaczana jest przez sprawdzenie poprawności wartości parametrów serviceID oraz clientHash z podanymi w komunikacie RPAN przy rozpoczęciu danej płatności aktywacyjnej, a także weryfikację zgodności wyliczonego skrótu z parametrów komunikatu z wartością przekazaną w polu Hash.
Przewidziano dwie wartości elementu confirmation:
a) CONFIRMED – wartości parametrów są poprawne oraz parametr Hash są zgodne – operacja autentyczna;
b) NOTCONFIRMED – wartości w obu komunikatach są niepoprawne lub niezgodność Hash – operacja nieautentyczna;
UWAGA: Element hash (w odpowiedzi na komunikat) służy do autentykacji odpowiedzi i liczony jest z wartości parametrów odpowiedzi. Wartość tego elementu obliczana jest jako wartość funkcji skrótu z łańcucha zawierającego sklejone wartości wszystkich pól dokumentu (bez znaczników) oraz dołączonego klucza współdzielonego. Opis w części Bezpieczeństwo transakcji.
Po wyłączeniu płatności automatycznej dla danego ClientHash, wysyłany jest dedykowany komunikat w postaci dokumentu XML, jest protokołem HTTPS (domyślnie port 443), metodą POST, z parametrem o nazwie recurring. Parametr ten zapisany jest mechanizmem kodowania transportowego Base64.
Format dokumentu (XML)
<?xml version="1.0" encoding="UTF-8"?>
<recurringDeactivation>
<serviceID>ServiceID</serviceID>
<recurringData>
<recurringAction>RecurringAction</recurringAction>
<clientHash>ClientHash</clientHash>
<deactivationSource>DeactivationSource</deactivationSource>
<deactivationDate>DeactivationDate</deactivationDate>
<recurringData>
<hash>Hash</hash>
</recurringDeactivation>
Wartości elementów: serviceID, clientHash dotyczące każdej z deaktywowanych płatności cyklicznych, są identyczne z wartościami odpowiadających im pól, podanymi w komunikacie RPAN przy rozpoczęciu danej płatności inicjalizacyjnej.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera, nadawany w trakcie rejestracji usługi, jednoznacznie identyfikuje Serwis Partnera w Systemie płatności online. |
2 | recurringData -> recurringAction | TAK | string{1,100} | Akcja w procesie płatności automatycznych (w tym wypadku wartość DEACTIVATE). |
3 | recurringData -> clientHash | TAK | string{1,64} | Identyfikator płatności automatycznej. |
4 | recurringData -> deactivationSource | TAK | string{1,64} | Przyczyna dezaktywacji płatności automatycznej. Opis ten należy traktować informacyjnie, lista jego dozwolonych wartości jest ciągle powiększana i pojawienie się nowych wartości nie może pociągać za sobą braku akceptacji komunikatu RPDN. Poniżej aktualne wartości: - SERVICE: zlecone przez Partnerów - ACQUIRER: zlecone przez AP (np. po otrzymaniu informacji o fraudzie) - BM_PL: zlecone przez Klienta na stronie bills.autopay.eu - PAYBM: wynikająca z wygaśnięcia ważności karty. |
5 | recurringData -> deactivationDate | TAK | string{14} | Moment wyłączenia płatności automatycznej, przekazywany w formacie YYYYMMDDhhmmss. (Czas CET) |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
UWAGA: Element hash (komunikatu) służy do autentykacji dokumentu. Wartość tego elementu obliczana jest jako wartość funkcji skrótu z łańcucha zawierającego sklejone wartości wszystkich pól dokumentu oraz dołączonego klucza współdzielonego.
W odpowiedzi na powiadomienie oczekiwany jest status HTTP 200 (OKq) oraz tekst w formacie XML (nie kodowany Base64), zwracany przez Serwis w tej samej sesji HTTP, zawierający potwierdzenie otrzymania komunikatu.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8"?>
<confirmationList>
<serviceID>ServiceID</serviceID>
<recurringConfirmations>
<recurringConfirmed>
<clientHash>ClientHash</clientHash>
<confirmation>Confirmation</confirmation>
</recurringConfirmed>
</recurringConfirmations>
<hash>Hash</hash>
</confirmationList>
Element confirmation służy do przekazania stanu weryfikacji autentyczności operacji przez Serwis. Wartość elementu wyznaczana jest przez sprawdzenie poprawności wartości parametrów serviceID oraz clientHash z podanymi w komunikacie RPAN przy rozpoczęciu danej płatności inicjalizacyjnej oraz weryfikację zgodności wyliczonego skrótu z parametrów komunikatu z wartością przekazaną w polu hash.
Przewidziano dwie wartości elementu confirmation:
a) CONFIRMED – wartości parametrów są poprawne oraz parametr hash są zgodne – operacja autentyczna
b) NOTCONFIRMED – wartości w obu komunikatach są niepoprawne lub niezgodność hash – operacja nieautentyczna
UWAGA: Element hash (w odpowiedzi na komunikat) służy do autentykacji odpowiedzi i liczony jest z wartości parametrów odpowiedzi. Wartość tego elementu obliczana jest jako wartość funkcji skrótu z łańcucha zawierającego sklejone wartości wszystkich pól dokumentu (bez znaczników) oraz dołączonego klucza współdzielonego. Opis sposobu obliczania skrótu znajduje się w części Bezpieczeństwo transakcji.
W wypadku braku poprawnej odpowiedzi na wysłane powiadomienia, System podejmie kolejne próby jego przekazania po upływie określonego czasu. Serwis powinien wykonywać własną logikę biznesową (np. zatrzymanie płatności automatycznej, mailing itp.), jedynie po pierwszym komunikacie RPDN o danym ClientHash.
WSKAZÓWKA: Zalecamy zapoznanie się również z częściami Monitoring komunikacji ITN/ISTN/IPN/RPAN/RPDN i Schemat ponawiania komunikatów ITN/ISTN/IPN/RPAN/RPDN.
Dokonanie weryfikacji tożsamości płatnika może dobywać się na zasadzie porównania danych przekazanych do weryfikacji w parametrach startu transakcji oraz danych uzyskanych z wpłaty zarejestrowanej w Systemie. Jeśli w trakcie integracji zostanie uzgodniona opcja weryfikacji danych oraz w starcie transakcji zostaną podane zadeklarowane przez klienta dane do weryfikacji, System dokona sprawdzenia prawdziwości tych danych i jego wynik umieści w komunikacie ITN obok danych nadawcy przelewu. Dla większości transakcji typu PBL, pierwszy komunikat ITN nie będzie zawierać danych adresowych (nazw, adres) klienta. Dane te są uzupełniane w Systemie po zeskanowaniu historii rachunku AP danego kanału płatności. Uzupełnienie tych danych skutkuje wysłaniem kolejnego komunikatu ITN do Partnera, zawierającego już te dane.
Pola w komunikacie startu transakcji powiązane z usługą (opis w części Rozpoczęcie transakcji z dodatkowymi parametrami):
VerificationFName,
VerificationLName,
VerificationStreet,
VerificationStreetHouseNo,
VerificationStreetStaircaseNo,
VerificationStreetPremiseNo,
VerificationPostalCode,
VerificationCity,
VerificationNRB
Pola w komunikacie ITN powiązane z usługą (opisane w części Dodatkowe pola w komunikacie ITN/IPN transakcji wejściowej):
węzeł customerData
verificationStatus
węzeł verificationStatusReasons
WSKAZÓWKA: Szczegółowe instrukcje, jak interpretować statusy płatności i weryfikacji w tym procesie zawiera część Dodatkowe pola w komunikacie ITN/IPN transakcji wejściowej.
Starty transakcji mogą zostać przeprowadzone z dodatkowymi parametrami rozpisanymi w poniższych punktach.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | typ | opis |
---|---|---|---|
8 | Language | string{1,2} | Wybór języka, w jakim będą prezentowane treści w Sytemie. Dopuszczalne wartości to: PL, EN, DE, CS, ES, FR, IT. Użycie innych wartości niż PL powinno być potwierdzone w trakcie integracji i powinno zależeć od faktycznego wyboru języka w Serwisie przez Klienta. |
9 | CustomerNRB | string{26} | Numer rachunku Klienta, parametr przeznaczony wyłącznie dla Serwisów Partnera generujących dedykowane numery rachunków dla zamówienia lub Klienta (patrz Model rozliczeń transakcji po każdej wpłacie). Dopuszczalne tylko cyfry. Jeśli w trakcie integracji ustalono wykorzystanie rachunków spoza Polski, wtedy pole przenosi IBAN i oczekiwany zakres danych pola zmienia się na: alfanumeryczne znaki alfabetu łacińskiego (min. 15, maks. 32 znaki). |
10 | SwiftCode | string{8,11} | Kod swift odpowiadający podanemu numerowi rachunku. Dopuszczalne tylko cyfry. Parametr podawany, jeśli w trakcie integracji ustalono wykorzystanie rachunków spoza Polski. |
11 | ForeignTransferMode | string{4,5} | System jakim ma zostać wykonany zagraniczny przelew rozliczeniowy: SEPA (Single Euro Payments Area) - możliwy do wykonania przelewu w walucie Euro w obrębie państw członkowskich Unii Europejskiej, jak i innych państwach na terenie Starego Kontynentu, np. Islandii, Liechtensteinu, Norwegii, Szwajcarii, Monako czy Andory, SWIFT - przelewy zagraniczne niemożliwe do wykonania za pomocą SEPA (np. inna waluta niż Euro), wiąże się z wyższymi kosztami wykonania przelewu, niż w przypadku SEPA. Dopuszczalne wartości: SEPA i SWIFT. Parametr podawany, jeśli w trakcie integracji ustalono wykorzystanie rachunków spoza Polski. |
12 | TaxCountry | string{1,64} | Kraj zamieszkania płatnika. |
13 | CustomerIP | string{1,15} | Adres IP użytkownika, parametr przeznaczony wyłącznie dla Serwisów Partnera uruchamiających System w tle (patrz Przedtransakcja oraz Zamówienie danych do przelewu w transakcji typu Szybki Przelew). |
14 | Title | string{1,95} | Tytuł przelewu rozliczającego transakcję, parametr przeznaczony wyłącznie dla Serwisów Partnera rozliczanych przelewem po każdej wpłacie (patrz Model rozliczeń transakcji po każdej wpłacie). W niektórych przypadkach, niezależnych od AP tytuł przelewu rozliczeniowego może zostać samodzielnie zmodyfikowany przez Bank, z którego nastąpiło rozliczenie. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\\s.-/,!()\" , gdzie znak "/" będzie podmieniany na "-" dla transakcji wychodzących. |
15 | ReceiverName | string{1,35} | Nazwa odbiorcy przelewu rozliczającego transakcję, parametr przeznaczony wyłącznie dla Serwisów Partnera rozliczanych przelewem po każdej wpłacie (patrz Model rozliczeń transakcji po każdej wpłacie). Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\s.-/,!()=[]{};:? |
16 | Products | string{1,10000} | Informacje o produktach wchodzących w skład transakcji, przekazywany w postaci zakodowanego protokołem transportowym Base64 XMLa. Opis struktury w części Koszyk produktów. |
17 | CustomerPhone | string{9-15} | Numer telefonu użytkownika. Dopuszczalne tylko cyfry. |
18 | CustomerPesel | string{11} | Numer PESEL użytkownika. Dopuszczalne tylko cyfry. |
20 | CustomerNumber | string{1,35} | Numer Klienta w Serwisie. |
21 | InvoiceNumber | string{1,100} | Numer dokumentu finansowego w Serwisie. |
22 | CompanyName | string{1,150} | Nazwa firmy do automatycznej weryfikacji wpłacającego, np. Firma Fajna. |
23 | Nip | string{1,10} | Numer identyfikacyjny NIP weryfikowanej firmy, np. 5851351185. Dopuszczalne tylko cyfry. |
24 | Regon | string{9,14} | Numer identyfikacyjny REGON weryfikowanej firmy, np. 191781561. Dopuszczalne tylko cyfry. |
25 | VerificationFName | string{1,32} | Imię podane w Serwisie do automatycznej weryfikacji wpłacającego, np. Jan. Dopuszczalne tylko litery alfabetu polskiego. |
26 | VerificationLName | string{1,64} | Nazwisko podane w Serwisie do automatycznej weryfikacji wpłacającego, np. Kowalski. Dopuszczalne tylko litery alfabetu polskiego. |
27 | VerificationStreet | string{1,64} | Ulica podana w Serwisie do automatycznej weryfikacji, np. Długa. Dopuszczalne tylko litery alfabetu polskiego oraz cyfry. |
28 | VerificationStreetHouseNo | string{1,64} | Numer domu podany w Serwisie do automatycznej weryfikacji wpłacającego. Dopuszczalne tylko litery alfabetu polskiego oraz cyfry. |
29 | VerificationStreetStaircaseNo | string{1,64} | Numer klatki podany w Serwisie do automatycznej weryfikacji wpłacającego. Dopuszczalne tylko litery alfabetu polskiego oraz cyfry. |
30 | VerificationStreetPremiseNo | string{1,64} | Numer lokalu podany w Serwisie do automatycznej weryfikacji wpłacającego. Dopuszczalne tylko litery alfabetu polskiego oraz cyfry. |
31 | VerificationPostalCode | string{1,64} | Kod pocztowy podany w Serwisie do automatycznej weryfikacji wpłacającego, format XX-XXX, np. 80-180. Dopuszczalne tylko cyfry oraz znak -. |
32 | VerificationCity | string{1,64} | Miasto podane w Serwisie do automatycznej weryfikacji wpłacającego, np. Warszawa. Dopuszczalne tylko litery alfabetu polskiego oraz cyfry. |
33 | VerificationNRB | string{1,26} | Numer rachunku bankowego podany w Serwisie do automatycznej weryfikacji wpłacającego, np. 88154010982001554242710005. Dopuszczalne tylko cyfry. |
35 | RecurringAcceptanceState | string{1,100} | Informacja o akceptacji regulaminu płatności automatycznej określająca, czy Klient zaakceptował regulamin płatności automatycznej, czy należy wymusić jego akceptację po stronie Systemu. Pole wymagane dla płatności automatycznych w modelu WhiteLabel usługi płatniczej świadczonej przez AP na rzecz Klienta (Klient płaci prowizję). Dostępność regulaminu można sprawdzić wywołując metodę legalData. Dozwolone wartości: NOT_APPLICABLE - akceptacja regulaminu niewymagana (płatność jednorazowa lub akcja obciążenia, tj. recurringAction o wartości AUTO lub MANUAL) ACCEPTED – deklaracja akceptacji regulaminu w serwisie kontrahenta (należy podać wraz z RecurringAcceptanceID) PROMPT – na formularzu kartowym jest proponowana zgoda na zapisanie karty, jej zaznaczenie rozpoczyna płatność automatyczną FORCE – w formularzu kartowym jest wymagana zgoda na zapisanie karty, inaczej płatność jest niemożliwa. UWAGA: Dostępność opcji ACCEPTED/PROMPT/FORCE zależy od uzgodnień biznesowych (w szczególności ustalenia miejsca wyświetlania zgody/regulaminu usługi płatności automatycznej). |
36 | RecurringAction | string{1,100} | Pole wymagane dla płatności automatycznych, określające możliwe akcje na płatności automatycznej. Dozwolone wartości: INIT_WITH_PAYMENT - aktywacja płatności automatycznej wraz z opłatą za towar/usługę INIT_WITH_REFUND - aktywacja płatności automatycznej, a następnie zwrot wpłaty INIT_WITHOUT_PAYMENT - aktywacja płatności automatycznej bez opłaty za towar/usługę. Kwota startowa płatności to 0.00. AUTO - płatność cykliczna (obciążenie bez udziału Klienta) MANUAL - płatność jednym kliknięciem (obciążenie zlecane przez Klienta) UWAGA: Opcja niedostępna dla płatności automatycznych BLIK (BLIK OneClick). DEACTIVATE – dezaktywacja płatności automatycznej |
37 | ClientHash | string{1,64} | Identyfikator płatności automatycznej. Parametr pozwala w sposób zanonimizowany przypisać Instrument płatniczy (np. Kartę, BLIK) do Klienta. Na jego podstawie Partner może wywoływać kolejne obciążenia w modelu płatności automatycznych. |
38 | OperatorName | string{1,35} | Nazwa operatora podanego numeru telefonu. Dopuszczalne wartości: Plus, Play, Orange, T-Mobile. |
39 | ICCID | string{12,19} | Numer karty SIM podanego numeru telefonu. Dozwolone wartości (dopuszczalne tylko cyfry): Dla Plus: 12 lub 13 cyfr Dla Play, Orange, T-Mobile: 19 cyfr |
40 | AuthorizationCode | string{6} | Kod autoryzacji płatności wprowadzany po stronie Serwisu/Systemu (obecnie obsługiwany w BLIK). Jego zastosowanie powoduje, że nie ma potrzeby przekierowania Klienta na stronę Kanału Płatności. Należy zatem podawać go jedynie poprzez Przedtransakcję. Format zależny od Kanału Płatności. Dla BLIK realizowanego w tle (BLIK 0, ew. BLIK OneClick): 6 cyfr. |
41 | ScreenType | string{4,6} | Rodzaj widoku formatki autoryzującej płatność. Dopuszczalne wartości: IFRAME - niewspierany FULL. |
42 | BlikUIDKey | string{1,64} | Klucz Aliasu UID (używane w BLIK). Jest to unikalny identyfikator użytkownika w Serwisie. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki: _. |
43 | BlikUIDLabel | string{1,20} | Etykieta Aliasu UID (używane w BLIK), która będzie prezentowana Klientowi w aplikacji bankowej w celu rozróżniania kont u Partnera. Zaleca się stosowanie loginu, nicka lub adresu mailowego przypisanego do zautoryzowanego konta Klienta. W przypadku możliwości wystąpienia w polu danych osobowych (np. adres mailowy jan.kowalski@poczta.pl) należy wykonać utajnienie danych (poprzez zastąpienie 3 kropkami niektórych znaków, np. ja...ki@po...pl). Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: . : @ - , spacja. |
44 | BlikAMKey | string{1,64} | Klucz Aliasu aplikacji mobilnej banku (używane w BLIK). Jest to unikalny identyfikator konta w BLIK. Dopuszczalne cyfry. |
45 | ReturnURL | string{1,1000} | Dynamiczny adres powrotu z płatności zaczynający się od http/https. Dopuszczalne poprawne URL. Może zawierać IP, port, subdomenę, polskie znaki, a także (po domenie) parametry i znaki specjalne: ,'\+&;%$#_!=. |
46 | TransactionSettlementMode | string{2,10} | Możliwość zmiany sposobu rozliczania transakcji. Brak parametru (kompatybilność wstecz) traktowana, jak przesłanie wartości COMMON. Parametr NONE powoduje potraktowanie transakcji jako zasilenia salda przedpłaconego i brak rozliczenia. Dopuszczalne wartości: COMMON NONE |
47 | PaymentToken | string{1,100000} | Token używany w portfelach Visa oraz Google Pay umieszczanych bezpośrednio na stronie Partnera (autoryzacja bez przekierowania do Systemu). W tym wypadku Serwis integruje się bezpośrednio z API Visy i/lub Google w celu pobrania uchwytu do karty. Uzyskany token jest przekazywany do Systemu Płatności Online w postaci zakodowanej protokołem transportowym Base64. UWAGA: Parametr jest zbędny, jeśli wybór Kanałów Płatności (oraz logowanie do portfela) odbywa się bezpośrednio na stronie Systemu Płatności Online. |
48 | DocNumber | string{1,150} | Numer dokumentu finansowego. |
49 | RecurringAcceptanceID | string{1,10} | Identyfikator wyświetlanego w Serwisie i akceptowanego przez Klienta regulaminu usługi płatności automatycznej. Pole wymagane dla płatności automatycznych w modelu WhiteLabel usługi płatniczej świadczonej przez AP na rzecz Klienta (Klient płaci prowizję). ID regulaminu odpowiedniego dla wybranego języka (i kanału płatności) należy pobrać za pomocą metody legalData. |
50 | RecurringAcceptanceTime | string{1,19} | Pole opcjonalne. Moment akceptacji regulaminu przez Klienta, ta wartość będzie weryfikowana przez System z czasem obowiązywania regulaminu o podanym RecurringAcceptanceID. Przykładowa wartość: 2014-10-30 07:54:50. (Czas w CET) |
51 | DefaultRegulationAcceptanceState | string{1,100} | Informacja o akceptacji regulaminu usługi płatniczej. Pole wymagane w modelu WhiteLabel usługi płatniczej świadczonej przez AP na rzecz Klienta (Klient płaci prowizję). Jego niepodanie może wiązać się z błędem lub wyświetleniem strony przejściowej Systemu z wymaganiem akceptacji regulaminów. Dostępność regulaminu można sprawdzić wywołując metodę legalData. Dozwolone wartości: ACCEPTED - akceptacja regulaminu wykonana w serwisie kontrahenta (należy podać wraz z DefaultRegulationAcceptanceID). |
52 | DefaultRegulationAcceptanceID | string{1,10} | Identyfikator wyświetlanego w Serwisie i akceptowanego przez Klienta regulaminu usługi płatniczej świadczonej przez AP na rzecz Klienta. Pole wymagane w modelu WhiteLabel usługi płatniczej świadczonej przez AP na rzecz Klienta (Klient płaci prowizję). ID regulaminu odpowiedniego dla wybranego języka (i kanału płatności) należy pobrać za pomocą metody legalData. |
53 | DefaultRegulationAcceptanceTime | string{1,19} | Pole opcjonalne. Moment akceptacji regulaminu przez Klienta, ta wartość będzie weryfikowana przez System z czasem obowiązywania regulaminu o podanym DefaultRegulationAcceptanceID; przykładowa wartość: 2014-10-30 07:54:50. (Czas w CET) |
54 | WalletType | string{1,32} | Typ portfela płatniczego, określa źródło parametru PaymentToken (jeżeli został przesłany). _Dostępne wartości to: SDK_NATIVE – natywna formatka kartowa (SDK mobilne) WIDGET – widget kartowy (formatka kartowa przed startem transakcji) _ |
55 | RecurringValidityTime | string{10} | Data ważności aktywowanej płatności automatycznej BLIK, format YYYY-MM-DD (przykładowa wartość: 2024-01-30). W przypadku braku parametru, zostanie zaproponowany termin domyślny konfiguracji ustalany w trakcie integracji (zwyczajowo bezterminowy). |
56 | ServiceURL | string{1,1000} | Parametr określający adres www sklepu, z którego została wystartowana płatność, zaczynający się od http/https. Dopuszczalne poprawne URL. Może zawierać IP, port, subdomenę, polskie znaki, a także (po domenie) parametry i znaki specjalne: ,'+&;%$#_!= |
57 | BlikPPLabel | string{1,35} | Etykieta płatności powtarzalnej BLIK, wyświetlana w aplikacji mobilnej podczas jej akceptowania. W przypadku braku parametru, zostanie użyta jej wartość domyślna (ustalana w trakcie integracji). |
58 | ReceiverNameForFront | string{1,35} | Nazwa odbiorcy płatności BLIK, wyświetlana w aplikacji mobilnej podczas jej akceptowania. W przypadku braku parametru, zostanie użyta jej wartość domyślna (zwyczajowo adres URL Serwisu). UWAGA: Usługa musi zostać uzgodnienia z opiekunem biznesowym. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego, znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń-/,!()=[]{};:.? oraz spacja. |
59 | AccountHolderName | string{1,100} | Nazwa właściciela środka płatniczego. |
Koszyk produktów przesyłany jest jako parametr (metody POST) o nazwie Products. Jego wartość jest zakodowana protokołem transportowym Base64.
Format przed zakodowaniem (XML)
<?xml version="1.0" encoding="UTF-8"?>
<productList>
<product>
<subAmount>SubAmount1</subAmount>
<params>Params1</params>
</product>
<product>
<subAmount>SubAmount2</subAmount>
<params>Params2</params>
</product>
…
<product>
<subAmount>SubAmountN</subAmount>
<params>ParamsN</params>
</product>
</productList>
Węzeł productList musi zawierać przynajmniej 1 element product, każdy węzeł product musi zawierać po jednym elemencie subAmount i params.
Element subAmount musi zawierać dodatnią kwotę produktu (separatorem dziesiętnym jest kropka, a po niej występują dwie cyfry groszy). Suma kwot kolejnych produktów musi być równa kwocie podanej w parametrze Amount (kwocie transakcji).
W przypadku niespełnienia powyższych warunków System zwróci błąd.
Element params może służyć do przekazywania informacji charakterystycznych dla danego produktu. Nazwy parametrów oraz ich znaczenie podlega każdorazowo uzgodnieniom w formie roboczej podczas integracji.
Przykładowe parametry produktu i ich znaczenie poniżej.
<params>
<param name="productName" value="Nazwa produktu 1" />
</params>
<params>
<param name="productType" value="ABCD" />
<param name="productName" value="Nazwa produktu 1" />
</params>
<params>
<param name="productID" value="12456" />
</params>
<params>
<param name="idBalancePoint" value="12456" />
</params>
W przypadku, gdy Partner korzysta z rozliczeń MASS_TRANSFER, tj:
każda transakcja rozliczana jest bezpośrednio po wpłacie oraz
rozliczenia wykonują się na poziomie produktu/punktu rozliczeń (czyli po wpłacie wykonywane jest tyle przelewów rozliczeniowych, co produktów w koszyku), oraz
nie ustalono stałych danych do rozliczeń (lub nie wszystkie dane do rozliczeń są ustalone na sztywno w konfiguracji rozliczeń),
Partner musi przekazać w każdym produkcie brakujące dane do rozliczeń tego produktu. Dostępne parametry stanowiące dane to:
customerNRB – docelowy numer rachunku do rozliczeń.
Format NRB (26 cyfr z sumą kontrolną). Jeśli w trakcie integracji
ustalono wykorzystanie rachunków spoza Polski, wtedy pole przenosi
IBAN i oczekiwany zakres danych pola zmienia się na: alfanumeryczne
znaki alfabetu łacińskiego (min. 15, max. 32 znaki). Podanie
wartości w formacie IBAN spowoduje potrzebę podania w produkcie
również parametrów swiftCode, foreignTransferMode.
title - tytuł przelewu rozliczającego produkt. W niektórych
przypadkach, niezależnych od AP, tytuł przelewu rozliczeniowego może
zostać samodzielnie zmodyfikowany przez Bank, z którego nastąpiło
rozliczenie.
Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z
zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\s.-,!()"
receiverName - nazwa odbiorcy przelewu rozliczającego produkt.
Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z
zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\s.-/,!()=[]{};:?
Przykład zastosowania parametrów w produkcie:
<params>
<param name="customerNRB" value="83109010980000000107285707" />
<param name="title" value="Rozliczenie produktu X" />
<param name="receiverName" value="Jan Kowalski" />
</params>
Przykładowe parametry koszyka:
<params>
<param name="idBalancePoint" value="12456" />
<param name="productName" value="Zasilenie salda dla Autopay" />
</params>
Jeżeli w trakcie rozmów dotyczących koszyka produktów ustalono, że jego podsumowanie ma zostać wyświetlone na stronie Systemu (ekran wyboru Kanału Płatności), można określić etykiety każdego użytego w koszyku parametru. System może użyć domyślnej etykiety parametru lub może przyjąć ją w starcie transakcji.
Wartość atrybutu title zostanie wyświetlona przed wartością parametru produktu.
Przykład atrybutu title
<params>
<param name="productName" value="Nazwa produktu 1" title="Nazwa"/>
<param name="productType" value="ABCD" title="Typ"/>
</params>
Natychmiastowe powiadomienia o zmianie statusu transakcji mogą zawierać dodatkowe pola (patrz Schematy dla Preautoryzacji). Ich występowanie jest kwestią konfiguracyjną, ustalaną w trakcie integracji (domyślnie wysyłane jest tylko węzeł customerData).
O tym, czy jest to komunikat ITN, czy IPN decyduje jedynie występowanie węzła product.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | typ | opis |
---|---|---|---|
11 | addressIP | string{1,15} | Adres IP Klienta, zarejestrowany przez front Systemu, ew. adres przekazany do Systemu w parametrze CustomerIP, bądź IP z którego nastąpił start transakcji w Systemie. |
13 | customerNumber | string{1,35} | Numer Klienta w Serwisie. |
21 | title | string{1,140} | Tytuł wpłaty. W niektórych przypadkach, niezależnych od AP tytuł przelewu może zostać samodzielnie zmodyfikowany przez Bank, w którym nastąpiła wpłata dokonana przez klienta. |
22 | customerData-> fName | string{1,128} | Imię płatnika. |
23 | customerData-> lName | string{1,128} | Nazwisko płatnika. |
24 | customerData-> streetName | string{1,128} | Nazwa ulicy płatnika. |
25 | customerData-> streetHouseNo | string{1,10} | Numer domu płatnika. |
26 | customerData-> streetStaircaseNo | string{1,10} | Numer klatki płatnika. |
27 | customerData-> streetPremiseNo | string{1,10} | Numer lokalu płatnika. |
28 | customerData-> postalCode | string{1,6} | Kod pocztowy adresu płatnika. |
29 | customerData-> city | string{1,128} | Miasto płatnika. |
30 | customerData-> nrb | string{1,26} | Rachunek bankowy płatnika. |
31 | customerData-> senderData | string{1,600} | Dane płatnika w postaci niepodzielonej. |
32 | verificationStatus | enum | Element zawierający status weryfikacji płatnika. To enum dopuszczający wartości: PENDING, POSITIVE oraz NEGATIVE. |
nd. | verificationStatusReasons | list | Lista zawierająca powody negatywnej lub oczekującej weryfikacji. Powodów może być wiele. |
33 | verificationStatus | enum | Szczegółowy powód w przypadku negatywnej lub oczekującej weryfikacji. Dozwolone wartości dla negatywnej weryfikacji: - NAME – nie zgadza się imię lub nazwisko - NRB – nie zgadza się numer rachunku - TITLE – nie zgadza się tytuł - STREET – nie zgadza się nazwa ulicy - HOUSE_NUMBER – nie zgadza się numer domu - STAIRCASE – nie zgadza się numer klatki schodowej - PREMISE_NUMBER – nie zgadza się numer lokalu - POSTAL_CODE – nie zgadza się kod pocztowy - CITY - nie zgadza się miasto - BLACKLISTED – rachunek, z którego została wykonana wpłata znajduje się na czarnej liście - SHOP_FORMAL_REQUIREMENTS – weryfikowany serwis nie spełnił warunków formalnych Dozwolone wartości dla oczekującej weryfikacji: - NEED_FEEDBACK – trwa oczekiwanie na spełnienie przez serwis warunków formalnych. UWAGA: Do liczenia wartości Hash pobierane są wartości kolejnych węzłów: verificationStatusReasons, verificationStatusReason. |
60 | startAmount | amount | Kwota transakcji podana w Linku Płatności (nie uwzględnia ew. kwoty prowizji naliczonej Klientowi). Suma prowizji Klienta i startAmount znajduje się w polu amount, ponieważ jest to wynikowa wartość transakcji). Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. |
70 | recurringData-> recurringAction | string{1,100} | Akcja w procesie płatności automatycznej (znaczenie i dozwolone wartości opisano w części Definicje). |
71 | recurringData-> clientHash | string{1,64} | Identyfikator płatności automatycznej generowany przez AP i przekazywany do Partnera po skutecznej aktywacji płatności automatycznej. |
72 | recurringData-> expirationDate | string{14} | Moment wygaśnięcia ważności płatności automatycznej, przekazywany w formacie YYYYMMDDhhmmss. (Czas CET) |
73 | cardData-> index | string{1,64} | Index karty (jeśli użyto karty). Index identyfikuje kartę o danej dacie ważności (zmiana daty lub numeru karty powoduje zmianę wartości tego parametru). |
74 | cardData-> validityYear | string{4} | Ważność karty w formacie YYYY (jeśli użyto karty). |
75 | cardData-> validityMonth | string{4} | Ważność karty w formacie mm (jeśli użyto karty). |
76 | cardData-> issuer | string{1,64} | Typ karty (jeśli użyto karty). Możliwe wartości: - VISA - MASTERCARD - MAESTRO - AMERICAN EXPRESS (obecnie nie wspierane) - DISCOVER (obecnie nie wspierane) - DINERS (obecnie nie wspierane) - UNCATEGORIZED (nierozpoznany wystawca) |
77 | cardData-> bin | string{6} | Pierwsze 6 cyfr numeru karty (jeśli użyto karty). Przekazywane, jeśli nie przekazywany jest parametr cardData-> mask. |
78 | cardData-> mask | string{4} | Ostatnie 4 cyfry numeru karty (jeśli użyto karty). Przekazywane, jeśli nie przekazywany jest parametr cardData->bin. |
90 | product-> subAmount | amount | Kwota produktu jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. Węzeł dostępny tylko w komunikatach IPN. |
91 | product-> params | list | Kolejne parametry produktu zgodne z formatem koszyka w starcie transakcji. Węzeł dostępny tylko w komunikatach IPN. |
UWAGA: Do liczenia wartości Hash pobierane są atrybuty value kolejnych węzłów product.params.
Przykład komunikatu ITN/IPN z dodatkowymi parametrami (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transactionList>
<serviceID>ServiceID</serviceID>
<transactions>
<transaction>
<orderID>OrderID</orderID>
<remoteID>RemoteID</remoteID>
<amount>999999.99</amount>
<currency>PLN</currency>
<gatewayID>GatewayID</gatewayID>
<paymentDate>YYYYMMDDhhmmss</paymentDate>
<paymentStatus>PaymentStatus</paymentStatus>
<paymentStatusDetails>PaymentStatusDetails</paymentStatusDetails>
<addressIP>127.0.0.1</addressIP>
<customerNumber>1111111</customerNumber>
<title>title</title>
<customerData>
<fName>fName</fName>
<lName>lName</lName>
<streetName>streetName</streetName>
<streetHouseNo>streetHouseNo</streetHouseNo>
<streetStaircaseNo>streetStaircaseNo</streetStaircaseNo>
<streetPremiseNo>streetPremiseNo</streetPremiseNo>
<postalCode>postalCode</postalCode>
<city>city</city>
<nrb>nrb</nrb>
<senderData>senderData</senderData>
</customerData>
<verificationStatus>verificationStatus</verificationStatus>
<verificationStatusReasons>
<verificationStatusReason>reason1</verificationStatusReason>
<verificationStatusReason>reason2</verificationStatusReason>
<verificationStatusReason>reason3</verificationStatusReason>
</verificationStatusReasons>
<startAmount>999998.99</startAmount>
<recurringData>
<recurringAction>RecurringAction</recurringAction>
<clientHash>ClientHash</clientHash>
<expirationDate>YYYYMMDDhhmmss</expirationDate>
</recurringData>
<cardData>
<index>Index</index>
<validityYear>ValidityYear</validityYear>
<validityMonth>ValidityMonth</validityMonth>
<issuer>Issuer</issuer>
<bin>BIN</bin>
</cardData>
<product>
<subAmount>SubAmount</subAmount>
<params>
<param name="idBalancePoint" value="idBalancePoint"/>
<param name="invoiceNumber" value="invoiceNumber"/>
<param name="customerNumber" value="customerNumber"/>
<param name="subAmount" value="SubAmount"/>
</params>
</product>
</transaction>
</transactions>
<hash>Hash</hash>
</transactionList>
Status Płatności (paymentStatus) | Status Weryfikacji (verificationStatus) | Szczegóły Weryfikacji (verificationStatusReasons) | Szczegóły |
---|---|---|---|
PENDING | PENDING | Puste | Klient wybrał metodę płatności. |
SUCCESS | PENDING | Puste | Transakcja została opłacona, System oczekuje na pozyskanie danych wpłacającego z rachunku. |
SUCCESS | PENDING | NEED_FEEDBACK | Autopay oczekuje na spełnienie warunków formalnych przez Partnera. |
SUCCESS | POSITIVE | Puste | Weryfikacja przebiegła pozytywnie. |
SUCCESS | NEGATIVE | Lista powodów dla NEGATIVE | Weryfikacja negatywna. |
Status Płatności (paymentStatus) | Status Weryfikacji (verificationStatus) | Szczegóły Weryfikacji (verificationStatusReasons) | Szczegóły |
---|---|---|---|
PENDING | PENDING | Puste | Klient wybrał metodę płatności. |
FAILURE | PENDING | Puste | Transakcja nie została zakończona poprawnie. Status weryfikacji nie zostanie dostarczony. |
Komunikat ITN dla transakcji wejściowej zawiera oprócz statusu płatności (pole paymentStatus) szczegółowy opis tego statusu (pole paymentStatusDetails). Opis ten należy traktować informacyjnie, lista jego dozwolonych wartości jest ciągle powiększana i pojawienie się nowych wartości nie może pociągać za sobą brak akceptacji komunikatu ITN.
Wartość pola | Znaczenie pola |
---|---|
AUTHORIZED | transakcja zautoryzowana przez Kanał Płatności |
ACCEPTED | transakcja zatwierdzona przez Call Center (np. w wyniku pozytywnie rozpatrzonej reklamacji) |
REJECTED | transakcja przerwana przez Kanał Płatności (bank/agenta rozliczeniowego) |
REJECTED_BY_USER | transakcja przerwana przez Klienta |
INCORRECT_AMOUNT | wpłacono kwotę różną od kwoty podanej przy starcie transakcji |
EXPIRED | transakcja przeterminowana |
CANCELLED | transakcja anulowana przez Serwis Partnera lub Call Center (np. na prośbę Klienta). Nie jest możliwe wystartowanie nowej ani kontynuowanie wcześniej wystartowanej transakcji o tym samym OrderID |
RECURSION_INACTIVE | błąd aktywności płatności cyklicznej |
ANOTHER_ERROR | wystąpił inny błąd przy przetwarzaniu transakcji |
Wartość pola | Znaczenie pola | Opcjonalny kod błędu organizacji kartowej |
---|---|---|
CONNECTION_ERROR | błąd z połączeniem do banku wystawcy karty płatniczej | ✔ |
CARD_LIMIT_EXCEEDED | błąd limitów na karcie płatniczej | ✔ |
SECURITY_ERROR | błąd bezpieczeństwa (np. nieprawidłowy cvv) | ✔ |
DO_NOT_HONOR | odmowa autoryzacji w banku; sugerowany kontakt klienta z wystawcą karty | ✔ |
THREEDS_NEGATIVE | transakcja nieudana w systemie 3DS | ✔ |
CARD_EXPIRED | karta nieważna | ✔ |
INCORRECT_CARD_NUMBER | nieprawidłowy numer karty | ✔ |
FRAUD_SUSPECT | podejrzenie fraudu (np. zagubiona karta itp.) | ✔ |
STOP_RECURRING | rekurencja niemożliwa z powodu anulowania dyspozycji klienta | ✔ |
VOID | transakcja porzucona lub błąd komunikacyjny | ✖ |
UNCLASSIFIED | pozostałe błędy | ✔ |
Wartość pola | Znaczenie pola |
---|---|
INSUFFICIENT_FUNDS | Brak środków. Zalecane wyświetlenie Klientowi komunikatu o treści: Płatność nieudana – odmowa banku. Sprawdź powód odmowy w aplikacji bankowej. Jeśli powodem jest przekroczenie limitu, możesz go podwyższyć kontaktując się z bankiem. |
LIMIT_EXCEEDED | Błąd limitów (np. kwotowych). Zalecane wyświetlenie Klientowi komunikatu wyświetlenie informacji o treści: Płatność nieudana – odmowa banku. Sprawdź powód odmowy w aplikacji bankowej.. Jeśli powodem jest przekroczenie limitu, możesz go podwyższyć kontaktując się z bankiem. |
BAD_PIN | podano nieprawidłowy PIN podczas potwierdzania transakcji |
ISSUER_DECLINED, USER_DECLINED, SEC_DECLINED | transakcja przerwana przez Klienta |
TIMEOUT i AM_TIMEOUT | timeout w komunikacji z aplikacją mobilną banku |
USER_TIMEOUT | timeout oczekiwania na potwierdzenie transakcji przez Klienta |
W przypadku Partnera korzystającego z rozszerzonej struktury (Koszyka produktów z wieloma punktami rozliczeń), System udostępnia niezależne powiadamianie o zmianach statusów każdego z produktów. Taka usługa ma sens, jeśli poszczególne punkty rozliczeń powinny otrzymywać własne powiadomienia. W tym przypadku konfiguracja IPN (adres do powiadomień, umieszczane w komunikacie pola itp.) przechowywana jest właśnie na poziomie konfiguracji punktu rozliczeń. Struktura IPN jest podobna do ITN (rozszerzona jedynie o węzeł product podobny do opisanego w w rozdziale Dodatkowe pola w komunikacie ITN/IPN transakcji wejściowej, uzupełniony jedynie o powtórzenie kwoty subAmount w params). Przykład IPN w podrozdziale Dodatkowe pola w komunikacie ITN/IPN transakcji wejściowej).
Istnieje możliwość dostarczania komunikatów o wszystkich wypłatach (rozliczeniach, wypłatach z salda i zwrotach) wykonywanych przez System w ramach usługi płatności. Ponieważ usługa nie jest domyślnie uruchomiona, zapotrzebowanie na nią, wraz z adresem do wysyłki ISTN, musi być przez Partnera zgłoszone w trakcie ustalania wymagań.
W przypadku skutecznego uruchomienia komunikacji ISTN, System niezwłocznie przekazuje powiadomienia o fakcie zlecenia transakcji rozliczeniowej (ew. wypłatach/zwrotach) oraz zmianie jej statusu. Potwierdzenia przesyłane są, na ustalony w trakcie dodawania konfiguracji Serwisu Partnera, adres na serwerze Serwisu Partnera:
https://sklep_nazwa/odbior_informacji_o_rozliczeniu
Powiadomienie to polega na wysłaniu przez System dokumentu XML zawierającego nowe statusy transakcji. Dokument wysyłany jest protokołem HTTPS (domyślnie port 443). Dokument przesyłany jest metodą POST, jako parametr HTTP o nazwie transactions. Parametr ten zapisany jest mechanizmem kodowania transportowego Base64.
Format dokumentu (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transactionList>
<serviceID>ServiceID</serviceID>
<transactions>
<transaction>
<isRefund>true/false</isRefund>
<productID>ProductID</productID>
<orderID>OrderID</orderID>
<orderOutID>OrderOutID</orderOutID>
<remoteID>RemoteID</remoteID>
<remoteOutID>RemoteOutID</remoteOutID>
<amount>999999.99</amount>
<currency>PLN</currency>
<transferDate>YYYYMMDDhhmmss</transferDate>
<transferStatus>TransferStatus</transferStatus>
<transferStatusDetails>TranasferStatusDetails</transferStatusDetails>
<title>Title</title>
<receiverBank>ReceiverBank</receiverBank>
<receiverNRB>ReceiverNRB</receiverNRB>
<receiverName>ReceiverName</receiverName>
<receiverAddress>ReceiverAddress</receiverAddress>
<senderBank>SenderBank</senderBank>
<senderNRB>SenderNRB</senderNRB>
</transaction>
</transactions>
<hash>Hash</hash>
</transactionList>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | NIE | string{1,10} | Identyfikator Serwisu Partnera, nadawany w trakcie rejestracji usługi, jednoznacznie identyfikuje Serwis Partnera w Systemie płatności online. |
2 | isRefund | NIE | Boolean | Informacja, czy ISTN dotyczy zwrotu transakcji (true), czy normalnego rozliczenia (false). |
3 | productID | NIE | string{1,36} | Identyfikator rozliczanego produktu z koszyka produktów transakcji wejściowej, wartość pola musi być unikalna dla Serwisu Partnera. |
4 | orderID | NIE | string{1,32} | Identyfikator transakcji wejściowej o długości do 32 znaków alfanumerycznych alfabetu łacińskiego, wartość pola musi być unikalna dla Serwisu Partnera. |
5 | orderOutID | NIE | string{1,32} | Identyfikator transakcji wyjściowej o długości do 32 znaków alfanumerycznych alfabetu łacińskiego. Pole może być nadawane przez Serwis (w przypadku zlecenia rozliczenia) lub przez System płatności online. |
6 | remoteID | NIE | string{1,20} | Alfanumeryczny identyfikator transakcji wejściowej nadany przez System płatności online (podany, jeśli do rozliczenia dowiązana jest jedna wpłata). |
7 | remoteOutID | NIE | string{1,20} | Alfanumeryczny identyfikator transakcji rozliczeniowej nadany przez System płatności online. |
8 | amount | TAK | amount | Kwota transakcji. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. |
9 | currency | TAK | string{1,3} | Waluta transakcji. |
40 | transferDate | NIE | string{14} | Moment zautoryzowania transakcji, przekazywany w formacie YYYYMMDDhhmmss. (Czas CET). Występuje jedynie dla transferStatus=SUCCESS. |
41 | transferStatus | TAK | enum | Status autoryzacji transakcji rozliczeniowej. Przyjmuje następujące wartości: - PENDING – przelew oczekuje na wykonanie - SUCCESS – przelew zlecono do banku - FAILURE – nie można wykonać przelewu, np. błędny numer rachunku |
42 | transferStatusDetails | NIE | enum | Szczegółowy status transakcji, wartość może być ignorowana przez Serwis Partnera. Przyjmuje poniższe wartości (lista może zostać rozszerzona): - AUTHORIZED – transakcja przekazana do realizacji w banku - CONFIRMED – transakcja potwierdzona w banku (fizycznie wysłane pieniądze) - CANCELLED – transakcja anulowana przez Serwis Partnera lub Call Center (np. na prośbę Serwisu) - ANOTHER_ERROR – wystąpił inny błąd przy przetwarzaniu transakcji |
43 | title | NIE | string{1,140} | Tytuł przelewu rozliczającego transakcję. W niektórych przypadkach, niezależnych od AP tytuł przelewu rozliczeniowego może zostać samodzielnie zmodyfikowany przez Bank, z którego nastąpiło rozliczenie. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\\s.-/,!@#%\^\*()\_=+\[\]{};:? , gdzie znak "/" będzie podmieniany na "-" dla transakcji wychodzących. |
44 | receiverBank | NIE | string{1,64} | Nazwa banku, do którego System wykonał przelew. |
45 | receiverNRB | NIE | string{26} | Numer rachunku bankowego odbiorcy przelewu. |
46 | receiverName | NIE | string{1,140} | Nazwa odbiorcy przelewu. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\s.-/,!@#%^*()_=+[]{};:? |
47 | receiverAddress | NIE | string{1,140} | Adres odbiorcy przelewu. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\s.-/,!@#%^*()_=+[]{};:? |
48 | senderBank | NIE | string{1,64} | Nazwa banku, za pomocą którego System wykonał przelew. |
49 | senderNRB | NIE | string{26} | Numer rachunku bankowego nadawcy przelewu. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
W odpowiedzi na powiadomienie oczekiwany jest tekst w formacie XML (nie kodowany Base64), zwracany przez Serwis Partnera w tej samej sesji HTTP, zawierający potwierdzenie otrzymania statusu transakcji.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8"?>
<confirmationList>
<serviceID>ServiceID</serviceID>
<transactionsConfirmations>
<transactionConfirmed>
<remoteOutID>RemoteOutID</remoteOutID>
<confirmation>Confirmation</confirmation>
</transactionConfirmed>
</transactionsConfirmations>
<hash>Hash</hash>
</confirmationList>
Element confirmation służy do przekazania stanu weryfikacji autentyczności transakcji przez Serwis Partnera. Wartość elementu wyznaczana jest przez sprawdzenie poprawności wartości parametru serviceID, a także weryfikację zgodności wyliczonego skrótu z wartością przekazaną w polu hash.
Przewidziano dwie wartości tego elementu:
a) CONFIRMED – parametr hash jest zgodny – transakcja autentyczna;
b) NOTCONFIRMED – parametr hash jest niezgodny– transakcja nieautentyczna;
W wypadku braku poprawnej odpowiedzi na wysłane powiadomienia, System podejmie kolejne próby przekazania nowego statusu po upływie określonego czasu. Serwis Partnera powinien wykonywać własną logikę biznesową, jedynie po pierwszym komunikacie o danym statusie płatności.
WSKAZÓWKA: Warto zapoznać się ze Schematem ponawiania komunikatów ITN/ISTN/IPN/RPAN/RPDN.
W podstawowym modelu, System dostarczy jedynie status SUCCESS, możliwe jest jednak dokładniejsze powiadamianie. Opcja pełna powinna być zgłoszona podczas integracji i wiąże się z poniższym schematem przejść statusów.
Zlecenie transakcji rozliczeniowej powoduje wysłanie statusu PENDING. Później system dostarczy SUCCESS lub FAILURE. Dla transakcji, dla której wystąpił status SUCCESS, nie powinna już nastąpić zmiana statusu na FAILURE. Może jednakże nastąpić zmiana statusu szczegółowego (kolejne komunikaty o zmianie statusu szczegółowego są jedynie informacyjne i nie powinny pociągać za sobą ponownego wykonywania żadnej logiki biznesowej).
W szczególnych przypadkach (np. błąd w banku) transakcja pierwotnie potwierdzona, może zostać przekazana do ponownego wykonania, a więc zmienić swój status na PENDING i ponownie na SUCCESS.
Innym szczególnym przypadkiem może być status FAILURE (np. po błędzie wewnętrznym Systemu), następnie zastąpiony statusem SUCCESS.
Aby zbudować w Serwisie widok wyboru metody płatności, System umożliwia zdalne odpytanie o aktualną listę kanałów płatności. W tym celu należy wywołać metodę gatewayList (https://{host_bramki}/gatewayList/v3) z odpowiednimi parametrami (w formacie JSON). Wszystkie parametry przekazywane są za pomocą technologii REST. Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | integer | Identyfikator Serwisu Partnera. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Wartość pola musi być unikalna dla Serwisu Partnera. |
3 | Currencies | TAK | string{0,1000} | Lista walut, których lista dostępnych kanałów ma być zwrócona. Lista powinna być minimum jednoelementowa. Dopuszczalne są wartości: PLN, EUR, GBP, USD. |
4 | Language | TAK | string{2} | Język w jakim będą zwrócone opisy metod płatnosci. Dopuszczalne wartości: PL,EN,DE,FR,IT,ES,CS,RO,SK,HU,UK,EL,HR,SL,TR,BG. |
5 | Hash | TAK | string{64} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji |
Przykładowy komunikat
{
"ServiceID": 47498,
"MessageID": "11111111111111111111111111111111",
"Currencies":"PLN,EUR",
"Language": "PL",
"Hash": "306519f632e53a5e662de0125da7ac3f8135c7e4080900f2b145d4b25ff1b55d"
}
W odpowiedzi na żądanie, w tej samej sesji HTTP, zwracane są 2 listy z definicjami:
a) Kanałów płatności (węzeł gatewayList
)
b) Grup płatności (węzeł gatewayGroups
)
Poniżej szczegółowy opis zwracanego komunikatu:
nazwa | wymagany | typ | opis | |
---|---|---|---|---|
1 | result | TAK | string{1,5} | Status odpowiedzi. Dopuszczalne wartości: - OK - ERROR |
2 | errorStatus | TAK | string{1,100} | Status błędu, wypełniany w przypadku błędu (w przeciwnym wypadku null). |
3 | description | TAK | string{1,500} | Opis błędu, wypełniany w przypadku błędu (w przeciwnym wypadku null). |
4 | gatewayGroups | TAK | list | Lista zawierająca grupy płatności. |
4.1 | type | TAK | string{1,20} | Typ grupy płatności. Każda definicja płatności przypisana jest do jednego z typów. |
4.2 | title | TAK | string{1,50} | Nazwa grupy płatności. |
4.3 | shortDescription | NIE | string{1,200} | Krótki opis grupy płatności. |
4.4 | description | NIE | string{1,1000} | Szczegółowy opis grupy płatności. |
4.5 | order | TAK | integer | Rekomendowana kolejność wyświetlania grup płatności. |
4.6 | iconUrl | NIE | string{1,100} | Adres, z którego można pobrać logotyp grupy płatności. |
5 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera; pochodzi z żądania metody. |
6 | messageID | TAK | string{32} | Identyfikator komunikatu pochodzący z żądania metody. |
7 | gatewayList | NIE | list | Lista zawierająca kolejne kanały płatności (pusta w przypadku braku skonfigurowanych kanałów płatności). |
7.1 | gatewayID | TAK | integer{1,5} | Identyfikator Kanału Płatności, za pomocą którego Klient może uregulować płatność. |
7.2 | name | TAK | string{1,200} | Nazwa Kanału Płatności, którą można wyświetlić na liście dostępnych banków. |
7.3 | groupType | NIE | string{1,30} | Typ, służący do grupowania Kanałów Płatności na ich liście. Parametr przyjmuje wartości z węzła gatewayGroups . |
7.4 | bankName | NIE | string{1,32} | Nazwa banku. |
7.5 | iconUrl | NIE | string{1,100} | Adres, z którego można pobrać logotyp Kanału Płatności. |
7.6 | state | TAK | string{1,64} | Informacja o stanie dostępności kanału. Przyjmuje wartości: - OK – kanał dostępny - TEMPORARY_DISABLED – kanał chwilowo niedostępny (np. z powodu prac po stronie banku) - DISABLED – kanał niedostępny (usługa zawieszona na dłuższy okres) |
7.7 | stateDate | NIE | string{1,19} | Moment ostatniej aktualizacji statusu Kanału Płatności; przykładowa wartość: 2023-08-28 00:00:01. (Czas CET) |
7.8 | shortDescription | NIE | string{1,200} | Opcjonalne pole zawierające krótki opis kanału płatności. Można wyświetlić po jego zaznaczeniu. |
7.9 | description | NIE | string{1,1000} | Opcjonalne pole opisujące szczegółowo kanał płatności (może być z użyciem znaczników HTML). |
7.10 | descriptionUrl | NIE | string{1,200} | Opcjonalne pole zawirające link do zewnętrznej strony opisującej szczegółowo kanał płatności. |
7.11 | availableFor | TAK | string{2,10} | Wartość tego pola wskazuje dla jakiego Klienta przeznaczony jest kanał płatności:B2C - metoda płatności przeznaczona dla osób fizycznych B2B - metoda płatności dla firm BOTH - metoda płatności dla wszystkich klientów.Na podstawie tego parametru należy decydować czy kanał płatności powinien być zaprezentowany Klientowi. |
7.12 | requiredParams | NIE | lista | Lista parametrów wymaganych przy wybraniu danej metody płatności. Dla przykładu, start transakcji dla metody płatności z grupy B2B powinien zawierać parametr Nip . Wymagane parametry opisane są w sekcji: Rozpoczęcie transakcji z dodatkowymi parametrami.Aktualnie takimi parametrami mogą być: Nip oraz AccountHolderName . |
7.13 | mcc | NIE | object | Merchant Category Code. Węzeł opcjonalny, dodatkowo konfigurowalny. W szczególnych przypadkach, dla serwisów zawierających produkty z różnych kategorii możemy zwracać listę dozwolonych i zabronionych kodów MCC tak by Merchant po swojej stronie mógł zdecydować czy metodę płatności może zaprezentować czy nie. |
7.13.1 | allowed | NIE | list | Lista dozwolonych kodów MCC. |
7.13.2 | disallowed | NIE | list | Lista zabronionych kodów MCC. |
7.14 | inBalanceAllowed | NIE | boolean | Informacja czy kanał może być użyty (po uzgodnieniach biznesowych) do zasilania salda przedpłaconego (start transakcji z użyciem parametru TransactionSettlementMode=NONE). |
7.15 | minValidityTime | NIE | integer | Minimalny czas ważności transakcji w minutach. Pojawia się dla kanałów gdzie ustalenie statusu płatności trwa dłużej niż zwykle. |
7.16 | order | TAK | integer | Rekomendowana kolejność wyświetlania metody płatności. |
7.17 | currencies | TAK | lista | Lista zawierająca waluty dostępne dla kanału płatności, wraz z ograniczeniami kwot. |
7.17.1 | currency | TAK | string{3} | Waluta, którą można opłacić tym kanałem. W przypadku dostępności dla danego kanału płatności w wielu walutach, lista będzie zawierać więcej niż jeden element. Dopuszczalne jedynie wartości: PLN, EUR, GBP oraz USD. Do liczenia wartości Hash pobierane są wartości kolejnych węzłów currencies. |
7.17.2 | minAmount | NIE | amount | Minimalna kwota transakcji, którą można opłacić tym kanałem. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. Pole występuje tylko dla niektórych kanałów, wartość jest wyrażona w walucie pola currency. Do liczenia wartości Hash pobierane są wartości kolejnych węzłów currencies. |
7.17.3 | maxAmount | NIE | amount | Maksymalna kwota transakcji, którą można opłacić tym kanałem. Jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. Pole występuje tylko dla niektórych kanałów, wartość jest wyrażona w walucie pola currency. Do liczenia wartości Hash pobierane są wartości kolejnych węzłów currencies. |
7.18 | buttonTitle | TAK | string | Sugerowany komunikat jaki powinien zaprezentować na przycisku "zapłać" po wyborze kanału płatności. |
Przykładowa odpowiedź
{
"result": "OK",
"errorStatus": null,
"description": null,
"gatewayGroups": [
{
"type": "PBL",
"title": "Przelew internetowy",
"shortDescription": "Wybierz bank, z którego chcesz zlecić płatność",
"description": null,
"order": 1,
"iconUrl": null
},
{
"type": "FR",
"title": "Dane do przelewu",
"shortDescription": "Zleć przelew wykorzystując podane dane",
"description": null,
"order": 2,
"iconUrl": null
},
{
"type": "BNPL",
"title": "Kup teraz, zapłać później",
"shortDescription": "Kup teraz, zapłać później",
"description": null,
"order": 3,
"iconUrl": null
}
],
"serviceID": "10000",
"messageID": "2ca19ceb5258ce0aa3bc815e80240000",
"gatewayList": [
{
"gatewayID": 106,
"name": "Płatność testowa PBL",
"groupType": "PBL",
"bankName": "NONE",
"iconURL": "https://testimages.autopay.eu/pomoc/grafika/106.gif",
"state": "OK",
"stateDate": "2023-10-03 14:35:01",
"description": "Płatność testowa",
"shortDescription": null,
"descriptionUrl": null,
"availableFor": "BOTH",
"requiredParams": ["Nip"],
"mcc": {
"allowed": [1234, 9876],
"disallowed": [1111]
},
"inBalanceAllowed": true,
"minValidityTime": null,
"order": 1,
"currencies": [
{
"currency": "PLN",
"minAmount": 0.01,
"maxAmount": 5000.00
}
],
"buttonTitle": "Płacę"
},
{
"gatewayID": 9,
"name": "Przelew z innego banku",
"groupType": "FR",
"bankName": "BANK TEST",
"iconURL": "https://testimages.autopay.eu/pomoc/grafika/9.gif",
"state": "OK",
"stateDate": "2023-10-03 14:35:02",
"description": "<b>Szybki przelew</b>",
"shortDescription": "Szybki przelew",
"descriptionUrl": null,
"availableFor": "BOTH",
"requiredParams": [],
"mcc": null,
"inBalanceAllowed": true,
"minValidityTime": null,
"order": 2,
"currencies": [
{
"currency": "PLN"
}
],
"buttonTitle": "Wygeneruj dane do przelewu"
},
{
"id": 701,
"name": "Zapłać później z Payka",
"groupType": "BNPL",
"bankName": "NONE",
"iconUrl": "https://testimages.autopay.eu/pomoc/grafika/701.png",
"state": "OK",
"stateDate": "2023-10-03 14:37:10",
"description": "<div class=\"payway_desc\"><h1>Dane dotyczące kosztu</h1><p>Zapłać później - jednorazowo do 45 dni (...). Szczegóły oferty na: <a href="?r="https://payka.pl\" target=\"_blank\">Payka.pl</a></p></div>",
"shortDescription": "Zapłać później - jednorazowo do 45 dni lub w kilku równych ratach",
"descriptionUrl": null,
"availableFor": "B2C",
"requiredParams": [],
"mcc": null,
"inBalanceAllowed": false,
"minValidityTime": 60,
"order": 3,
"currencies": [
{
"currency": "PLN",
"minAmount": 49.99,
"maxAmount": 7000.00
}
],
"buttonTitle": "Płacę"
}
]
}
UWAGA: Wynik odpytania metody powinno się zapisywać i odświeżać co minutę celem zbadania dostępności kanału. W przypadku braku lub nieprawidłowej odpowiedzi, należy wyświetlić ostatnią znaną i poprawną konfigurację Kanałów Płatności. Jest to drugi powód do przechowywania tymczasowej kopii gatewayList w Serwisie Partnera. Jako nieprawidłową odpowiedź należy traktować pustą odpowiedź, timeout, bądź pustą listę węzłów gatewayGroups czy gatewayList.
Opis integracji umożliwiający używanie listy płatności osadzonej w serwisie (lub aplikacji mobilnej), bez kroków przejściowych. W niektórych przypadkach zamiast kroku przejściowego, standardowe zachowanie systemu przewiduje blokadę startu transakcji.
Należy wyświetlić odpowiednie treści formalne (a więc klauzule informacyjne oraz ew. regulaminy) już w momencie wyboru formy płatności, a następnie przekazać do Systemu Płatności Online potwierdzenie ich wyświetlenia oraz ew. akceptacji (w postaci identyfikatorów).
System umożliwia zdalne odpytanie o aktualną listę obowiązków i powiązanych treści formalnych. W tym celu należy wywołać metodę legalData (https://{host_bramki}/legalData) z odpowiednimi parametrami (w formacie JSON).
WSKAZÓWKA: Wszystkie parametry przekazywane są za pomocą technologii REST. Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | integer | Identyfikator Serwisu Partnera. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Wartość pola musi być unikalna dla Serwisu Partnera. |
3 | GatewayID | TAK | integer{1,5} | Identyfikator Kanału Płatności, za pomocą, którego Klient zamierza uregulować płatność. |
4 | Language | TAK | string{2} | Język, w jakim są prezentowane treści w Serwisie. Dopuszczalne wartości PL, EN, DE, CS, ES, FR, IT, SK, RO, HU, UK. Użycie wartości innych niż PL powinno być potwierdzone w trakcie integracji i zależeć od faktycznego wyboru (przez Klienta) języka w Serwisie. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
Przykładowy komunikat
{
"ServiceID": 102422,
"MessageID": "11111111111111111111111111111111",
"GatewayID": 1500,
"Language": "PL",
"Hash":"61789013d932e2bc728d6206f7e9222b93e3176f7f07f6aa8cce1ccd65afaf0d"
}
W odpowiedzi na żądanie zwracana jest (w tej samej sesji HTTP) lista, zawierająca kolejne treści formalne w postaci: ID, typ i brzmienie treści, ich umiejscowienie w Serwisie, adres do regulaminu oraz inne informacje dodatkowe.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | result | TAK | string{1,5} | Status odpowiedzi. Dopuszczalne wartości: - OK - ERROR |
2 | errorStatus | TAK | string{1,100} | Status błędu, wypełniany w przypadku błędu. W przeciwnym wypadku null. |
3 | description | TAK | string{1,500} | Opis błędu, wypełniany w przypadku błędu. W przeciwnym wypadku null. |
4 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera; pochodzi z żądania metody. |
5 | messageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. |
6 | gatewayID | TAK | integer{1,5} | Identyfikator Kanału Płatności, za pomocą którego Klient może uregulować płatność. |
7 | language | TAK | string{2} | Język, w jakim System zwraca treści (klauzule i regulaminy). |
8 | serviceModel | TAK | string{1,20} | Pole oznaczające model, w którym pracuje serwis, na potrzeby ew. przyszłych wytycznych w oparciu o te wartości (aktualnie o wartościach: MERCHANT, PAYER). W tym momencie powinno być ignorowane. |
nd. | regulationList | TAK | list | Lista zawierająca treści formalne dostępne dla kanału płatności. |
9 | regulationID | TAK | integer{1,10} | Identyfikator treści formalnej, który (w przypadku jego akceptacji przez Klienta) powinien być przekazany w parametrze startowym DefaultRegulationAcceptanceID, lub RecurringAcceptanceID (odpowiednio dla typu DEFAULT i RECURRING). Sposób akceptacji określają pola showCheckbox i isCheckboxRequired. UWAGA: Ta wartość może się powtarzać dla wywołań o różnych GatewayID, gdyż regulaminy są przyporządkowane raczej grupie kanałów płatności, a nie pojedynczym kanałom. |
10 | type | TAK | string{1,64} | Typ obowiązku formalnego. Przewidziane wartości: - DEFAULT – klauzula (lub klauzule) oraz regulamin płatności w modelu usługi świadczonej przez AP na rzecz Klienta - RECURRING – klauzule (lub klauzule) oraz regulamin płatności automatycznej. Wartość dostępna tylko, jeśli skonfigurowana jest usługa płatności automatycznej - PSD2 – klauzula dedykowana kanałom typu PSD2 (w tej chwili wartość nie jest używana) - RODO – klauzula informacyjna dotycząca przetwarzania danych osobowych - PRIVACY – klauzula informacyjna dotycząca polityki prywatności |
11 | url | NIE | string{1,500} | Adres do pliku z regulaminem (do samodzielnego osadzenia w Serwisie). Standardowo, jeśli tak stanowi obowiązek formalny, powinien być częścią jednej z jego klauzul, tj. pola inputLabel. WSKAZÓWKA: Pojawia się w przypadku wystąpienia dokumentu powiązanego ze zgodą. |
nd. | labelList | TAK | list | Lista zawierająca klauzule dostępne dla danego obowiązku formalnego. Obowiązek ten może wymagać wyświetlenia jednej lub więcej treści. |
12 | labelID | TAK | integer{1,10} | Identyfikator klauzuli, przekazywane na potrzeby diagnostyczne (może być przez Partnera ignorowany). |
13 | inputLabel | TAK | string{1,500} | Treść klauzuli do wyświetlenia w Serwisie w powiązaniu z odpowiednim regulationID. W niektórych przypadkach może zawierać link do regulaminu. |
14 | placement | NIE | string{1,64} | Informacja, stanowiąca sugestię, gdzie umieścić klauzule. Aktualne wartości: - TOP_OF_PAGE – na górze Serwisu (np. w okolicach logo/bannera górnego) - NEAR_PAYWALL – w okolicach listy kanałów płatności (bezpośrednio nad, pod lub obok) - ABOVE_BUTTON – nad przyciskiem „Rozpocznij płatność" - BOTTOM_OF_PAGE – na samym dole strony (zazwyczaj dotyczy klauzul informacyjnych RODO, PRIVACY) |
15 | showCheckbox | TAK | boolean | Informacja czy klauzula powinna być wyświetlana obok checkboxa do akceptacji przez użytkownika. |
16 | checkboxRequired | TAK | boolean | Informacja, czy wyświetlany Checkbox musi zostać zaznaczony przez użytkownika, aby móc przejść do płatności. UWAGA: W przypadku wartości true, należy zablokować przycisk „Rozpocznij płatność", do czasu zaznaczenia checkboxa. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
Przykładowa odpowiedź
{
"serviceID": "102422",
"messageID": "11111111111111111111111111111111",
"gatewayID": "1500",
"language": "PL",
"serviceModel": "PAYER",
"regulationList": [
{
"regulationID": 6288,
"type": "RECURRING",
"url": "https://host/path?params",
"labelList": [
{
"labelID": 1,
"inputLabel": "<ul><li>\r\nZapoznałem się i akceptuję <a id=\"regulations_pdf\" target=\"_blank\" href=https://{host_bramki}/path?params>Regulamin świadczenia usług płatniczych</a> oraz <a class=\"privacy-policy\" href=\"https://{host_bramki}/polityka-prywatnosci.pdf\" target=\"_blank\">Politykę prywatności</a></li><li>\r\nChcę aby usługa została zrealizowana niezwłocznie, a w przypadku odstąpienia od umowy, wiem, że nie otrzymam zwrotu poniesionych kosztów za usługi zrealizowane na moje żądanie do chwili odstąpienia od umowy\r\n</li></ul>",
"placement": "ABOVE_BUTTON",
"showCheckbox": true,
"checkboxRequired": true
}
]
},
{
"regulationID": 1,
"type": "PRIVACY",
"labelList": [
{
"labelID": 1,
"inputLabel": "Autopay korzysta z plików cookie. Pozostając na tej stronie, wyrażasz zgodę na korzystanie z plików cookie zgodnie z <a class=\"privacy-policy\" href="?r="https://{host_bramki}/polityka-prywatnosci.pdf\" target=\"_blank\">Polityką prywatności Autopay S.A. </a> Możesz samodzielnie zarządzać cookies zmieniając odpowiednio ustawienia swojej przeglądarki lub oprogramowania urządzenia."
"placement": "BOTTOM_OF_PAGE",
"showCheckbox": false,
"checkboxRequired": false
}
]
}
],
"hash": "61789013d932e2bc728d6206f7e9222b93e3176f7f07f6aa8cce1ccd65afaf0d",
"result": "OK",
"errorStatus": null,
"description": null
}
Ponieważ wymogi formalne dotyczące treści klauzul, ich rozmieszczenie oraz sposób akceptacji zależą od stosowanego kanału płatniczego, metoda ta powinna być wywoływana każdorazowo po jego wyborze (stąd obowiązkowy parametr GatewayID).
Odpowiednie treści i zachowanie powinny być dynamicznie dostosowywane do odpowiedzi z Systemu (np. powinien pojawić się wymagany checkbox z klauzulą informacyjną oraz linkiem do regulaminu). Oczywiście, aby aplikacja działała szybko, mile widziane jest używanie cache do zapamiętywania odpowiedzi niedawno wykonanych wywołań (np. na 1 minutę).
Wyświetlona (i ew. zatwierdzona) w momencie przejścia do płatności zgoda, powinna być potwierdzona w Systemie poprzez dołączenie do komunikatu startu transakcji w parametrze startowym jej identyfikatora (a więc odpowiednią wartość regulationID).
W zależności od wartości pola type regulaminu:
- dla wyświetlanej/akceptowanej klauzuli o type=DEFAULT:
a. do parametru DefaultRegulationAcceptanceID powinna trafiać jej wartość regulationID;
b. do parametru DefaultRegulationAcceptanceState powinna trafić wartość ACCEPTED oraz
c. do parametru DefaultRegulationAcceptanceTime powinna trafić wartość odpowiadająca chwili akceptacji zgody poprzez zaznaczenie checkboxa oraz kliknięcie przycisku „Rozpocznij płatność"
- dla wyświetlanej/akceptowanej klauzuli o type=RECURRING:
a. do parametru RecurringAcceptanceID powinna trafiać jej wartość regulationID;
b. do parametru RecurringAcceptanceState powinna trafić wartość ACCEPTED oraz
c. do parametru RecurringAcceptanceTime powinna trafić wartość odpowiadająca chwili akceptacji zgody poprzez zaznaczenie checkboxa oraz kliknięcie przycisku „Rozpocznij płatność"
UWAGA: Pola (np. serviceModel, url, labelID) i wartości pól (np. PSD2, RODO, PRIVACY) metody legalData nie są wymagane do obsługi, ale należy przewidzieć możliwość ich występowania w odpowiedzi na żądanie.
Dla wszystkich serwisów możliwe jest odpytanie o aktualny stan salda. W tym celu należy wywołać metodę balanceGet https://{host_bramki}/webapi/balanceGet z odpowiednimi parametrami. Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
1 | BalancePointID | TAK | string{1,10} | Identyfikator Punktu Rozliczeń. UWAGA: Wymagane jedno z pól ServiceID lub BalancePointID. Podanie obu spowoduje zatrzymanie przetwarzania żądania oraz błąd http. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Wartość pola musi być unikalna dla Serwisu Partnera. |
3 | PlenipotentiaryID | NIE | string{8,8} | Identyfikator pełnomocnika. Jeżeli jest obecny to do obliczania Hash jest używany klucz współdzielony pełnomocnika, a nie główny klucz serwisu/punktu rozliczeń. Wpływa też na Hash w odpowiedzi na ten komunikat. WAŻNE! Użycie tego pola wymaga specjalnych uzgodnień biznesowych. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Stosowany jest klucz współdzielony przypisany do zastosowanego identyfikatora konfiguracji (Serwisu, bądź Punktu Rozliczeń). Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
W odpowiedzi na żądanie zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, zawierający potwierdzenie przyjęcia operacji do realizacji lub opis błędu.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<balanceGet>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<balance>Balance</balance>
<currency>Currency</currency>
<hash>Hash</hash>
</balanceGet>
lub
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<balanceGet>
<balancePointID>BalancePointID</balancePointID>
<messageID>MessageID</messageID>
<balance>Balance</balance>
<currency>Currency</currency>
<hash>Hash</hash>
</balanceGet>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. Pochodzi z żądania metody. |
1 | balancePointID | TAK | string{1,10} | Identyfikator Punktu Rozliczeń. Pochodzi z żądania metody. UWAGA: Zwrócone zostanie jedno z pól ServiceID lub BalancePointID. |
2 | messageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. |
3 | balance | TAK | amount | Wartość salda; jako separator dziesiętny używana jest kropka - '.' Format: 0.00. |
4 | currency | TAK | string{1,3} | Waluta salda. Dopuszczalne jedynie wartości: PLN, EUR, GBP oraz USD. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Stosowany jest klucz współdzielony przypisany do zastosowanego identyfikatora konfiguracji (Serwisu, bądź Punktu Rozliczeń). Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
Dla serwisów posiadających saldo w Systemie, możliwe jest wykonanie operacji zasilenia salda na poczet przyszłych zwrotów. W tym celu należy wykonać start transakcji z parametrem TransactionSettlementMode o wartości NONE oraz Amount wskazującym kwotę zasilenia.
Skorzystanie z Przedtransakcji pozwoli na proste dostarczenie gotowej transakcji do płatnika (np. podając w CustomerEmail adres księgowości Partnera).
UWAGA: Usługa musi zostać uzgodnienia z opiekunem biznesowym. W modelu Marketplace konieczne będzie ponadto zbudowanie koszyka produktów wskazującego jaki Punkt Rozliczeń (BalancePointID) ma zostać zasilony.
Dla serwisów posiadających saldo w Systemie, możliwe jest wykonanie operacji wypłaty całości bądź części salda na zdefiniowany rachunek do rozliczeń. W tym celu należy wywołać metodę balancePayoff (https://{host_bramki}/settlementapi/balancePayoff) z odpowiednimi parametrami.
Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
UWAGA: Wymagane jedno z pól ServiceID lub BalancePointID.
Podanie obu spowoduje zatrzymanie przetwarzania żądania oraz błąd http.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
1 | BalancePointID | TAK | string{1,10} | Identyfikator Punktu Rozliczeń. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID), wartość pola musi być unikalna i wskazywać konkretne zlecenie wypłaty w Serwisie Partnera. Weryfikacja unikalności po stronie Systemu pozwala na ponawianie MessageID w przypadku problemów z komunikacją (ponowienie tej wartości skutkować będzie potwierdzeniem zlecenia, bez ponownego wykonania w Systemie). |
3 | Amount | NIE | amount | Kwota wypłaty z salda (nie może być większa niż aktualne saldo serwisu); niepodanie tego parametru skutkuje wypłatą całości środków zgromadzonych na saldzie; jako separator dziesiętny używana jest kropka - '.' Format: 0.00. |
4 | Currency | NIE | string{1,3} | Waluta wypłaty. Domyślną walutą jest PLN (użycie innej waluty musi być uzgodnione w trakcie integracji). W ramach ServiceID obsługiwana jest jedna waluta. Dopuszczalne jedynie wartości: PLN, EUR, GBP oraz USD. |
5 | CustomerNRB | NIE | string{26} | Numer rachunku, na który ma być wykonana wypłata z salda. Domyślnie konfiguracja wypłat nie zezwala na definiowanie tej wartości w żądaniu metody balancePayoff. Należy takie zapotrzebowanie zgłosić w trakcie integracji. UWAGA: W niektórych modelach użycie tego pola może następować jedynie w przypadku żądań z listy zaufanych IP oraz zastosowaniu jednego z 3 dodatkowych elementów: - zabezpieczenie komunikacji certyfikatem klienckim lub - zabezpieczenie komunikacji tunelem IPSec lub - użycie wartości parametru CustomerNRB z listy zaufanych rachunków Niespełnienie ich kończy się błędem CUSTOMER_NRB_NOT_AUTHORIZED. Administratorzy panelu Systemu (https://portal.autopay.eu/admin) mogą samodzielnie aktualizować listy zaufanych IP i NRB w zakładce Kontrola dostępu konfiguracji serwisu. Dopuszczalne tylko cyfry. Jeśli w trakcie integracji ustalono wykorzystanie rachunków spoza Polski, wtedy pole przenosi IBAN i oczekiwany zakres danych pola zmienia się na: alfanumeryczne znaki alfabetu łacińskiego (min. 15, max. 32 znaki). |
6 | SwiftCode | NIE | string{8,11} | Kod swift odpowiadający podanemu numerowi rachunku. Dopuszczalne tylko cyfry. Parametr podawany, jeśli w trakcie integracji ustalono wykorzystanie rachunków spoza Polski. |
7 | ForeignTransferMode | NIE | string{4,5} | System jakim ma zostać wykonany zagraniczny przelew rozliczeniowy: - SEPA (Single Euro Payments Area) - możliwy do wykonania przelewu w walucie Euro w obrębie państw członkowskich Unii Europejskiej, jak i innych państwach na terenie Starego Kontynentu, np. Islandii, Liechtensteinu, Norwegii, Szwajcarii, Monako czy Andory, - SWIFT – przelewy zagraniczne niemożliwe do wykonania za pomocą SEPA (np. inna waluta niż Euro. Opcja ta wiąże się z wyższymi kosztami wykonania przelewu niż w przypadku SEPA. Dopuszczalne wartości: SEPA i SWIFT. Parametr podawany, jeśli w trakcie integracji ustalono wykorzystanie rachunków spoza Polski. |
8 | ReceiverName | NIE | string{35} | Nazwa odbiorcy wypłaty z salda. Domyślnie konfiguracja wypłat nie zezwala na definiowanie tej wartości w żądaniu metody balancePayoff. Należy takie zapotrzebowanie zgłosić w trakcie integracji. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\s.-/,!()=[]{};:? |
9 | Title | NIE | string{32} | Tytuł wypłaty z salda. Domyślnie konfiguracja wypłat nie zezwala na definiowanie tej wartości w żądaniu metody balancePayoff. Należy takie zapotrzebowanie zgłosić w trakcie integracji. W niektórych przypadkach, niezależnych od AP, ten tytuł może zostać samodzielnie zmodyfikowany przez Bank. Dopuszczalne alfanumeryczne znaki alfabetu łacińskiego oraz znaki z zakresu: ĘęÓ󥹌śŁłŻżŹźĆćŃń\s.-/,!()", gdzie znak "/" będzie podmieniany na "-" dla transakcji wychodzących. |
10 | RemoteRefID | NIE | string{1,20} | Alfanumeryczny identyfikator transakcji wejściowej nadany przez System oraz przekazywany do Partnera w komunikacie ITN transakcji wejściowej. Wartość w tym komunikacie służy wskazaniu instrumentu płatniczego (karty, rachunku etc.), który ma zostać użyty do wykonania wypłaty. |
11 | InvoiceNumber | NIE | string{1,100} | Numer dokumentu finansowego w Serwisie. W tym komunikacie wartość służy wskazaniu faktury korygującej powiązanej z wypłatą. |
12 | PlenipotentiaryID | NIE | string{8,8} | Identyfikator pełnomocnika. Jeżeli jest obecny to do obliczania Hash jest używany klucz współdzielony pełnomocnika, a nie główny klucz serwisu/punktu rozliczeń. Wpływa też na Hash w odpowiedzi na ten komunikat. WAŻNE! Użycie tego pola wymaga specjalnych uzgodnień biznesowych. |
nd. | Hash | TAK | string{1,128} | Stosowany jest klucz współdzielony przypisany do zastosowanego identyfikatora konfiguracji (Serwisu lub Punktu Rozliczeń). Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
Po otrzymaniu żądania wypłaty z salda System wykonuje wstępną weryfikację pod kątem przesłanych w komunikacie pól i ich wartości oraz zapisuje zlecenie do wykonania. W odpowiedzi na żądanie zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, zawierający potwierdzenie zapisania zlecenia w kolejce do wykonania lub opis błędu(struktura komunikatu błędu opisana w części Komunikaty błędu.
UWAGA: Potwierdzenie przyjęcia zlecania nie jest równoznaczne z faktycznym jego wykonaniem. Wypłata z salda może być realizowana do 30 minut od momentu wysyłki żądania wypłaty i nie zawsze może się zakończyć sukcesem. W przypadku problemów napotkanych podczas procesowania wypłaty z salda (np. niewystarczające środki na saldzie) następnego dnia roboczego wysyłany jest raport zawierający informację o wypłatach z salda, które nie doszły do skutku.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<balancePayoff>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<hash>Hash</hash>
</balancePayoff>
lub
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<balancePayoff>
<balancePointID>BalancePointID</balancePointID>
<messageID>MessageID</messageID>
<hash>Hash</hash>
</balancePayoff>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. Pochodzi z żądania metody. |
1 | balancePointID | TAK | string{1,10} | Identyfikator Punktu Rozliczeń. Pochodzi z żądania metody. UWAGA: Zwrócone zostanie jedno z pól ServiceID lub BalancePointID. |
2 | messageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
UWAGA: Za błąd uznać można wszystkie odpowiedzi inne niż założona (tj. z niepoprawnymi polami, w szczególności pustym lub niepoprawnym hash). W przypadku, gdy System zautoryzuje nadawcę komunikatu zwrotu, jednak nie uda się wykonać operacji, odpowiedź będzie zgodna ze schematem opisanym w części Komunikaty błędu. W przypadku błędu komunikacji lub braku wystarczającego salda (np. ON_DEMAND_ERROR) można ponowić zlecenie. W przypadku blokady salda (BALANCE_DISABLED) lub nieaktywnej konfiguracji (PARTNER_DISABLED) nie należy ponawiać zlecenia.
WAŻNE! W przypadku błędu zwróconego w odpowiedzi na żądanie wypłaty z salda można ponowić zlecenie, należy jednak pamiętać o tym, że każde zlecenie wypłaty nie kończące się błędem może zostać wykonane. W przypadku problemów z połączeniem, przekroczenia maksymalnego czasu oczekiwania na odpowiedź, żądanie może zostać ponowione z tym samym MessageID bez obawy o zduplikowanie zlecenia.
W przypadku blokady salda (BALANCE_DISABLED) lub nieaktywnej konfiguracji (PARTNER_DISABLED) nie należy ponawiać zlecenia. 3 błędy pod rząd (bez względu na przyczynę) powodują blokadę usługi wypłat na żądanie dla określonego IP nadawcy komunikatu na 10 minut – wywołania w tym czasie dla tego IP będą kończyć się błędem TEMPORARY_DISABLED.
Dla serwisów posiadających saldo w Systemie, możliwe jest wykonanie operacji zwrotu do Klienta całości bądź części kwoty wpłaconej na rzecz wskazanej transakcji. Skuteczny zwrot całości transakcji można wykonać jeden raz (w przypadku ponownej próby zlecenia zwrotu tej samej transakcji, System zwraca odpowiednio opisany błąd). Zwroty części kwoty transakcji można na niej wykonywać wiele razy, o ile ich suma nie przekroczy kwoty wpłaty.
Aby wykonać zwrot transakcji, należy wywołać metodę transactionRefund (https://{host_bramki}/settlementapi/transactionRefund) z odpowiednimi parametrami. Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID), wartość pola musi być unikalna i wskazywać konkretne zlecenie wypłaty w Serwisie Partnera. Weryfikacja unikalności po stronie Systemu pozwala na ponawianie MessageID w przypadku problemów z komunikacją (ponowienie tej wartości skutkować będzie potwierdzeniem zlecenia, bez ponownego wykonania w Systemie). |
3 | RemoteID | TAK | string{1,20} | Alfanumeryczny identyfikator zwracanej transakcji wejściowej nadany przez System oraz przekazywany do Partnera w komunikacie ITN transakcji wejściowej. |
4 | Amount | NIE | amount | Kwota wypłaty z salda (nie może być większa niż aktualne saldo serwisu); niepodanie tego parametru skutkuje wypłatą całości środków zgromadzonych na saldzie; jako separator dziesiętny używana jest kropka - '.' Format: 0.00. W modelu Marketplace, pole musi być puste (zwrot całkowity). W przeciwnym wypadku nie byłoby możliwości wskazania punktu/ów rozliczeń, do obciążenia za taką operację. Przy zwrocie całkowitym saldo jest potrącane zgodnie z sumą kwot produktów danego punktu rozliczeń. |
5 | Currency | NIE | string{1,3} | Waluta wypłaty. Domyślną walutą jest PLN (użycie innej waluty musi być uzgodnione w trakcie integracji). W ramach ServiceID obsługiwana jest jedna waluta. Dopuszczalne jedynie wartości: PLN, EUR, GBP oraz USD. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
W odpowiedzi na żądanie zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, zawierający potwierdzenie wykonania operacji lub opis błędu (opis poniżej).
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<transactionRefund>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<hash>Hash</hash>
</transactionRefund>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. Pochodzi z żądania metody. |
2 | messageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
Opcja wykonywania zwrotów do opłaconych transakcji możliwa jest do 12 miesięcy wstecz, licząc od daty rozpoczęcia transakcji. Wyjątek stanowią płatności BLIK, które ze względu na ograniczenia czasowe po stronie dostawcy Kanału płatności, można zwracać do 6 miesięcy wstecz.
Powyższe terminy dotyczą realizowania zwrotów poprzez panel administracyjny oraz transactionRefund, np. za pośrednictwem własnych narzędzi administracyjnych. Po ich przekroczeniu zostanie zwrócony błąd (TRANSACTION_TOO_OLD_TO_REFUND). Schemat działania jest analogiczny jak w przypadku wypłat z salda. To znaczy, że System przyjmuje zlecenie i asynchronicznie przetwarza je w ciągu maksymalnie 30 minut, a w przypadku niepowodzenia informacja o operacjach zakończonych błędem jest wysyłana w raporcie następnego dnia roboczego.
W przypadku problemów z połączeniem, przekroczenia maksymalnego czasu oczekiwania na odpowiedź, żądanie może zostać ponowione z tym samym MessageID bez obawy o zduplikowanie zlecenia. Za błąd uznać można wszystkie odpowiedzi inne niż założona (tj. z niepoprawnymi polami, w szczególności pustym lub niepoprawnym hash). W przypadku, gdy System zautoryzuje nadawcę komunikatu zwrotu, jednak nie uda się wykonać operacji, w odpowiedzi zwrócony zostanie komunikat błędu.
Dla serwisów posiadających saldo w Systemie oraz podających w koszyku produktów parametr productID, możliwe jest wykonanie operacji zwrotu do Klienta całości, bądź części kwoty wpłaconej na rzecz wskazanego produktu. Skuteczny zwrot całości kwoty produktu można wykonać jeden raz (w przypadku ponownej próby zlecenia zwrotu tego samego produktu, System zwraca odpowiednio opisany błąd). Zwroty części kwoty produktu można na nim wykonywać wiele razy, o ile ich suma nie przekroczy kwoty wpłaconej na rzecz produktu.
Aby wykonać zwrot produktu, należy wywołać metodę productRefund (https://{host_bramki}/settlementapi/productRefund) z odpowiednimi parametrami. Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID), wartość pola musi być unikalna i wskazywać konkretne zlecenie wypłaty w Serwisie Partnera. Weryfikacja unikalności po stronie Systemu pozwala na ponawianie MessageID w przypadku problemów z komunikacją (ponowienie tej wartości skutkować będzie potwierdzeniem zlecenia, bez ponownego wykonania w Systemie). |
3 | RemoteID | TAK | string{1,20} | Alfanumeryczny identyfikator zwracanej transakcji wejściowej nadany przez System oraz przekazywany do Partnera w komunikacie ITN transakcji wejściowej. |
4 | ProductID | TAK | string{1,36} | Identyfikator zwracanego produktu. |
5 | Amount | NIE | amount | Kwota zwrotu (nie może być większa niż kwota produktu oraz aktualne saldo serwisu + ew. kwota prowizji za zwrot). Niepodanie tego parametru skutkuje zwrotem do Klienta całości środków wpłaconych na rzecz zwracanego produktu; jako separator dziesiętny używana jest kropka - '.' Format: 0.00. |
6 | Currency | NIE | string{1,3} | Waluta wypłaty. Domyślną walutą jest PLN (użycie innej waluty musi być uzgodnione w trakcie integracji). W ramach ServiceID obsługiwana jest jedna waluta. Dopuszczalne jedynie wartości: PLN, EUR, GBP oraz USD. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
W odpowiedzi na żądanie zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, zawierający potwierdzenie wykonania operacji lub opis błędu (opis poniżej).
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<productRefund>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<hash>Hash</hash>
</productRefund>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. Pochodzi z żądania metody. |
2 | messageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
Opcja wykonywania zwrotów do opłaconych transakcji możliwa jest do 12 miesięcy wstecz, licząc od daty rozpoczęcia transakcji. Wyjątek stanowią płatności BLIK, które ze względu na ograniczenia czasowe po stronie dostawcy Kanału płatności, można zwracać do 6 miesięcy wstecz.
Powyższe terminy dotyczą realizowania zwrotów poprzez panel administracyjny oraz productRefund, np. za pośrednictwem własnych narzędzi administracyjnych. Po ich przekroczeniu zostanie zwrócony błąd (TRANSACTION_TOO_OLD_TO_REFUND). Schemat działania jest analogiczny jak w przypadku wypłat z salda. To znaczy, że System przyjmuje zlecenie i asynchronicznie przetwarza je w ciągu maksymalnie 30 minut, a w przypadku niepowodzenia informacja o operacjach zakończonych błędem jest wysyłana w raporcie następnego dnia roboczego.
W przypadku problemów z połączeniem, przekroczenia maksymalnego czasu oczekiwania na odpowiedź, żądanie może zostać ponowione z tym samym MessageID bez obawy o zduplikowanie zlecenia. Za błąd uznać można wszystkie odpowiedzi inne niż założona (tj. z niepoprawnymi polami, w szczególności pustym lub niepoprawnym hash). W przypadku, gdy System zautoryzuje nadawcę komunikatu zwrotu, jednak nie uda się wykonać operacji, w odpowiedzi zwrócony zostanie komunikat błędu (Zob. Komunikaty błędu).
Po wykonaniu zwrotu lub wypłaty z salda mamy możliwość weryfikacji w jakim statusie jest transakcja rozliczeniowa oraz jaki został jej nadany identyfikator przez System płatności online. W tym celu należy wywołać metodę outDetails (https://{host_bramki}/settlementapi/outDetails) z odpowiednimi parametrami.
Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
UWAGA: Wymagane jedno z pól ServiceID lub BalancePointID.
Podanie obu spowoduje zatrzymanie przetwarzania żądania oraz błąd http.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
1 | BalancePointID | TAK | string{1,10} | Identyfikator Punktu Rozliczeń. |
2 | MessageID | TAK | string{32} | Należy podać ten sam identyfikator komunikatu, który był wysłany poprzednio przy zleceniu zwrotu lub wypłaty z salda. |
3 | Method | TAK | enum | Operacja dla której powstała transakcja rozliczeniowa: BALANCE_PAYOFF - wypłata z salda TRANSACTION_REFUND - zwrot transakcji PRODUCT_REFUND - zwrot produktu |
nd. | Hash | TAK | string{1,128} | Stosowany jest klucz współdzielony przypisany do zastosowanego identyfikatora konfiguracji (Serwisu lub Punktu Rozliczeń). Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<outDetails>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<status>Status</status>
<remoteOutId>RemoteOutId</remoteOutId>
<hash>Hash</hash>
</outDetails>
lub
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<outDetails>
<balancePointID>BalancePointID</balancePointID>
<messageID>MessageID</messageID>
<status>Status</status>
<remoteOutId>RemoteOutId</remoteOutId>
<hash>Hash</hash>
</outDetails>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. Pochodzi z żądania metody. |
1 | balancePointID | TAK | string{1,10} | Identyfikator Punktu Rozliczeń. Pochodzi z żądania metody. UWAGA: Zwrócone zostanie jedno z pól ServiceID lub BalancePointID. |
2 | messageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. |
3 | status | TAK | enum | Status przetwarzania: NEW - Oczekuje w kolejce na przeprocesowanie. PROCESSING - W trakcie procesowania ERROR - Przetwarzanie zakończyło się niepowodzeniem np. nie było środków na saldzie DONE - Przetwarzanie zakończyło się sukcesem. |
4 | remoteOutId | NIE | string{1,20} | Alfanumeryczny identyfikator transakcji rozliczeniowej nadany przez System płatności online. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
System umożliwia wyświetlanie Klientowi podsumowania transakcji. W tym celu Partner może budować linki uruchamiające z odpowiednimi parametrami metodę confirmation (https://{host_bramki}/web/confirmation/payment). Wszystkie parametry przekazywane są metodą GET. Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
Przekierowanie Klienta z poprawnymi parametrami spowoduje wyświetlenie podsumowania transakcji (o treści zależnej od jej stanu) lub informacji o jej braku (jeśli System nie jej nie odnajdzie).
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
2 | OrderID | TAK | string{32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
UWAGA: Usługa musi zostać aktywowana po uzgodnieniu z opiekunem biznesowym. Istnieje możliwość zmiany treści komunikatów lub dostosowanie szaty graficznej (podlegają one każdorazowo ustaleniom w formie roboczej podczas integracji).
Dla wszystkich serwisów możliwe jest odpytanie o status transakcji. W tym celu należy wywołać metodę transactionStatus (https://{host_bramki}/webapi/transactionStatus) z odpowiednimi parametrami.
Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded). Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
2 | OrderID | TAK | string{32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis Partnera. |
Do poprawnego odpytania należy, wraz z przekazywanymi parametrami, przesłać zdefiniowany nagłówek HTTP o odpowiedniej treści. Dołączony nagłówek powinien nosić nazwę 'BmHeader' i posiadać następującą wartość 'pay-bm', w całości powinien prezentować się następująco 'BmHeader: pay-bm'. W przypadku poprawnego komunikatu zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, zawierający wszystkie transakcje o wskazanym OrderID wraz z podstawowymi o nich informacjami.
WSKAZÓWKA: Sytuacja taka może mieć miejsce np. w przypadku, gdy Klient zmieni Kanał Płatności, wywoła ponownie ten sam start transakcji z historii przeglądarki itp. System umożliwia blokowanie takich przypadków, jednak opcja nie jest zalecana (nie byłoby możliwe opłacenie porzuconej transakcji).
WAŻNE! W przypadku gdy odpytanie dotyczy orderID, które występuje w ponad 50 transakcjach danego serwisu, zwracana jest odpowiedź (XML) z kodem błędu 403.
Struktura odpowiedzi w przypadku osiągniętego limitu transakcji z tym samym orderId:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<transaction>
<reason>LIMIT_REQUESTED_TRANSACTIONS_WITH_THE_SAME_ORDER_ID_AND_SERVICE_ID_EXCEEDED</reason>
<description>Transaction limit 50 with the same order id {{ORDER_ID}} and service id {{SERVICE_ID}} exceeded. Requested count {{TRANSACTION_AMOUNT}}
</description>
</transaction>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | TAK | string{1,10} | Identyfikator Serwisu Partnera, nadawany w trakcie rejestracji usługi, jednoznacznie identyfikuje Serwis Partnera w Systemie płatności online. |
2 | orderID | TAK | string{1,32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. |
3 | remoteID | TAK | string{1,20} | Alfanumeryczny identyfikator transakcji nadany przez System płatności online. |
5 | amount | TAK | amount | Kwota transakcji jako separator dziesiętny używana jest kropka - '.' Format: 0.00; maksymalna długość: 14 cyfr przed kropką i 2 po kropce. |
6 | currency | TAK | string{1,3} | Waluta transakcji. |
7 | gatewayID | NIE | string{1,5} | Identyfikator Kanału Płatności, za pomocą, którego Klient uregulował płatność. |
8 | paymentDate | TAK | string{14} | Moment zautoryzowania transakcji, przekazywany w formacie YYYYMMDDhhmmss. (Czas CET) |
9 | paymentStatus | TAK | enum | Status autoryzacji transakcji, przyjmuje wartości (opis zmian statusów dalej): PENDING – transakcja rozpoczęta. SUCCESS – poprawna autoryzacja transakcji, Serwis Partnera otrzyma środki za transakcje – można wydać towar/usługę. FAILURE – transakcja nie została zakończona poprawnie. |
10 | paymentStatusDetails | NIE | string{64} | Szczegółowy status transakcji, wartość może być ignorowana przez Serwis Partnera. WSKAZÓWKA: Szczegółowy opis w części Szczegółowe statusy transakcji. |
nd. | hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
UWAGA: Ponieważ metoda może zwrócić wiele transakcji, do Hash pobierane są kolejne transakcje (zgodnie z kolejnością występowania transakcji w odpowiedzi). W ramach danej transakcji zastosowanie ma kolejność zgodna z numerem obok pola (z wyłączeniem parametru ServiceID, poziom wyżej).
Przykład łańcucha funkcji skrótu
Hash = funkcja(<serviceID> + „|” +
<orderID1> + „|” + <remoteID1> + „|” + <amount1> + „|” + <currency1> + „|” + <gatewayID1> + „|” + <paymentDate1> + „|” + <paymentStatus1> + „|” + <paymentStatusDetails1> + „|” +
<orderID2> + „|” + <remoteID2> + „|” + <amount2> + „|” + <currency2> + „|” + <gatewayID2> + „|” + <paymentDate2> + „|” + <paymentStatus2> + „|” + <paymentStatusDetails2> + …
Warunki | Znaczenie | Proponowany komunikat dla Klienta |
---|---|---|
Dokładnie jedna transakcja o statusie paymentstatus=SUCCESS | Poprawnie opłacona transakcja. | System poprawnie zarejestrował płatność. |
Więcej niż jedna transakcja o statusie paymentstatus=SUCCESS | Wielokrotnie opłacona transakcja. | System zarejestrował więcej niż jedną płatność. |
Istnieje RemoteID o statusie paymentstatus=PENDING i nie istnieje o statusie paymentstatus=SUCCESS | Transakcja oczekuje na opłacenie. | System oczekuje na płatność. |
Istnieje przynajmniej jedna transakcja, ale nie ma innych statusów niż paymentstatus=FAILURE | Transakcja anulowana. | System zarejestrował rezygnację z płatności lub brak autoryzacji płatności. |
Brak transakcji lub inny błąd | Nieudana próba znalezienia transakcji. | Transakcja nie została odnaleziona. |
Dla wszystkich serwisów możliwe jest anulowanie rozpoczętej, ale nieopłaconej transakcji poprzez wywołanie metody transactionCancel (https://{host_bramki}/webapi/transactionCancel) z odpowiednimi parametrami. Wszystkie parametry przekazywane są metodą POST (Content-Type: application/x-www-form-urlencoded).
Protokół rozróżnia wielkość liter zarówno w nazwach jak i wartościach parametrów. Wartości przekazywanych parametrów powinny być kodowane w UTF-8.
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | ServiceID | TAK | string{1,10} | Identyfikator Serwisu Partnera. |
2 | MessageID | TAK | string{32} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Wartość pola musi być unikalna dla Serwisu Partnera. |
3 | RemoteID | NIE | string{1,20} | Alfanumeryczny identyfikator transakcji nadany przez System oraz przekazywany do Partnera w komunikacie ITN transakcji wejściowej. Jego podanie spowoduje anulowanie tylko jednej transakcji o wskazanym RemoteID, jeśli oczekuje na wpłatę (status PENDING). |
4 | OrderID | NIE | string{32} | Identyfikator transakcji nadany w Serwisie Partnera i przekazany w starcie transakcji. Jego podanie (brak RemoteID) spowoduje anulowanie wszystkich transakcji oczekujących na wpłatę (status PENDING) o wskazanym OrderID (oraz ServiceID). UWAGA: Wymagane jedno z pól OrderID lub RemoteID. Podanie obu spowoduje zatrzymanie przetwarzania żądania oraz błąd http. |
nd. | Hash | TAK | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. |
Do poprawnego odpytania należy, wraz z przekazywanymi parametrami, przesłać zdefiniowany nagłówek HTTP o odpowiedniej treści. Dołączony nagłówek powinien nosić nazwę 'BmHeader' i posiadać następującą wartość 'pay-bm'. W całości powinien prezentować się następująco:
'BmHeader: pay-bm'
W przypadku poprawnego komunikatu zwracany jest (w tej samej sesji HTTP) tekst w formacie XML, zawierający potwierdzenie wykonania operacji lub opis błędu.
Struktura potwierdzenia (XML)
<?xml version="1.0" encoding="UTF-8"?>
<transaction>
<serviceID>ServiceID</serviceID>
<messageID>MessageID</messageID>
<confirmation>ConfStatus</confirmation>
<reason>Reason</reason>
<hash>Hash</hash>
</transaction>
WAŻNE! Kolejność atrybutów do wyliczenia Hash musi być zgodna z ich numeracją.
kolejność Hash | nazwa | wymagany | typ | opis |
---|---|---|---|---|
1 | serviceID | NIE | string{1,32} | Identyfikator Serwisu Partnera. Pochodzi z żądania metody. Wymagany dla confirmation=CONFIRMED |
2 | messageID | NIE | string{1,20} | Pseudolosowy identyfikator komunikatu o długości 32 znaków alfanumerycznych alfabetu łacińskiego (np. na bazie UID). Pochodzi z żądania metody. Wymagany dla confirmation=CONFIRMED |
3 | confirmation | TAK | string{1,100} | Status potwierdzenia przyjęcia zlecenia. Może przyjmować dwie wartości: - CONFIRMED – operacja powiodła się - NOTCONFIRMED – operacja nie powiodła się |
4 | reason | NIE | string{1,1000} | Wyjaśnienie szczegółów przetwarzania żądania. |
nd. | hash | NIE | string{1,128} | Wartość funkcji skrótu dla komunikatu obliczona zgodnie z opisem w części Bezpieczeństwo transakcji. Obowiązkowa weryfikacja zgodności wyliczonego skrótu przez Serwis. Wymagany dla confirmation=CONFIRMED |
Jeśli komunikat jest poprawny składniowo, System zwróci jedną z poniższych par opisujących wynik przetwarzania. Poza jej interpretacją, zaleca się kontrolnie odpytać o status transakcji (metoda transactionStatus).
Należy pamiętać, że po skutecznym anulowaniu przynajmniej jednej transakcji, nie jest możliwe wystartowanie nowej, ani kontynuowanie wcześniej wystartowanej transakcji o tym samym OrderID.
cofnfirmation | reason | szczegóły |
---|---|---|
CONFIRMED | CANCELED_FULLY | Dla wskazanego OrderID: wszystkie transakcje oczekujące na wpłaty zostały anulowane. Dla wskazanego RemoteID: transakcja została anulowana. |
CONFIRMED | CANCELED_PARTIALLY | Dla wskazanego OrderID: anulowano przynajmniej jedną transakcję, jednak wystąpiły transakcje, których nie można było anulować (np. były już opłacone). Dla wskazanego RemoteID: taka odpowiedź nie występuje. |
NOTCONFIRMED | INCORRECT_PAYMENT_STATUS | Znaleziono przynajmniej jedną wskazaną transakcję, jednak nie udało się żadnej anulować (np. nie było transakcji oczekującej na wpłatę). |
NOTCONFIRMED | TRANSACTION_NOT_FOUND | Nie znaleziono wskazanej transakcji. |
NOTCONFIRMED | OTHER_ERROR | Wystąpił inny błąd przy przetwarzaniu żądania. |
Wszystkie komunikaty błędów będą zwracane w postaci dokumentu XML, zawierającego kod błędu, jego nazwę oraz opis. Ze względu na dużą zmienność możliwych błędów, nie jest utrzymywana pełna dokumentacja błędów.
WSKAZÓWKA: Pole description, dokładnie opisuje każdy z błędów (pola statusCode i name mogą być ignorowane).
Przykładowy błąd (XML)
<?xml version="1.0" encoding="UTF-8"?>
<error>
<statusCode>55</statusCode>
<name>BALANCE_ERROR</name>
<description>Wrong services balance! Should be 100 but is 40</description>
</error>
W tej części przedstawione są modele, scenariusze zdarzeń i przepływu informacji.
Poniżej znajdziemy diagramy sekwencji dla 2 modeli integracji.
Model najprostszy, gdzie wybór kanałów płatności znajduje się na stronach Autopay (paywall).
Charakteryzuje się prezentacją kanałów płatności po stronie Merchanta. W tym celu należy pozyskać listę kanałów wraz z opisami z
usługi gatewayList/v3
oraz pozyskać listę niezbędnych regulaminów dla poszczególnych kanałów płatności (/legalData
).
Pozostała część procesu jest taka sama jak w modelu Paywall.
Struktura Partnera składa się z przynajmniej 1 serwisu (identyfikowane za pomocą identyfikatora ServiceID) oraz dowolnej liczny punktów rozliczeń (identyfikowane za pomocą identyfikatora idBalancePoint).
Serwisami są zazwyczaj źródła Linków Płatności (strona WWW, aplikacja mobilna, maile itp). Serwisy też rozdzielają ruch dotyczący różnych branż (płatności za faktury, zakupy e-Commerce itp.). Ponieważ transakcja identyfikowana jest przez parę OrderID i ServiceID, można powiedzieć, że „serwis odpowiada poziomowi transakcji".
Punkty rozliczeń definiuje się, jeśli istnieje potrzeba rozróżnienia w jakiś sposób składowych płatności (np. poprzez wskazanie ich w raportach lub niezależne rozliczenie). Ponieważ produkt transakcji identyfikowany jest przez przynależący mu punkt rozliczeń (idBalancePoint), można powiedzieć, że „punkt rozliczeń odpowiada poziomowi produktu".
Koszyk produktów (a więc również punkty rozliczeń) może nie występować w strukturze opisującej Partnera. Przyczyna dodania do struktury punktów rozliczeń wpływa na decyzję o modelu rozliczeniowym:
potrzeba rozróżnienia składowych wpłaty na liście transakcji (w raportach) niekoniecznie musi pociągać za sobą osobnego rozliczania każdego z produktów lub punktów rozliczeń; w tej sytuacji zazwyczaj w zupełności wystarczają modele rozliczeniowe na poziomie serwisu (zbiorcze lub po każdej wpłacie)
potrzeba rozdzielenia rozliczeń składowych wpłaty, powoduje zastosowanie modelu rozliczeniowego na poziomie punktu rozliczeń (zbiorcze lub po każdej wpłacie).
Poniżej ilustracja przykładowej struktury (bez wskazywania konkretnego modelu rozliczeniowego)
Schematy obsługi transakcji i rozliczeń
Rozliczenia zbiorcze następują następnego dnia roboczego (D+1).
Rozliczenia po każdej wpłacie wykonywane mogą być niezwłocznie po otrzymaniu wpłaty od Klienta na wskazane w parametrach Linka płatności dane transakcji (opcje: Konto odbiorcy, Tytuł przelewu rozliczeniowego, Nazwa odbiorcy przelewu rozliczeniowego).
Rozliczenia zbiorcze następują następnego dnia roboczego (D+1).
Rozliczenia po każdej wpłacie wykonywane mogą być niezwłocznie po otrzymaniu wpłaty od Klienta na wskazane w parametrach Linka płatności dane produktu (opcje: Konto odbiorcy, Tytuł przelewu rozliczeniowego, Nazwa odbiorcy przelewu rozliczeniowego).
Rozliczenia mogą być zlecane przez Partnera poprzez wywołanie metody: transactionSettlement.