NAV Navbar
cURL unsigned cURL signed

Wstęp

Dokumentacja zawiera opis procesów biznesowych oraz metod REST API udostępnianych przez Cinkciarz Pay. API pozwala w łatwy i bezpieczny sposób zautomatyzować proces zakładania płatności i zwrotów przez system Partnera.

API może być wykorzystane do:

Procesy biznesowe realizacji płatności i zwrotu zostały opisane w sekcjach:

Jak zacząć?

W pierwszym etapie należy dokonać rejestracji konta Partnera i utworzyć struktury sklepu. Poniżej zostały opisane kroki które są niezbędne, aby rozpocząć korzystanie z Cinkciarz Pay API.

Utworzenie sklepu

  1. Należy założyć konto firmowe na stronie cinkciarz.pl oraz uzupełnić swoje dane.
  2. W kolejnym kroku należy przejść do Panelu sprzedawcy i dodać sklep oraz punkt płatności. Należy zwrócić szczególną uwagę na konfigurację adresów URL punktu płatności:
    • Adres powiadomienia o utworzeniu płatności - na ten adres będą wysyłane powiadomienia o statusie płatności. Są one szerzej opisane w rozdziale powiadomienia płatności.
    • Adres powiadomienia o utworzeniu zwrotu - na ten adres będą wysyłane powiadomienia o statusie zwrotu. Są one szerzej opisane w rozdziale powiadomienia zwrotu.
    • Adres strony dla płatności udanej - na ten adres zostanie przekierowany Klient po pomyślnym zatwierdzeniu płatności w Cinkciarz Pay. Przekierowanie jest szerzej opisane w rozdziale parametry przekierowania.
    • Adres strony dla płatności nieudanej - na ten adres zostanie przekierowany Klient po nieudanym zatwierdzeniu płatności w Cinkciarz Pay. Przekierowanie jest szerzej opisane w rozdziale parametry przekierowania.
  3. Po utworzeniu struktury sklepu należy dodać własny klucz publiczny w formacie PEM. Opis generacji klucza został szerzej opisany w sekcji generowanie klucza publicznego. Więcej informacji na temat bezpieczeństwa komunikacji zostało zamieszczonych w sekcji komunikacja z Cinkciarz Pay.
  4. Ostatnim krokiem jest wygenerowanie danych dostępowych do Cinkciarz Pay API. Czynność tą można wykonać na stronie konfiguracji.

Po realizacji powyższych kroków Partner powinien znajdować się w posiadaniu poniższych danych niezbędnych do komunikacji z Cinkciarz Pay API:

Utworzenie dyspozycji płatności

W celu utworzenia dyspozycji płatności należy wykonać poniższe kroki:

  1. Należy pobrać token dostępowy przy pomocy zasobu POST /connect/token. Token ten należy umieszczać w nagłówku Authorization przy komunikacji z zasobami Cinkciarz Pay API.
  2. Własnym kluczem prywatnym należy podpisać zawartość żądania utworzenia płatności (przykład żądania znajduje się w rozdziale Utworzenie płatności). Istotne jest, aby wynikowy JWS, który zostanie przesłany do Cinkciarz Pay API posiadał w częsci header identyfikator klucza publicznego (kid), który system Cinkciarz Pay wykorzysta do weryfikacji żądania Partnera.
  3. Należy wykonać żądanie utworzenia płatności na zasób POST /payments umieszczając w zawartości JWS. Wymagane jest również ustawienie nagłówka żądania zgodnie z informacjami zamieszczonymi w rozdziale Komunikacja z Cinkciarz Pay.
  4. Otrzymaną odpowiedź należy zdekodować oraz zweryfikować zgodnie z informacjami zamieszczonymi w rozdziale Komunikacja z Partnerem.
  5. W zdekodowanej odpowiedzi znajduje się adres na jaki należy przekierować Klienta w celu zatwierdzenia przez niego płatności. Pozostała część procesu została opisana w rozdziale Proces płatności.

Uwierzytelnienie

W celu skorzystania z Cinkciarz Pay niezbędne jest wykonanie uwierzytelnienia. Każde wywołanie API udostępnianego przez Cinkciarz Pay wymaga przesłania nagłówka Authorization, który zawiera token dostępowy tzw. OAuth 2.0 access token. W celu pobrania tokena należy skorzystać z zasobu POST /connect/token. Uwierzytelnienie realizowane jest z wykorzystaniem HTTP Basic Authentication, gdzie jako nazwę Użytkownika należy podać api_client_id, a jako hasło api_client_secret. W zawartości żądania należy podać parametr grant_type ustawiony na client_credentials oraz parametr scope z wartością pay_api.

Pobranie tokena dostępowego

curl -X POST \
     -H "Accept: application/json" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -u "<api_client_id>:<api_client_secret>" \
     -d "grant_type=client_credentials&scope=pay_api" \
     "<CINKCIARZ_OIDC_HOST>/connect/token"

Odpowiedź:

{
  "access_token": "M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM",
  "expires_in": 900,
  "token_type": "Bearer"
}

Umożliwia pobranie tokena dostępowego do Cinkciarz Pay.

Zasób

POST <CINKCIARZ_OIDC_HOST>/connect/token Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Uwagi
Authorization api_client_id:api_client_secret HTTP Basic Authentication.
Content-Type application/x-www-form-urlencoded

Zawartość

Parametry zgodne z trybem client_credentials:

Nazwa Wartość
grant_type client_credentials
scope-Type pay_api

Odpowiedź

Nazwa pola Typ Wymagalność Opis
access_token String TAK Token, który należy podać przy korzystaniu z API udostępnianego przez Cinkciarz Pay.
expires_in String TAK Czas ważności tokena w sekundach.
token_type String TAK Typ tokena.

Płatności

Utworzenie płatności

curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/json" \
     -H "Accept-Language: pl" \
     -d "@data.json" \
     "<CINKCIARZ_PAY_HOST>/payments"

data.json
     {
       "externalPaymentId": "342HHH88LKDJ89876767",
       "pointOfSaleId": "POS4589631365489654",
       "category": "E_COMMERCE",
       "totalAmount": {
         "currency": "PLN",
         "value": "19.99"
       },
       "description": "Payment description."
     }
curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/jose+json" \
     -H "Accept-Language: pl" \
     -d "@data.jws" \
     "<CINKCIARZ_PAY_HOST>/payments"

data.jws
     eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJleHRlcm5hbFBheW1lbnRJZCI6IjM0MkhISDg4TEtESjg5ODc2NzY3IiwicG9pbnRPZlNhbGVJZCI6IlBPUzQ1ODk2MzEzNjU0ODk2NTQiLCJjYXRlZ29yeSI6IkVfQ09NTUVSQ0UiLCJ0b3RhbEFtb3VudCI6eyJjdXJyZW5jeSI6IlBMTiIsInZhbHVlIjoiMTkuOTkifSwiZGVzY3JpcHRpb24iOiJQYXltZW50IGRlc2NyaXB0aW9uLiJ9.aXTbO1zslJlumkvHdFPmgGuaFcAQsaXWf55JT-_WAqhZqXb0W6C_vR9sMXflQ6jBEzOFbCKuGhCIHUBe0iKYeGIaqTlnf4rTUZ1K6G2ZOGwyB_T9mpcKE3GP_ArQibMsO7ZQy2GTS0QnKO25qE_zQCEjuLUme4zaUlWVaNe5qL22KGSpkUhUqEfmrXZtNRJEqpciZ3j1Rp-iuKgFWiYB2t5Kag9DHDta0ILPq4biIIsYe-4FqhfAQvI539P4BcB4nukB45vu4amIMECHF0A6AJFpHFhw_aPOkDjej3iiQbxFfIXJQcrsIlK4oS1AZ5MIuHIkTlel4GxBvF7OyzSV4g

Nagłówki odpowiedzi:

HTTP/1.1 201 Created
Content-Type: application/json
HTTP/1.1 201 Created
Content-Type: application/jose+json

Odpowiedź:

{
  "paymentId": "PAY715037422182587",
  "approveUrl": "https://<CINKCIARZ_APPROVAL_HOST>/approve"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50SWQiOiJQQVk3MTUwMzc0MjIxODI1ODciLCJhcHByb3ZlVXJsIjoiaHR0cHM6Ly88Q0lOS0NJQVJaX0FQUFJPVkFMX0hPU1Q-L2FwcHJvdmUifQ.YLkgw3kTSbJ_ZzeH4YWRPif98NU68Swce354dviJEoifqOpbDBhE5jsfHpcFVWYmhngijb-Xd2azLaW-wVBm2EHMuycbkssH7_d90D8nKsMYKWcscI5oo4IZrwmv7S5Byz_VW_vfhYxz18biT0Pe9mNl_mJjZAruzjLbZMiBFQKN9X4huiAqf8zOWRJC4IxK19V7iKzSDtLyANv4t95_wSVFy7aomI6KfGQVjdIBm4JeJyjj4hHGRNkpPRVJsK-3Kzc0sI7THP7TFogSPcCY24EvDmHn3_9fWAU3A6LoGo5AZD_2FIxBOzDz7dQ3Ik0UkdPaEVVbhvjALDmqfSKneQ

Umożliwia utworzenie transakcji płatności.

Zasób

POST <CINKCIARZ_PAY_HOST>/payments Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Wymagalność Uwagi
Authorization
Bearer <access_token>
TAK Musi zawierać token dostępowy typu Bearer. Więcej informacji w Pobranie tokena dostępowego.
Content-Type
application/json
lub dla podpisanego żądania
application/jose+json
TAK
Accept-Language
<language> NIE Nagłówek ustawiający odpowiedni język interfejsu płatniczego po stronie Cinkciarz.pl. Musi być zgodny ze specyfikacją RFC 7231.

Zawartość

Obiekt PaymentData zawierający dane płatności

Nazwa pola Typ Wymagalność Ograniczenia Opis
totalAmount Amount TAK Kwota płatności wraz z walutą.
notificationUrl String NIE min. 1 znak max. 2048 znaki Adres URL, na który będą wysyłane powiadomienia o statusie płatności. Jako domyślny wykorzystywany jest adres URL, przekazany przez Partnera w ramach konfiguracji punktu płatności.
returnUrl String NIE min. 1 znak max. 2048 znaki Adres URL, na który zostanie wykonane przekierowanie po opłaceniu płatności. Jako domyślny wykorzystywany jest adres URL przekazany przez Partnera w ramach konfiguracji punktu płatności.
errorUrl String NIE min. 1 znak max. 2048 znaki Adres URL, na który zostanie wykonane przekierowanie po nieudanej próbie opłacenia płatności. Jako domyślny wykorzystywany jest adres URL przekazany przez Partnera w ramach konfiguracji punktu płatności.
notificationUrlParameters Object NIE max. 1024 znaki Dodatkowe parametry, które są wysyłane w powiadomieniach URL informujących o statusie płatności.
pointOfSaleId String TAK 18 znaków Identyfikator punktu płatności.
externalPaymentId String TAK min. 1 znak max. 64 znaki Identyfikator płatności po stronie Partnera.
description String TAK min. 1 znak max. 128 znaki Opis płatności.
category String TAK min. 1 znak max. 20 znaków Kategoria płatności. Wartość domyślna E_COMMERCE.
disablePayLater Boolean NIE Flaga określająca, czy dla płatności ma być włączona funkcjonalność Zapłać później.
selectedPaymentMethod SelectedPaymentMethod NIE Pozwala przenieść klienta bezpośrednio na wybraną metodę płatności po przekierowaniu na adres approveUrl.

Obiekt Amount zawierający kwotę płatności

Nazwa pola Typ Wymagalność Ograniczenia Opis
value Number TAK Kwota. Max. 21 znaków ze wsparciem dla 4 miejsc po separatorze dziesiętnym (jako separator dziesiętny używana jest kropka (.). Liczba miejsc po separatorze dziesiętnym zależy od waluty i została podana w Lista wspieranych walut.
currency String TAK 3 znaki Kod waluty zgodny z ISO 4217. Dozwolone kody walut zdefiniowane zostały w Lista wspieranych walut.

Kategoria płatności

Określa sposób rozliczania z Partnerem.

Wartość Opis
MWF Prowizja stała.
E_COMMERCE Prowizja procentowa od wartości transakcji (wartość domyślna).

Wybrana metoda płatności

Nazwa pola Typ Wymagalność Opis
type String TAK Dostępne wartości poniżej.
issuer String NIE Dostępne wartości poniżej. Pole może być uzupełnione tylko dla metody płatności PAY_BY_LINK.

Pole type może przyjmować wartości:

Wartość Opis
BLIK Blik
PAY_BY_LINK W przypadku tej metody płatności należy uzupełnić również pole issuer

Pole issuer może przyjmować wartości:

Wartość Opis
MTRANSFER Mbank
ALIOR Alior Bank
BNP_PARIBAS BNP Paribas
IPKO PKO BP
PEKAO24 Bank Pekao SA
INTELIGO Inteligo
IDEA_BANK Idea Bank
SANTANDER Santander Bank Polska
GETIN Getin Bank
NOBLE Noble Bank
CREDIT_AGRICOLE Credit Agricole
BANK_NOWY_BFG Bank Nowy BFG
MILLENNIUM Milennium
CITI_HANDLOWY Citi Handlowy
BOS Bank Ochrony Środowiska
POCZTOWY24 Bank Pocztowy
PLUS_BANK Plus Bank
BANK_SPOLDZIELCZY SGB-Bank
BANK_SPOLDZIELCZY_W_BRODNICY Bank Spółdzielczy w Brodnicy
NEST Nest Bank
ENVELO Envelo Bank
ING ING Bank Śląski

Odpowiedź

Obiekt PaymentInfo zawierający identyfikator utworzonej płatności i adres URL do akceptacji płatności.

Nazwa pola Typ Wymagalność Ograniczenia Opis
paymentId String TAK max. 40 znaków Identyfikator płatności w systemie Cinkciarz Pay.
approveUrl String TAK max. 256 znaków Adres URL, na który Partner przekierowuje Klienta w celu akceptacji utworzonej płatności.

Błędy API

Metoda POST /payments może zwrócić poniższe błędy biznesowe:

Lista płatności

curl -X GET \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     "<CINKCIARZ_PAY_HOST>/payments?paymentIds=PAY772237692548117&paymentIds=PAY815576576741391"

Nagłówki odpowiedzi:

HTTP/1.1 200 Success
Content-Type: application/json
HTTP/1.1 200 Success
Content-Type: application/jose+json

Odpowiedź:

{
    "data": [
        {
            "paymentId": "PAY772237692548117",
            "externalPaymentId": "128/06/2018",
            "status": "PROCESSING"
        },
        {
            "paymentId": "PAY815576576741391",
            "externalPaymentId": "121/06/2018",
            "status": "COMPLETED"
        }
    ],
    "pagination": {
        "first": true,
        "last": true,
        "currentPageNumber": 1,
        "currentPageElementsCount": 2,
        "pageSize": 10,
        "totalPages": 1,
        "totalElements": 2,
        "pageLimitExceeded": true
    }
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJkYXRhIjpbeyJwYXltZW50SWQiOiJQQVk3NzIyMzc2OTI1NDgxMTciLCJleHRlcm5hbFBheW1lbnRJZCI6IjEyOC8wNi8yMDE4Iiwic3RhdHVzIjoiUFJPQ0VTU0lORyJ9LHsicGF5bWVudElkIjoiUEFZODE1NTc2NTc2NzQxMzkxIiwiZXh0ZXJuYWxQYXltZW50SWQiOiIxMjEvMDYvMjAxOCIsInN0YXR1cyI6IkNPTVBMRVRFRCJ9XSwicGFnaW5hdGlvbiI6eyJmaXJzdCI6dHJ1ZSwibGFzdCI6dHJ1ZSwiY3VycmVudFBhZ2VOdW1iZXIiOjEsImN1cnJlbnRQYWdlRWxlbWVudHNDb3VudCI6MiwicGFnZVNpemUiOjEwLCJ0b3RhbFBhZ2VzIjoxLCJ0b3RhbEVsZW1lbnRzIjoyLCJwYWdlTGltaXRFeGNlZWRlZCI6dHJ1ZX19.Z6LfVelzrcGQ2TT80N8rdnTs5RGtjFGc0TtmW9pUw8gRk1ZJFUg2z0F5dNZc2g4ZBiUvr3z-PpEEEpqUIcgfcmTZMZDcq2ER_58pIfYhSnIde04Tu-2lvLLP0sadjgTEwLO67lA7nI9nrSlXyeNLhf7Lcksf6-SCdPUigU48fwm32YDaBdOQhVOvDGTtL-8iE3DzD7xqts42HdCKqFudoCey_kd56iLoWdnWKN69fxYR2xq_gLlWN5-uzMtQyEZShWJy8fLfRbJ-RevHb7H2IHXnem0w1_MTQNtpmdCcHFtTLfAxfnW04zKtwBoUcF0DlPnF62sCXm0d4dspsto7_A

Listę płatności można wyświetlić w Panelu sprzedawcy w sekcji płatności lub wykorzystać poniższy zasób.

Zasób

GET <CINKCIARZ_PAY_HOST>/payments Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Uwagi
Authorization
Bearer <access_token>
Musi zawierać token dostępowy typu Bearer. Więcej informacji w Pobranie tokena dostępowego.

Parametry zapytania

Nazwa pola Typ Wymagalność Opis
paymentIds String NIE Identyfikatory płatności (parametr paymentIds musi być powielany w żądaniu np. /payments?paymentIds=1&paymentIds=2).
externalPaymentId String NIE Identyfikator zewnętrzny płatności.
creationDateFrom String NIE Data i czas utworzenia płatności od, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
creationDateTo String NIE Data i czas utworzenia płatności do, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
bookedDateFrom String NIE Data i czas zaksięgowania płatności od, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
bookedDateTo String NIE Data i czas zaksięgowania płatności do, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
pageNumber Number NIE Numer strony.
pageSize Number NIE Liczba elementów na stronie.
sort String NIE Kryteria sortowania.

Wartość pola sort dla płatności

Istnieje możliwość sortowania po polach:

W celu sortowania malejąco po dacie utworzenia płatności należy podać wartość: paymentDate,DESC.

Odpowiedź

Obiekt Response zawierający dane płatności

Nazwa pola Typ Wymagalność Ograniczenia Opis
data Array TAK max. 100 elementów Lista z elementami typu Payment.
pagination Pagination TAK max. 36 znaków Metadane zwróconej strony.

Obiekt Payment zawierający szczegóły płatności

Nazwa pola Typ Wymagalność Ograniczenia Opis
paymentId String TAK max. 40 znaków Identyfikator płatności w systemie Cinkciarz Pay.
externalPaymentId String TAK max. 64 znaki Identyfikator płatności w systemie Partnera.
status String TAK max. 14 znaków Status płatności. Wartości zgodne z cyklem życia płatności.

Obiekt Pagination zawierający metadane zwróconej strony z danymi płatności

Nazwa pola Typ Wymagalność Opis
first Boolean TAK Określa, czy zwrócone dane znajdują się na pierwszej stronie.
last Boolean TAK Określa, czy zwrócone dane znajdują się na ostatniej stronie.
currentPageNumber Number TAK Określa numer zwróconej strony.
currentPageElementsCount Number TAK Określa liczbę elementów na zwróconej stronie.
pageSize Number TAK Określa wielkość strony.
totalPages Number TAK Określa liczbę dostępnych stron.
totalElements Number TAK Określa liczbę dostępnych elementów.
pageLimitExceeded Boolean TAK Określa, czy limit stron został osiągnięty.

Błędy API

Metoda GET /payments może zwrócić jedynie błędy techniczne.

Powiadomienia płatności

Obiekt wysyłany na adres notificationUrl podany przez Partnera:

{
    "paymentId": "PAY815576576741391",
    "externalPaymentId": "121/06/2018",
    "code": "COMPLETED",
    "type": "PAYMENT"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50SWQiOiJQQVk4MTU1NzY1NzY3NDEzOTEiLCJleHRlcm5hbFBheW1lbnRJZCI6IjEyMS8wNi8yMDE4IiwiY29kZSI6IkNPTVBMRVRFRCIsInR5cGUiOiJQQVlNRU5UIn0.OvFeZeef4wWRMV5uLTlYwKXnSKGDbNLXJ1FpHiRHLQ5fxLcNMibMdYX8sXsvBsBWcjOrZOj4GKSBG1HGu9HLpdRJOE0WtL4P6CMV0_blzfXAwI_Pf6EIR0Iv84PmT2RBeUKn12ndLEirSoeap3PGeSo6z1-58mRGStZ9juSLP27MzKWb_l93FgVh5TNH3BWFsmXY2AOE9s1epZidLoGgB-XFuC6rLDA34FuC1Ao3BbLYSoo1DMxd6_TWVCO-jnPsIeofZdfbDkY1rV1SEeqxcQscsy1HHMZB02rehXI-8V4l4K2OhSXLY0Nhq7Qe3_KSWVVXTQCZmoROz6KAAdxTfA

Nagłówki żądania:

Content-Type: application/json
Content-Type: application/jose+json

Po wykonaniu akcji przez Klienta na stronie zatwierdzania płatności realizowany jest asynchroniczny proces płatności. W ramach procesu wysyłane są powiadomienia o zmianie statusu płatności na adres notificationUrl podany przez Partnera przy tworzeniu płatności lub przy konfiguracji punktu płatności. Powiadomienia są wysyłane metodą POST oraz mogą być dostarczone do systemu Partnera w losowej kolejności. Wynika to z faktu, iż mogą występować opóźnienia pomiędzy systemem Cinkciarz Pay, a systemem Partnera lub system może być niedostępny w momencie wysyłki powiadomienia. Jeżeli Partner otrzyma jedno z powiadomień kończących proces płatności to nie powinien reagować na inne powiadomienia, które będą dostarczane do jego systemu dla danej płatności.

Poniżej znajduje się opis parametrów komunikatu, który jest wysyłany do Partnera.

Obiekt PaymentStatus

Nazwa pola Typ Wymagalność Ograniczenia Opis
paymentId String TAK max. 40 znaków Identyfikator płatności w systemie Cinkciarz Pay.
externalPaymentId String TAK max. 64 znaki Identyfikator płatności w systemie Partnera.
code String TAK max. 14 znaków Status płatności.
type String TAK max. 7 znaków Typ powiadomienia. Dla płatności przymuje zawsze wartość PAYMENT.
description String NIE max. 512 znaków Opis statusu płatności. Może być wysłany dla statusu REJECTED.
completedDate String NIE max. 128 znaki Data i czas zakończenia płatności zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ. Wysyłana zawsze dla statusu COMPLETED.
cancelledDate String NIE max. 128 znaki Data i czas anulowania płatności zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ. Wysyłana zawsze dla statusu CANCELLED.
rejectedDate String NIE max. 128 znaki Data i czas odrzucenia płatności zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ. Wysyłana zawsze dla statusu REJECTED.
paymentMethod String NIE max. 15 znaków Metoda płatności wybrana przez klienta. Wartość jest zawsze wysyłana dla statusu COMPLETED i może być wysłana dla statusów CANCELLED oraz REJECTED.
reasonType String NIE max. 32 znaki Powód anulowania. Wartość jest zawsze wysyłana dla statusu CANCELLED.
additionalParameters Object NIE max. 1024 znaki Dodatkowe parametry zdefiniowane w żądaniu utworzenia płatności.

Pole code może przyjąć wartości z tabeli poniżej:

Nazwa statusu Opis
PROCESSING Płatność została zatwierdzona przez Klienta.
COMPLETED Płatność została zakończona pomyślnie.
BOOKED Środki zostały zaksięgowane.
CANCELLED Płatność została anulowana przez system.
REJECTED Płatność została odrzucona przez Klienta.

Pole paymentMethod może przyjąć wartości z tabeli poniżej:

Nazwa metody Opis
CURRENCY_WALLET Portfel walutowy
CREDIT_CARD Karta płatnicza
IDEAL iDEAL
EPS EPS
POLI POLi
UNIONPAY UnionPay
BLIK BLIK
TRUSTLY Trustly
PAY_BY_LINK Przelew online
GOOGLE_PAY Google Pay
PAYPAL PayPal
SKRILL_WALLET Skrill
APPLE_PAY Apple Pay

Pole reasonType może przyjąć wartości z tabeli poniżej:

Nazwa powodu anulowania Opis
TOKEN_EXPIRED Czas na opłacenie transakcji płatności minął
PAY_LATER_EXPIRED Wygasł czas na opłacenie transakcji odroczonej
NOT_AVAILABLE Transakcja płatnicza jest niedozwolona
PROCESS_EXPIRED Transakcja płatności wygasła
AUTHENTICATION_FAILED_3_DS Uwierzytelnianie 3D Secure nie zostało wykonane lub nie zostało pomyślnie wykonane
BLOCKED_CARD Karta użyta do transakcji jest zablokowana
EXPIRED_CARD Ważność karty użytej do transakcji wygasła
INVALID_CARD_NUMBER Podany numer karty jest nieprawidłowy
CVC_DECLINED Podany kod bezpieczeństwa karty jest nieprawidłowy
NOT_ENOUGH_BALANCE Karta nie ma wystarczających środków na pokrycie należnej kwoty
WITHDRAWAL_COUNT_EXCEEDED Przekroczono liczbę wypłat dozwolonych dla karty
WITHDRAWAL_AMOUNT_EXCEEDED Kwota wypłaty dozwolona dla karty została przekroczona
TRANSACTION_NOT_PERMITTED Transakcja płatnicza jest niedozwolona
CVC_LENGTH_INVALID Nieprawidłowa długość kodu CVC
EXPIRY_DATE_INVALID Nieprawidłowa data ważności karty
INVALID_CVC Nieprawidłowy kod CVC
NOT_SUPPORTED Bank nie obsługuje lub nie zezwala na tego typu transakcje
RESTRICTED_CARD Karta zablokowana
UNSUPPORTED_CURRENCY_SPECIFIED Podana waluta nie jest obsługiwana
OTHER Płatność anulowana

Parametry przekierowania

Zdekodowany parametr data:

{
  "paymentId": "PAY893669703633781",
  "externalPaymentId": "464/46846/45",
  "result": "SUCCESS"
}

Po wykonaniu akcji przez Klienta na stronie zatwierdzania płatności realizowane jest przekierowanie na stronę Partnera. Jeżeli Klient wykonał pomyślnie akcję, to zostanie przekierowany na adres returnUrl podany przy tworzeniu płatności lub domyślnie skonfigurowany w punkcie płatności. W przypadku, gdy wystąpią problemy techniczne, Klient jest przekierowany na adres errorUrl (jest tak samo konfigurowalny, jak adres returnUrl).

Do adresu returnUrl podanego przez Partnera system Cinkciarz Pay dołącza informację o statusie płatności w parametrze data:

https://shop.com/success?data=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50SWQiOiJQQVk4OTM2Njk3MDM2MzM3ODEiLCJleHRlcm5hbFBheW1lbnRJZCI6IjQ2NC80Njg0Ni80NSIsInJlc3VsdCI6IlNVQ0NFU1MifQ.S83VbMBroVHrAVfXs-tk_Q3BdulpAj3lni0vdegxZ7zCQHhJuIU_DYCFQ3OTG5-EHTJ6zzsmLjjzTw5S8XVy96MXQfHbJKY-jVWEAEB5mRiLgJMn4PssQRLgaGwWbhbFbvD5qqPCFpIz96-FWnkvoxuPaa86Ywfdhd-aPAZ43m3afIAXaKOt9Iy5A0fmsbtZsiwAtrFYMmPoNZcEl02NZ9paIaJ8RXaoU4oTKgMEVjZECQ4smqfnpVg7UD1UIw54F_NaTppx0fAAIZYp5n9lzT9-DwXMe875AbH0ZzRq6-500fSCmJQc3_ym9bM8Xa5gbKSlNQrw2t4pjxJkXbPOGw

Sekcja JWS Payload zawiera dane zapisane w formacie JSON.

Obiekt AdditionalParameters

Nazwa pola Typ Wymagalność Ograniczenia Opis
paymentId String TAK max. 40 znaków Identyfikator płatności w systemie Cinkciarz Pay.
externalPaymentId String TAK max. 64 znaki Identyfikator płatności z systemu Partnera.
result String TAK max. 50 znaków Status płatności. Dopuszczalne wartości opisano poniżej.

Dopuszczalne wartości pola result:

Wartość Opis
SUCCESS Płatność poprawnie zatwierdzona.
SUCCESS_WITH_PAY_LATER Płatność poprawnie zatwierdzona z wykorzystaniem funkcjonalności Zapłać później.
REJECTED Klient zrezygnował z zatwierdzenia płatności.
ERROR Nastąpił problem z zaakceptowaniem płatności (Klient może ponownie ją opłacić, jeżeli posiada link).

Zwroty

Utworzenie zwrotu

curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/json" \
     -d "@data.json" \
     "<CINKCIARZ_PAY_HOST>/refunds"

data.json
     {
       "paymentId": "PAY715037422182587",
       "reason": "Damaged cover",
       "amount": {
         "currency": "PLN",
         "value": "34.99"
       },
       "externalRefundId": "234/03/2016",
       "notificationUrl": "http://shop.com/notifications"
     }
curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/jose+json" \
     -d "@data.jws" \
     "<CINKCIARZ_PAY_HOST>/refunds"

data.jws
     eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50SWQiOiJQQVk3MTUwMzc0MjIxODI1ODciLCJyZWFzb24iOiJEYW1hZ2VkIGNvdmVyIiwiYW1vdW50Ijp7ImN1cnJlbmN5IjoiUExOIiwidmFsdWUiOiIzNC45OSJ9LCJleHRlcm5hbFJlZnVuZElkIjoiMjM0LzAzLzIwMTYiLCJub3RpZmljYXRpb25VcmwiOiJodHRwOi8vc2hvcC5jb20vbm90aWZpY2F0aW9ucyJ9.BKQtwcAABrfPIKe8GFTdh-mD2e_3J2g9vwHMi9UfMPfdI1UnmEntk80HgQLdrzSAsPS4rowqG82nErGGguBPLYdm1_ahasIimoLAN5S5VUgObSoaOHdmew2Ens-MyXEgdtoH0sVhF3z_Vfq5ZNkOxX6etXiJd5EYc0e22GbPUvYjHJQAioVFQh0O52REK6U225LoeZQ_aj9a6ZqecRxaIihLqu87wWsUrVlJNG971SRSTDRKayoTJ0ftDP9FKrsrPHKCRU0-ZBHSv5J0T-_EPp6Z-UOHW_1tZcHtgPIJBam__4eubMpnClpdmOonhGWzkIUcvf0PzXWut_I5nS08MA

Nagłówki odpowiedzi:

HTTP/1.1 201 Created
Content-Type: application/json
HTTP/1.1 201 Created
Content-Type: application/jose+json

Odpowiedź:

{
  "id": "REF505142910935123"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJpZCI6IlJFRjUwNTE0MjkxMDkzNTEyMyJ9.fNuI_zsMz8JPhAiQjpvcGYwiYGkFuR6LWdueA4RgU-GcCzH4RdZULnMg4V-hyu3Of0G6u9qaqVw8SSPRRy_O59CijaYLI6cMSzg2W5L-mMHVUveWTgI-DLQ1v0Jemx5sri27vsq7TDMcfDNnGigWFkmvJx1nYeWS_1lTzXdYrDHxldjJhGUbF2aLr_hzrn4SRqlTf0XYc8vVGm65OS64iowFn2osd-ByXAr9LOMUsSenW14qwBLwth9_BartZO_ce1j1sBlBTYGlgPpy6xVaQjbaUcJySEqVY0vwXpCGPygLyYqt0w55F82s2bW7Qg7QW4bUu5GNAVjTai4QKjUHSg

Umożliwia utworzenie transakcji zwrotu do płatności. Dyspozycję utworzenia zwrotu można również wykonać z Panelu sprzedawcy ze strony szczegółów wybranej płatności.

Zasób

POST <CINKCIARZ_PAY_HOST>/refunds Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Uwagi
Authorization
Bearer <access_token>
Musi zawierać token dostępowy typu Bearer. Więcej informacji w Pobranie tokena dostępowego.
Content-Type
application/json
lub dla podpisanego żądania
application/jose+json

Zawartość

Obiekt RefundData zawierający dane zwrotu

Nazwa pola Typ Wymagalność Ograniczenia Opis
paymentId String TAK max. 40 znaków Identyfikator płatności z systemu Cinkciarz Pay.
reason String TAK min. 5 znaków max. 512 znaków Powód, dla którego wykonywany jest zwrot.
amount Amount NIE Kwota zwrotu. W przypadku, gdy kwota nie zostanie podana lub gdy jest ona równa kwocie płatności, utworzony zostanie zwrot pełny. Waluta musi być zawsze zgodna z walutą, w której dokonano płatności.
externalRefundId String NIE min. 1 znak max. 64 znaki Identyfikator zwrotu po stronie Partnera.
notificationUrl String NIE min. 1 znak max. 2048 znaki Adres URL, na który będą wysyłane powiadomienia o statusie zwrotu. Jako domyślny wykorzystywany jest adres URL, przekazany przez Partnera w ramach umowy o współpracy.
notificationUrlParameters Object NIE max. 1024 znaki Dodatkowe parametry, które są wysyłane w powiadomieniach URL informujących o statusie zwrotu.

Obiekt Amount zawierający kwotę zwrotu

Nazwa pola Typ Wymagalność Ograniczenia Opis
value Number TAK Kwota. Max. 21 znaków ze wsparciem dla 4 miejsc po separatorze dziesiętnym (jako separator dziesiętny używana jest kropka (.). Liczba miejsc po separatorze dziesiętnym zależy od waluty i została podana w Lista wspieranych walut.
currency String TAK 3 znaki Kod waluty zgodny z ISO 4217. Dozwolone kody walut zdefiniowane zostały w Lista wspieranych walut.

Odpowiedź

Obiekt RefundInfo zawierający identyfikator utworzonego zwrotu

Nazwa pola Typ Wymagalność Ograniczenia Opis
id String TAK max. 40 znaków Identyfikator zwrotu w systemie Cinkciarz Pay.

Błędy API

Metoda POST /refunds może zwrócić poniższe błędy biznesowe:

Lista zwrotów

curl -X GET \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     "<CINKCIARZ_PAY_HOST>/refunds?refundIds=REF192843325139567&refundIds=REF942484723821414"

Nagłówki odpowiedzi:

HTTP/1.1 200 Success
Content-Type: application/json
HTTP/1.1 200 Success
Content-Type: application/jose+json

Odpowiedź:

{
    "data": [
        {
            "refundId": "REF192843325139567",
            "externalRefundId": "128/06/2018",
            "status": "NEW"
        },
        {
            "refundId": "REF942484723821414",
            "externalRefundId": "121/06/2018",
            "status": "COMPLETED"
        }
    ],
    "pagination": {
        "first": true,
        "last": true,
        "currentPageNumber": 1,
        "currentPageElementsCount": 2,
        "pageSize": 10,
        "totalPages": 1,
        "totalElements": 2,
        "pageLimitExceeded": true
    }
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJkYXRhIjpbeyJyZWZ1bmRJZCI6IlJFRjE5Mjg0MzMyNTEzOTU2NyIsImV4dGVybmFsUmVmdW5kSWQiOiIxMjgvMDYvMjAxOCIsInN0YXR1cyI6Ik5FVyJ9LHsicmVmdW5kSWQiOiJSRUY5NDI0ODQ3MjM4MjE0MTQiLCJleHRlcm5hbFJlZnVuZElkIjoiMTIxLzA2LzIwMTgiLCJzdGF0dXMiOiJDT01QTEVURUQifV0sInBhZ2luYXRpb24iOnsiZmlyc3QiOnRydWUsImxhc3QiOnRydWUsImN1cnJlbnRQYWdlTnVtYmVyIjoxLCJjdXJyZW50UGFnZUVsZW1lbnRzQ291bnQiOjIsInBhZ2VTaXplIjoxMCwidG90YWxQYWdlcyI6MSwidG90YWxFbGVtZW50cyI6MiwicGFnZUxpbWl0RXhjZWVkZWQiOnRydWV9fQ.ZBmN9ofnYA-YTmbzYXDUqQPMHPbLAVNiXquWPs5EJBkxvSe6Q4lFKwq9ShvHag3SXYC976eKrpUSV-_tbGpGeHlhUUCGSg4igUNzx5nBM7kiIn95whwkQmWLDQnxIf282Q7aVMXIpAWK18eQpR4DsDnJEugIPphXFr1Eq5E4rS6y7mm5jU2GT7MZkO3UYO-YVxjWvGJkLAyxDo2snbXOlrOWOkzm0PwCYPpl9pYVvCzzANMtiFQVWhTEj7OfwsemimiL7--00wJydsnXcTCNzC6jeFCKH1Dr-HwmGf490rUL7ePpltCFjiKvTHttknYjC3OHoLkPP_Jl_17vIJRKog

Listę zwrotów można wyświetlić w Panelu sprzedawcy w sekcji zwroty lub wykorzystać poniższy zasób.

Zasób

GET <CINKCIARZ_PAY_HOST>/refunds Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Uwagi
Authorization
Bearer <access_token>
Musi zawierać token dostępowy typu Bearer. Więcej informacji w Pobranie tokena dostępowego.

Parametry zapytania

Nazwa pola Typ Wymagalność Opis
paymentIds String NIE Identyfikatory płatności (parametr paymentIds musi być powielany w żądaniu np. /payments?paymentIds=1&paymentIds=2).
refundIds String NIE Identyfikatory zwrotów (parametr refundIds musi być powielany w żądaniu np. /payments?refundIds=1&refundIds=2).
externalRefundId String NIE Identyfikator zewnętrzny zwrotu.
creationDateFrom String NIE Data i czas utworzenia zwrotu od, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
creationDateTo String NIE Data i czas utworzenia zwrotu do, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
bookedDateFrom String NIE Data i czas zaksięgowania zwrotu od, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
bookedDateTo String NIE Data i czas zaksięgowania zwrotu do, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
pageNumber Number NIE Numer strony.
pageSize Number NIE Liczba elementów na stronie.
sort String NIE Kryteria sortowania.

Wartość pola sort dla zwrotów

Istnieje możliwość sortowania po polach:

W celu sortowania malejąco po dacie utworzenia zwrotu należy podać wartość: refundDate,DESC.

Odpowiedź

Obiekt Response zawierający dane zwrotów

Nazwa pola Typ Wymagalność Ograniczenia Opis
data Array TAK max. 100 elementów Lista z elementami typu Refund.
pagination Pagination TAK max. 36 znaków Metadane zwróconej strony.

Obiekt Refund zawierający szczegóły zwrotu

Nazwa pola Typ Wymagalność Ograniczenia Opis
refundId String TAK max. 40 znaków Identyfikator zwrotu w systemie Cinkciarz Pay.
externalRefundId String NIE max. 64 znaki Identyfikator zwrotu w systemie Partnera.
status String TAK max. 20 znaków Status zwrotu. Wartości zgodne z cyklem życia zwrotu.

Obiekt Pagination zawierający metadane zwróconej strony z danymi zwrotów

Nazwa pola Typ Wymagalność Opis
first Boolean TAK Określa, czy zwrócone dane znajdują się na pierwszej stronie.
last Boolean TAK Określa, czy zwrócone dane znajdują się na ostatniej stronie.
currentPageNumber Number TAK Określa numer zwróconej strony.
currentPageElementsCount Number TAK Określa liczbę elementów na zwróconej stronie.
pageSize Number TAK Określa wielkość strony.
totalPages Number TAK Określa liczbę dostępnych stron.
totalElements Number TAK Określa liczbę dostępnych elementów.
pageLimitExceeded Boolean TAK Określa, czy limit stron został osiągnięty.

Błędy API

Metoda GET /refunds może zwrócić jedynie błędy techniczne.

Powiadomienia zwrotu

Obiekt wysyłany na adres notificationUrl podany przez Partnera:

{
    "refundId": "REF4589632145896",
    "paymentId": "PAY78349563479853",
    "externalPaymentId": "121/06/2018",
    "code": "COMPLETED",
    "type": "REFUND"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJyZWZ1bmRJZCI6IlJFRjQ1ODk2MzIxNDU4OTYiLCJwYXltZW50SWQiOiJQQVk3ODM0OTU2MzQ3OTg1MyIsImV4dGVybmFsUGF5bWVudElkIjoiMTIxLzA2LzIwMTgiLCJjb2RlIjoiQ09NUExFVEVEIiwidHlwZSI6IlJFRlVORCJ9.Mv-U08X_UOtLzt6V5jrPDJWXXYH--H9K3jdjCg9gTAyqg3gDqAJtpe2J0DxvqjtY-qV4HjR94nmcAuVyeVTQMvD4jiBYERNkPH4kUVsZ7bGy9hkvUbFTb9ijD62ZYLQHwXERqUpcEHEX_v_RttvBjrBJ0rTbHoyv-0CMjE3pUl9Oy8tFY2btwcXDWjeQ3PUuBOefscf8-n12LR7BkDU_Alzv_ZI7L6cUMbRby5vkz-Lpi5-aQ7J1YMWthTkxSQc0lLfxBT6GatOiFx1rnH7CyKvDlrH_sCd_P9ggs-3JfqscIBMozvqkaWCgW9nAzfeLJKOylHYU51KYTc8H65nXtQ

Nagłówki żądania:

Content-Type: application/json
Content-Type: application/jose+json

Po zleceniu zwrotu przez Partnera realizowany jest asynchroniczny proces zwrotu. W ramach procesu wysyłane są powiadomienia o zmianie statusu zwrotu na adres notificationUrl podany przez Partnera przy tworzeniu zwrotu lub przy konfiguracji punktu płatności. Powiadomienia są wysyłane metodą POST oraz mogą być dostarczone do systemu Partnera w losowej kolejności. Wynika to z faktu, iż mogą występować opóźnienia pomiędzy systemem Cinkciarz Pay, a systemem Partnera lub system może być niedostępny w momencie wysyłki powiadomienia. Jeżeli Partner otrzyma jedno z powiadomień kończących proces zwrotu to nie powinien reagować na inne powiadomienia, które będą dostarczane do jego systemu dla danego zwrotu.

Poniżej znajduje się opis parametrów komunikatu, który jest wysyłany do Partnera.

Obiekt RefundStatus

Nazwa pola Typ Wymagalność Ograniczenia Opis
refundId String TAK max. 40 znaków Identyfikator zwrotu w systemie Cinkciarz Pay.
externalRefundId String NIE max. 64 znaki Identyfikator zwrotu w systemie Partnera.
paymentId String TAK max. 40 znaków Identyfikator powiązanej płatności w systemie Cinkciarz Pay.
externalPaymentId String TAK max. 64 znaki Identyfikator powiązanej płatności w systemie Partnera.
code String TAK max. 14 znaków Status zwrotu.
type String TAK max. 7 znaków Typ powiadomienia. Dla zwrotu przymuje zawsze wartość REFUND.
maxRefundAchieved Boolean NIE Czy jest możliwe utworzenie następnego zwrotu dla tej samej płatności.
additionalParameters Object NIE max. 1024 znaki Dodatkowe parametry zdefiniowane w żądaniu utworzenia zwrotu.

Pole code może przyjąć wartości z tabeli poniżej (odpowiadają one statusom zwrotu):

Nazwa statusu Opis
NEW Zwrot został utworzony.
PROCESSING Zwrot jest przetwarzany.
PENDING Zwrot oczekuje na środki pieniężne.
COMPLETED Zwrot został zrealizowany.
CANCELLED Zwrot został anulowany.

Błędy API - techniczne

Opis błędów zwracanych przez API Cinkciarz PAY dla wszystkich udostępnianych zasobów.

400 Bad Request

Nagłówki odpowiedzi:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
HTTP/1.1 400 Bad Request
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Bad Request",
    "status": 400,
    "detail": "Unexpected character ('f' (code 102)): was expecting comma to separate Object entries"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0aXRsZSI6IkJhZCBSZXF1ZXN0Iiwic3RhdHVzIjo0MDAsImRldGFpbCI6IlVuZXhwZWN0ZWQgY2hhcmFjdGVyICgnZicgKGNvZGUgMTAyKSk6IHdhcyBleHBlY3RpbmcgY29tbWEgdG8gc2VwYXJhdGUgT2JqZWN0IGVudHJpZXMifQ.Ou8rJviQ9T2Ebj9Q7Wwza0T4G6EIFBRbWCIuEX8bBjVwW8OL_hvqYYC_4lbAMkp2Si6rlzp373Pj4wlkxxX0hkub91wsMDDUHDkEysOXJY9jOGoUOgHmZTP7JrvGdEZcN8DtUulTn55s_rNxSO66-IKYoOOcFwEAL_0zJ4aDb8mXdcY_gmgLyVnq4EKJL2lBai88UG63mRayWiiIWR5I-UFvsQ8X0wRSrEzJwzz7zOl-DeKoku5dZTIwqtPOksy4BMJXDFLlcDg5MvIFa40yO1M8Hn8SN2bxMCCgo3NkzXC4RZ3lgAHyyvpLdHsJdfiU1iqz8YhgeV1MuxqaJ-sCEQ

Zwracany, gdy żądanie ma nieprawidłową strukturę.

401 Unauthorized

Nagłówki odpowiedzi:

HTTP/1.1 401 Unauthorized
Content-Type: application/problem+json
HTTP/1.1 401 Unauthorized
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Unauthorized",
    "status": 401
}
eyJhbGciOiJSUzI1NiIsImtpZCI6Il8yNzVUd3dYOVhtaVotak1wLTJwNDZ0SUsyZE0tR2xWM3dYTU1GUTM5UUEifQ.ewogICAgInRpdGxlIjogIlVuYXV0aG9yaXplZCIsCiAgICAic3RhdHVzIjogNDAxCn0K.wvj-U9YSpJlo5bG35qnBW6N-EGMYw2kURvibSSJbpl3dtVhHlQCdQQ9vicDUhrhTXrLd39DHg-r1Zyhj6b6WFmQvteci-bRu-kU97K0tiTqbWY2TeK9BD9Zbf5pI0U4bFqBAddK4nm2WGYGwsDBO2qeFKSLcVL5UGHowGwortl7DCsscIBjtsjUq_eNClwXsAPPt9UaFLZSXNf4WIy62LOl3ZCvFx-lBzYaKxC4cCewIznFo33epLJxE35xoFGu_3lcI2u1JFG5PUi7W5RKHmEQhnGwaobRkJ0mdAG76Ut-X8c7WoEuCk7E5MDeEoDf-BcISgVfn-lIyY5eGsZs4nQ

Wskazuje, że żądanie nie zostało przetworzone, ponieważ brakuje danych uwierzytelniających dla zasobu docelowego lub są one błędne.

403 Forbidden

Nagłówki odpowiedzi:

HTTP/1.1 403 Forbidden
Content-Type: application/problem+json
HTTP/1.1 403 Forbidden
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Forbidden",
    "status": 403
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0aXRsZSI6IkZvcmJpZGRlbiIsInN0YXR1cyI6NDAzfQ.Wwp9fE54f3KclIVvGVdU3ZpUGZ4qZtC4PTyLXyAJRdqlDTcyDjIJ1ccGVKLv1YYdd_TZewiVqMR_iKCMeAoKlrFq8qsPH8NRXfJ4LCOopfF9i9zdfLkNXIVJkqm_1H-qsU9AvorPSB1mqNKy4MYfj5k-KWN559yFagBL4P2shwR3Ee0_cDy8A11fbR_8jzs5nU-hWOFR5qME7QG7leEM9ZRuna2ogRShEhXMqbThRnbDLU73uVWPmlj_5hJ8FBDjl_v5KrUBOKDFp2Hdq1t9sjzqvJPzuKYr_J6rWLa3FTlOv6ew4RuvWDgUTCJW_xaQMKSC181OgtSuYcUlH7XISg

Zwracany, gdy Klient nie posiada dostępu do żądanego zasobu.

405 Method Not Allowed

Nagłówki odpowiedzi:

HTTP/1.1 405 Method Not Allowed
Content-Type: application/problem+json
HTTP/1.1 405 Method Not Allowed
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Method Not Allowed",
    "status": 405,
    "detail": "Request method 'PUT' not supported"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0aXRsZSI6Ik1ldGhvZCBOb3QgQWxsb3dlZCIsInN0YXR1cyI6NDA1LCJkZXRhaWwiOiJSZXF1ZXN0IG1ldGhvZCAnUFVUJyBub3Qgc3VwcG9ydGVkIn0.HScFAydfT_EHZwvbkT_izwBUAlb3CCt_X6nhs_XQxkHrbpQL1hDg5JrcxYGsC5O14yXgnwUMxKlc7YO66X1j9CZAbRxL5Hi95NKMJZuh0BM1geweQYGvBbrRrd6GylK-4Me5Nllr-nJkry1h7yPlYrbVo1KBVA6gT88j9yJuWhr7OWfW0-2LbQlHEwYvhr9Df0b6Yr1noqOV7Wb7sO8yvqSi9S5oCqVbsFPqRr8Pz7H41m7qcVKM9sTUlN82F5AFMI-jk6gqu3zcvJPdXcQNmLVn7nVXIItfPfvr0wyGCKHECq--d5bhBjL-1ARUv4rz8A0FgsINqTyz25JqHwQ_YA

Zwracany, gdy wywoływana metoda na zasobie jest inna niż zdefiniowana.

409 Conflict

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Conflict",
    "status": 409,
    "detail": "Currency from paymentData.totalAmount is different than the currency from products"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0aXRsZSI6IkNvbmZsaWN0Iiwic3RhdHVzIjo0MDksImRldGFpbCI6IkN1cnJlbmN5IGZyb20gcGF5bWVudERhdGEudG90YWxBbW91bnQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGN1cnJlbmN5IGZyb20gcHJvZHVjdHMifQ.I9UnyltseJc-47VPDzwrRQ-i1rL1Y_y6mNAI7BEOEgkQ2rH8cKGE1oTeNI0wqbVaTCXYiCE95wDVFHJz4UGbwZWthMpHEt6IGcPj-OrxDREDnRgTPfyIRkTLIbud8BSHaQvdpSgJBneGe5BSIRDeu0Mo9h9ATo0b5lltQq_R4bb9zpAni6xQ2oO-XI2blPx2A2OvHr89D96gdMVUa6pWI_HIzixDsUMTXbDwO0DlC6jCLMv81_v4VWZuUMQ9dmiP0PsnodOKLZkxKc03X5Ymnfz6nrMdqZKiWdBK7StwReucW38itcxWsiKyZ3oMYzFKYWUdWQNH3pGoghzBZcbGNg

Zwracany, gdy wystąpią błędy walidacji biznesowej.

415 Unsupported Media Type

Nagłówki odpowiedzi:

HTTP/1.1 415 Unsupported Media Type
Content-Type: application/problem+json
HTTP/1.1 415 Unsupported Media Type
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Unsupported Media Type",
    "status": 415,
    "detail": "Content type 'application/x-www-form-urlencoded' not supported"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0aXRsZSI6IlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiLCJzdGF0dXMiOjQxNSwiZGV0YWlsIjoiQ29udGVudCB0eXBlICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIG5vdCBzdXBwb3J0ZWQifQ.Q7ri8IKmShewu9w2jNCZykGyP51lX-DoExwEbrcjwMjXrIwFRhiVNALRMySwULfoTOnIfk9fq7Je5Txuv-ftM-JSJ0Dif_rrRfcLigRUm0XBPzKLAl675uG4pRSvj5ZtJ9g98ti_zLbarSiYTjwouGqgKmsfz_K9ZwdNM8NCnB3X7G9z0CKchYRtFemprULYRYxBVymFr6on9mkeNsPc72q9TeQB0hXVmLTaNVGro_0yae7_avL0AOjKwY5AXrxCBRxuyhcYsSl_i2PJF5mGbitZFoPNidL16eL4xovVA-mMcuOKldEUpFilvAOCHrbCggAr3BQpauZVyiokRqi5Fw

Wysłana zawartość żądania jest niewspieranego typu.

500 Internal Server Error

Nagłówki odpowiedzi:

HTTP/1.1 500 Internal Server Error
Content-Type: application/problem+json
HTTP/1.1 500 Internal Server Error
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Internal Server Error",
    "status": 500
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0aXRsZSI6IkludGVybmFsIFNlcnZlciBFcnJvciIsInN0YXR1cyI6NTAwfQ.Lm349V3_rGQ-iW0YnARC6BZxhP8duh2NurOR_fyEtOp4EIc70PGupAr_A81gerc85ixEtS3Ux0DVZPxWIjbA8l9VyUk48fhpLPvC6hYk5b79fZ4YmHtkDdICpP0OT9YKeZhx3Htrhmn7BsP-cFLNudV_shod0GtGHa-ONBx56J4iV37EzQH4atThkusHiRW4p8NzuwRch9I-hnS26aR3KhDmiWQl0xsKDYrPnOu3-45vufpfl4qZ0gPDhsKGgsts9zVI1GONskf5-GJSLYLRstq39dxNGv_ZLRQ3IU1kxQHW4S1CmN8fbchxeA619WCh9NUdZOacu3jTXpBZlICX9w

Wystąpił nieoczekiwany błąd.

503 Service Unavailable

Nagłówki odpowiedzi:

HTTP/1.1 503 Service Unavailable
Content-Type: application/problem+json
HTTP/1.1 503 Service Unavailable
Content-Type: application/jose+json

Odpowiedź:

{
    "title": "Service Unavailable",
    "status": 503
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0aXRsZSI6IlNlcnZpY2UgVW5hdmFpbGFibGUiLCJzdGF0dXMiOjUwM30.C2_7xbFp0VJu141nO0fr5cUHKOipLic6XzY7_7Jqu0G8UkyjdCq4W8spggDsLIycfoDpzeJYuGkuIEJEK6Rh2phPiCBaphDHYmTYJPhy3lTPlxElIPya4Ml8WCr9Hf3-zec5NlOzCZDJRUcysjQOo4eI15LB--0YU2Fo4au7metxuZ83N71j0o-DJha083Em3VnmWNH4QE92983EUYPnEP0Y2jBjI-cEEZHgGe1ADzon7wrY60WIOKvvZ2WlDiWb_-cs6aLtLcNYAs5Fw1IB9L6OlCKuTmWM0OFwpeTvpQUCt1UGT4GGZw2rYBsgxsSvyUJOPdyskrFrIzmK7ypJsA

Serwis nie jest dostępny.

Błędy API - biznesowe

Opis błędów zwracanych przez API Cinkciarz PAY, których typ jest zdefiniowany przez klucz type.

invalid-jws

Nagłówki odpowiedzi:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
HTTP/1.1 400 Bad Request
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "invalid-jws",
    "status": 400,
    "title": "Invalid JWS",
    "validation-errors": [
        {
            "message": "Header 'kid' is missing",
            "message-key": "KidHeaderMissing",
            "context-key": "jws"
        }
    ]
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoiaW52YWxpZC1qd3MiLCJzdGF0dXMiOjQwMCwidGl0bGUiOiJJbnZhbGlkIEpXUyIsInZhbGlkYXRpb24tZXJyb3JzIjpbeyJtZXNzYWdlIjoiSGVhZGVyICdraWQnIGlzIG1pc3NpbmciLCJtZXNzYWdlLWtleSI6IktpZEhlYWRlck1pc3NpbmciLCJjb250ZXh0LWtleSI6Imp3cyJ9XX0.ZiOPshS9m_DC_ZqKC-PZ-1EdCKcMXTtkuBzhTuCMKRBBLEMZ2B2e5kWxA2b8MLHrGOVeHfbePqFBozf9jLnoP7b0l_zSUrVcaMBvODwQ_jKjBai1GRH6vRDS16NHSFfnup0HTu2mX5RWF21FfFpoO3DDOGx17ngKPSte_5j1O3t-iZGvmZoxG1VDH3WCXmp0dPBmuq23Orsda-1hNcvM2Olz9sFFK7jQDWA9H-Pf0Su1XJrC9QnQCeHojlQZ0MsGAv0lQc59Pl7qUYgNCu3hIT7DwHvdaQwR2DETroEJuV7n4b6SiP5TLHbi94C7kMEwCB-T9WtERTsTojD4id0jPg

Zwracany, gdy format przesłanego komunikatu JWS jest nieprawidłowy:

invalid-pem

Nagłówki odpowiedzi:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
HTTP/1.1 400 Bad Request
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "invalid-pem",
    "status": 400,
    "title": "Can not read public key from PEM",
    "detail": "Can not read public key from PEM"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoiaW52YWxpZC1wZW0iLCJzdGF0dXMiOjQwMCwidGl0bGUiOiJDYW4gbm90IHJlYWQgcHVibGljIGtleSBmcm9tIFBFTSIsImRldGFpbCI6IkNhbiBub3QgcmVhZCBwdWJsaWMga2V5IGZyb20gUEVNIn0.gD_vJFnDZOP3TyWrT7qZcTMlMMq4oExAsglE6gKwjmXdawHTYSatavxBW3Xw6P5w8JPCtyS_JtERg5gLPfrZiu3wfgxC27cLN33kIyfT4HH4OpuNTSpQyhmf7zYksIfXSsUFsFLX_FbFK9-hLbH8iUj6ryJOUj4hXHxSAUPtl45z5yqRyWADC_wQDmYzuoSW_ULzTEBYnQkt63950AODXtJHxDskaMIYFfzKoWIPiSRDdluPfTALua4iN8rKqNL9RSaMHx0UKX3wTJk1qaQDicpVkXvTydpgX5hnXwaPsd38lSSyMh1CR0Vn5aZmLssO21kwKhuyacmHOwU6imljdQ

Zwracany, gdy wysyłany klucz publiczny jest nieprawidłowy.

invalid-public-key

Nagłówki odpowiedzi:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
HTTP/1.1 400 Bad Request
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "invalid-public-key",
    "status": 400,
    "title": "Invalid public key",
    "detail": "Invalid public key"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoiaW52YWxpZC1wdWJsaWMta2V5Iiwic3RhdHVzIjo0MDAsInRpdGxlIjoiSW52YWxpZCBwdWJsaWMga2V5IiwiZGV0YWlsIjoiSW52YWxpZCBwdWJsaWMga2V5In0.SIWrgXX6OuvFsjH-10ON59jO1X6SJrBKzyyJj0Qp_sN4tkHn2kP8PXKvIBJkxwyfAKvTtOinq5PwivEHP8oyVm_JpMUtgkGRHGzU91LGzn-SnbqT5oydzfBwQWgHevvgZ3bGeSo72F2L3Ahaq0UmtID9G-mx8otoW6iU2JArhV-0LfZn1bwzxJydiLie7AFBMi4ekJ6ksewL5RPZRgPEs_BR-sPapbym4eL51vr70n8Vbe3O_PJcEbrYml0yx4BXqdDI_0NDsU7JoV6aekOyoU_9s0PjRqtKqa-Oz5C-wyXwtr-4mIy23AtEZMi8AS0loWnoFpPbX7T4E6PM1PMC2A

Zwracany, gdy podczas dodawania nowego klucza publicznego, klucz będzie niepoprawny.

sample-text-signature-not-match

Nagłówki odpowiedzi:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
HTTP/1.1 400 Bad Request
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "sample-text-signature-not-match",
    "status": 400,
    "title": "Sample text signature not match",
    "detail": "Sample decoded text must have signed with SHA-256 signature"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoic2FtcGxlLXRleHQtc2lnbmF0dXJlLW5vdC1tYXRjaCIsInN0YXR1cyI6NDAwLCJ0aXRsZSI6IlNhbXBsZSB0ZXh0IHNpZ25hdHVyZSBub3QgbWF0Y2giLCJkZXRhaWwiOiJTYW1wbGUgZGVjb2RlZCB0ZXh0IG11c3QgaGF2ZSBzaWduZWQgd2l0aCBTSEEtMjU2IHNpZ25hdHVyZSJ9.aBsf1MOmQc4eadXoaBQG7Pj2klmwNUfC1CFbBYc_1-krZOIXhBBff6lLa9ozDEqQeVh1CEnNPQ_ZxQzsfNYK4-wUIiE1F1ar1B29YQdb7YFqw9vAct3t8Tc5SfMO7LrbkpG6gSI1ox6tUFL9g6atwOwZF33kkPME4n5pKyxbBL2fK5hElcOqITJrmJnMxmZAOYPkgoj_dwtuK7PDREKO_E9YdXF8GBibCJnTJFnovXdfLIYfM4NS3pSgWUHFysLZS9Y4RxLJff9rGfXhX0i3KjxbLFhHgn_tBrKfgfCd7ysAb2aTMqAba15ULNPBNjRG8k4B-zpKGbVRRlSF5BFDhg

Zwracany, gdy podczas dodawania nowego klucza publicznego, przykładowa wiadomość w polu encodedText została podpisana z wykorzystaniem innej sygnatury niż SHA-256.

validation-error

Nagłówki odpowiedzi:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
HTTP/1.1 400 Bad Request
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "validation-error",
    "status": 400,
    "title": "Request parameters are not valid",
    "detail": "Property 'category1' with value 'E_COMMERCE' is unknown for object 'PaymentData'",
    "validation-errors": [
        {
            "message-key": "unknown-property",
            "context-key": "category1",
            "message": "Unsupported 'category1' property"
        }
    ]
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoidmFsaWRhdGlvbi1lcnJvciIsInN0YXR1cyI6NDAwLCJ0aXRsZSI6IlJlcXVlc3QgcGFyYW1ldGVycyBhcmUgbm90IHZhbGlkIiwiZGV0YWlsIjoiUHJvcGVydHkgJ2NhdGVnb3J5MScgd2l0aCB2YWx1ZSAnRV9DT01NRVJDRScgaXMgdW5rbm93biBmb3Igb2JqZWN0ICdQYXltZW50RGF0YSciLCJ2YWxpZGF0aW9uLWVycm9ycyI6W3sibWVzc2FnZS1rZXkiOiJ1bmtub3duLXByb3BlcnR5IiwiY29udGV4dC1rZXkiOiJjYXRlZ29yeTEiLCJtZXNzYWdlIjoiVW5zdXBwb3J0ZWQgJ2NhdGVnb3J5MScgcHJvcGVydHkifV19.FR68VXiW-UunA7ttQgb02acaB2Klk1nP6aTTstQ2ojJALbQZac7HcJdzhee0W7s3sUTIE-aUFz2mtaIQVtNX-wXGTZ_fBoORb8MGZiddeQAcq2AnCW1O8KX5R2hZzoj_25HzF3CLHHHOGKBHLPbVw0YIqMoCIXLJuNyP63zvLg8rJNUirnD-_Th_yiH4izEWZwsAlQlMW6AECIYfxjg7KEZHEdirtg5wzUZTFLHMIaO3PiJCcFxDx2kuSzGH7QhUv2YfRttsERmZWTTI-MEfmihyqNe_AWR9Eq6Pd4Pcg1sjwSNcpBkeRATg0P-GC63KoZADSi9e7pv5vJQSGKbpjw

Zwracany, gdy podane parametry żądania są nieprawidłowe.

point-of-sale-not-found

Nagłówki odpowiedzi:

HTTP/1.1 404 Not Found
Content-Type: application/problem+json
HTTP/1.1 404 Not Found
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "point-of-sale-not-found",
    "title": "Point of sale not found",
    "status": 404,
    "detail": "Point of sale with identifier POS458963214589658 not found"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicG9pbnQtb2Ytc2FsZS1ub3QtZm91bmQiLCJ0aXRsZSI6IlBvaW50IG9mIHNhbGUgbm90IGZvdW5kIiwic3RhdHVzIjo0MDQsImRldGFpbCI6IlBvaW50IG9mIHNhbGUgd2l0aCBpZGVudGlmaWVyIFBPUzQ1ODk2MzIxNDU4OTY1OCBub3QgZm91bmQifQ.edVVxd62DAqXQp55GKTGQx1hIZQXvUhYBVVe_ADlruRnGKCPUDvu-LN3yit5QCuqauYN82Q4e60hiI3ImUxxIFboI56l4hf4r0hmgMSzljfbvpCHvtdfAAAPuf2NQgRtN8Ftxmnr2I21-OSiGv1pNjl0iT_FkkULws2MJKWZvPcWgFiEXiwPPcK9IIaIEVc-Wi-RnH1vYUzzC-EDXVexDUWOZ9wxon4pwKVj-drUC2jVDYmsUOm60uqFKMacIL_VozqlZni-InD-oZxbB4ZmwZm7qY0FMBjx7lhxv0NsRxvN7SXjqOOCoUKL-ZsL8t6wdBK056ymq13sFzdMtuv0iQ

Identyfikator punktu płatności jest niepoprawny.

store-not-found

Nagłówki odpowiedzi:

HTTP/1.1 404 Not Found
Content-Type: application/problem+json
HTTP/1.1 404 Not Found
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "store-not-found",
    "title": "Store not found",
    "status": 404,
    "detail": "Store with identifier STR458963125698745 not found"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoic3RvcmUtbm90LWZvdW5kIiwidGl0bGUiOiJTdG9yZSBub3QgZm91bmQiLCJzdGF0dXMiOjQwNCwiZGV0YWlsIjoiU3RvcmUgd2l0aCBpZGVudGlmaWVyIFNUUjQ1ODk2MzEyNTY5ODc0NSBub3QgZm91bmQifQ.OPcCLDrHeWZmNRc5jbY0AW1vOrcuPWN4JHFOkJ_12pydWYlgQV4FWUkmvVIjSlGsIbUm1lcEUm2U0dKRNAYMwJStRLnG-UJkEOCogeHuPavElP0fg0tHbk-hxtxSaqqHndekjwni01aTwYepxG52OyPTJTDuUCVXASZy7LVl2zrzFIhZalnfbHBEDNrcsD0faMShmcSuB78ekIQwRYQpGguO_WhNd0E2gv6Txjh5QnpnE-FxHo4D14pZzF7HR5j1WZOBcaRj9qvPdtLhbbTqHicBfAmFnRC9uHEMjVSiRf3rJuzckvhjjz3lLoaC0XezZye7yP7-Lv2VGFxAU6WuGQ

Identyfikator sklepu powiązanego z punktem płatności jest niepoprawny.

public-key-already-revoked

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "public-key-already-revoked",
    "title": "Public key already revoked",
    "status": 409,
    "detail": "Client public key with kid lpSoenUSsyxPtZlkP3tGLH9iPLZn1L4zf0G9jUhX3zQ already revoked"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicHVibGljLWtleS1hbHJlYWR5LXJldm9rZWQiLCJ0aXRsZSI6IlB1YmxpYyBrZXkgYWxyZWFkeSByZXZva2VkIiwic3RhdHVzIjo0MDksImRldGFpbCI6IkNsaWVudCBwdWJsaWMga2V5IHdpdGgga2lkIGxwU29lblVTc3l4UHRabGtQM3RHTEg5aVBMWm4xTDR6ZjBHOWpVaFgzelEgYWxyZWFkeSByZXZva2VkIn0.b8ynD7Vp2ShxJf6O2LAgat5JhEa-mdk7t0bHxCnWCG2RBkdo2LGPjogKWk850X9RBAHzCISOHgOiRu8zOKJKd5DlblgJeYSWhvpYXnt2H0vNUXkMst10MaWm06K0KUAVHATrK9FR0aloqPqcTSeklLjyGrNu4sRG3G_dJWNYH_s_IUCwUH7fAK050sGwCxyybNHQ0rZ0O3sozxpMZaaF0tYc7nLgr6ZiyDeFIdd9eC6SyFGNcuzEFG1c4G9ZiYjiBwRMAwu75dmyN-cRM2nJvHMNJ16CK8C4fOcPwY2ZXrjutdBejDAjhiRuGcXXFcEA1ydAdX8oOhpJTKGw-21Y-A

Zwracany, gdy klucz użyty do weryfikacji podpisu został odwołany.

contract-category-not-supported

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "contract-category-not-supported",
    "title": "Category not supported",
    "status": 409,
    "detail": "Partner contract not support E_COMMERCE category"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoiY29udHJhY3QtY2F0ZWdvcnktbm90LXN1cHBvcnRlZCIsInRpdGxlIjoiQ2F0ZWdvcnkgbm90IHN1cHBvcnRlZCIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJQYXJ0bmVyIGNvbnRyYWN0IG5vdCBzdXBwb3J0IEVfQ09NTUVSQ0UgY2F0ZWdvcnkifQ.VlRf2_U17qrfbwmPX2G3c6PvPzrwjChhHbGKl4DTBywtlNJhQnV7WkGGI1KG_uKU8h3m3RAj0pXX7tWSo58Wyv0fCZJEmtRL8mOQTCXfMfFPEVqXIr5krTbHfJIA7cgE0X2ucknvRFBMdtrJC70wcxR_wbAgi4UnDBItgS0YT5vmVfrAgbBDj6_NLJ9vhupZ4G4aav7BwV3MG9sI1g1CIpR2k1x1z9p29T6MO27yUXejKp1vCxACy6kWF1F947uabpDpkgqUnW08hem3cfIoO7ZofIXlyXGKIcQAIhluTm46AgIEgcW9p7GCnN9xLNFgC-91iMQNJ78KZ1RfLvpwyw

Kategoria podana w dyspozycji płatności jest inna niż zdefiniowana w umowie.

payment-method-not-available

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "payment-method-not-available",
    "title": "Payment method is not available",
    "status": 409,
    "detail": "Payment method ANY is not available"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicGF5bWVudC1tZXRob2Qtbm90LWF2YWlsYWJsZSIsInRpdGxlIjoiUGF5bWVudCBtZXRob2QgaXMgbm90IGF2YWlsYWJsZSIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJQYXltZW50IG1ldGhvZCBBTlkgaXMgbm90IGF2YWlsYWJsZSJ9.fckM8zBoxoFQkEV-6tl9U_2WaEwB8J-lEm1JvQUIsIOoianhyFiAdROgpCMNj1J4BP4i1BvgiRbQzPLIk83gZAIh5e5CRazC_ThzzzKDa-cgCRuZiAyJVDGcOiq9z94MJjYW0YPNnZaPvQ0cTw67M5csPtJrG2KUXgCopHXHLcW_C16nFRUm22clr4OXzTX0yUr8qUY3H4FdFI9q6LkzsnugwJzYRkkiBCMM-zrFdYcCTzGLQQjejeUT0QEaVSIAx2-IGyk2f--UGYn4hCp6pbIJDa-NDlwZzDFJK53_foiQk7acnsW3djd1HTjP4nY4SjiYJnG3GJmKtZNCNBIG_Q

Wybrana metoda płatności jest niedostępna.

payment-money-below-limit

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "payment-money-below-limit",
    "title": "Payment money below limit",
    "status": 409,
    "detail": "Payment money 0.01 EUR is below 1 EUR limit for EUR currency"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicGF5bWVudC1tb25leS1iZWxvdy1saW1pdCIsInRpdGxlIjoiUGF5bWVudCBtb25leSBiZWxvdyBsaW1pdCIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJQYXltZW50IG1vbmV5IDAuMDEgRVVSIGlzIGJlbG93IDEgRVVSIGxpbWl0IGZvciBFVVIgY3VycmVuY3kifQ.B9JummJuJikYYqOJupAL0joY5AUq2GBqFeiE_1_GmjYAzh4izWszrVqdUbMxZe3hkjKa-LzdSZnLabeSOeAq38-pPOZ0MqMBaKM2h0ruxf-VuA3WBvOuIq6iEQoFvwb49JaPpoNEkN3Ug4OkZ2_G8b22NhsCCw-7Kna7J84YTvo1uK61Y36wMm3kJpYi3zN64ss_l2OFBkrNICgEOUaNFJEYCjdDdZ5VnXm-1t_7aBG1hRflbl-WUOvWfEqujbqnY9T4fcjXKNXSRiWjhVhR0EzR5klgFmwmaRmx8M3JtG7KCeg0FXxlaH1Jl_o1YZ2n_j35ZbH5co9P7BimKfDbeg

Podana kwota płatności znajduje się poniżej zdefiniowanej wartości dla danej waluty.

payment-not-booked

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "payment-not-booked",
    "title": "Payment not booked",
    "status": 409,
    "detail": "Payment is not booked"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicGF5bWVudC1ub3QtYm9va2VkIiwidGl0bGUiOiJQYXltZW50IG5vdCBib29rZWQiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiUGF5bWVudCBpcyBub3QgYm9va2VkIn0.LqDfgQMgiwvtqYRCw2Da_hBIWo9V1yyOH6Sqg7FnTktBQjFSNuHteB9xTA3f6skspzTQRcKCk1wPSZb-3TgOMOJ6L2B-1Lpzz0pzOkrwSShnHaaRfL60pttYVM_H919I3wm5VVrhTLRZ8GrxWp-lHENNt-QJ4FLXkTADBEjQ02mo10hAsuUkhmp9x6fTJ-dRct2Z3GwGEO16otiNQ-uUpg2CJz3frynoCwy6yLsdagKpQUpW1mD-nmjjDCpO8ngAEgxTJx-htDRUqqY5w86u8dz1XfPGaCivfr2J6gqYAfQYx9zFGqnjWSNNmH5Lxg0XCLFkK72F_cimS7lzex9tpQ

Płatność, na którą jest realizowany zwrot nie jest zaksięgowana.

point-of-sale-forbidden-error-url

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "point-of-sale-forbidden-error-url",
    "title": "Forbidden error url",
    "status": 409,
    "detail": "Error url is not allowed in point of sale with identifier POS444785125632569"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicG9pbnQtb2Ytc2FsZS1mb3JiaWRkZW4tZXJyb3ItdXJsIiwidGl0bGUiOiJGb3JiaWRkZW4gZXJyb3IgdXJsIiwic3RhdHVzIjo0MDksImRldGFpbCI6IkVycm9yIHVybCBpcyBub3QgYWxsb3dlZCBpbiBwb2ludCBvZiBzYWxlIHdpdGggaWRlbnRpZmllciBQT1M0NDQ3ODUxMjU2MzI1NjkifQ.V5tMxdvMW1StIcEx0MK9WWl-mT4AOetKNSAdwuRFnErjrFF5mX1iDsJvSAEogKF_LPO5LIn6ANRzzms1EvmwOqAxyp6BAnln4fI6oYf8Je1sZoooL0cvGYn3PIp_cBbSqr8bRLfnVwsywEwBagb_WCL8_azwJbQF6UUQ8SpA8L-0wAwzlFbrU_27-OA46YPhArc3zm4HDKzWBGVjtffFCCakTSDCqTqiKiEMy6B4-6wLpo_-N7ov8o3hmy6ZWiDI9lNGKgYH2_EluNx08Iv8w_qqfSaGHQJCBJOqXgAWToCTWSMaWKp7XCTn-8_w_IAvmZBQv3XKqNR6sXysF8fKug

Podany url wykorzystywany przy przekierowaniu Klienta nie został zdefiniowany w punkcie płatności.

point-of-sale-forbidden-notification-url

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "point-of-sale-forbidden-notification-url",
    "title": "Forbidden notification url",
    "status": 409,
    "detail": "Notification url is not allowed in point of sale with identifier POS458963215697589"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicG9pbnQtb2Ytc2FsZS1mb3JiaWRkZW4tbm90aWZpY2F0aW9uLXVybCIsInRpdGxlIjoiRm9yYmlkZGVuIG5vdGlmaWNhdGlvbiB1cmwiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiTm90aWZpY2F0aW9uIHVybCBpcyBub3QgYWxsb3dlZCBpbiBwb2ludCBvZiBzYWxlIHdpdGggaWRlbnRpZmllciBQT1M0NTg5NjMyMTU2OTc1ODkifQ.W2LwMY38GsUYk1bgwOfaerd3rNk23__NDrLtcOhvw0crs7beC2ZC9uWj7kiKNwfhe87lr8eWpfoDU6Y1Fx9KBqBo5k702Vjo9FbRg4NkssKoefkeFcS0ZVA_OpfOdWS_7aalqfvnzJVgNKuyIme6PfCHVfGjYUNjrablAHSSY366HoQE6wciqbZwKSmqTcXnCV-wmNKhSZxsUbyD8ehKxQQF8wxVB0ahumCN_My9V93_QA5LhBoVOsEjxg2MhS0XMa4YF2586TurPr--Pul9Iv_sLaqkhkYcTimFlcMS59aPsrcgNlBLtHiXZ5TNnQNVDeglfW-F-pnhny51WzL3bw

Podany url dla otrzymywania powiadomień nie został zdefiniowany w punkcie płatności.

point-of-sale-forbidden-return-url

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "point-of-sale-forbidden-return-url",
    "title": "Forbidden return url",
    "status": 409,
    "detail": "Return url is not allowed in point of sale with identifier POS444785125632569"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicG9pbnQtb2Ytc2FsZS1mb3JiaWRkZW4tcmV0dXJuLXVybCIsInRpdGxlIjoiRm9yYmlkZGVuIHJldHVybiB1cmwiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiUmV0dXJuIHVybCBpcyBub3QgYWxsb3dlZCBpbiBwb2ludCBvZiBzYWxlIHdpdGggaWRlbnRpZmllciBQT1M0NDQ3ODUxMjU2MzI1NjkifQ.VcazGlGDpKZe08L_tb0vR3agEggUm_SrJb2L_JJMvVt0ogL7aAxo74VYFakwrXDeMLorgQf--99kwYL5_VEEn0aPmlf6gDdKCaF7pZ7Kv3RRyVlkglUaOpE4sIca0QaYROJ8oetq1npbPyFclYSRUhsBdy5Ns42L3tARxfQvkzKgntDmsWLwZPcJqrE0-G1Yt3YEtAYbyW2pZWK1SVGbM2xraRoBECb9o4_NLiEez7nTryp1J_iwgihmj0FvTHF7GEjlmn19BWWTV_x8BUSZGHCtEyzdQnJXmPjXOEs7vv_A_SkJ1cZxXk5a6Tp8G6xao52CAf-Xc_4avjIbB88zfg

Podany url wykorzystywany przy przekierowaniu Klienta nie został zdefiniowany w punkcie płatności.

point-of-sale-not-active

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "point-of-sale-not-active",
    "title": "Point of sale not active",
    "status": 409,
    "detail": "Point of sale with identifier POS458963214589658 is not active"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicG9pbnQtb2Ytc2FsZS1ub3QtYWN0aXZlIiwidGl0bGUiOiJQb2ludCBvZiBzYWxlIG5vdCBhY3RpdmUiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiUG9pbnQgb2Ygc2FsZSB3aXRoIGlkZW50aWZpZXIgUE9TNDU4OTYzMjE0NTg5NjU4IGlzIG5vdCBhY3RpdmUifQ.D5QoiTItOt_TePiGbq-f0a-30pWm4Fhyr9ZSxWgj60skXri_NxcmP2AbwwHd-YO4i8LQGyzqrKUnGrCUlU2tJVfYGJCt_LCvkwa_TwnQ66O4Bsua1AaaIYzqlMxcCOGDusof4BRc6EvIXlQR6MmfbiBYWBlNhH1OipxmmJv0ToWXfvJXhgAHfMuGbbm_wzGYysDJNJpv8kg3KEyrd5cR9ocJpapHMYfAXu-HPLi60XlAQdRjeAoxypZcmFT5USUu26fjrB9rwC23EMeaiJVcaHt655c8xG6io2VB98l8pnRxu_ISbz1YlZMpHxXS_3dLAYSu1xwgI5EWM-2mVBHjXw

Punkt płatności jest nieaktywny.

refund-amount-too-large

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "refund-amount-too-large",
    "title": "Refund amount too large",
    "status": 409,
    "detail": "Refund amount (or sum of the all partial refunds amount) is higher than payment amount"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicmVmdW5kLWFtb3VudC10b28tbGFyZ2UiLCJ0aXRsZSI6IlJlZnVuZCBhbW91bnQgdG9vIGxhcmdlIiwic3RhdHVzIjo0MDksImRldGFpbCI6IlJlZnVuZCBhbW91bnQgKG9yIHN1bSBvZiB0aGUgYWxsIHBhcnRpYWwgcmVmdW5kcyBhbW91bnQpIGlzIGhpZ2hlciB0aGFuIHBheW1lbnQgYW1vdW50In0.Y0LeMGM7_gh_SgX6jEW3UhWkKqYAAGXcpaF9IuzSCAjCcSZhyA2AQ88tZ0JJkQMnynENyvQ7AdNE4_TzrJOQC21YnfXHjYzTkGwHT6BoYdTIPWfN6Tzr55cjcXEFfEXNprV0NFGu-C6JjLDRmpdtkfZZgrilhsh5UpSFe5JsXcBWIAv1qGLKC3vBNETW4DQmOuNIxzJ5h4C6Q4bxQKV2RbVtOIT8OoB11AAu2CExBiHURDx-JJOscAyHBQdprEiyAU7sZDaQk-n5coCxXY8fjn6J1j_F3qP__AZ4Bl8UmOjfw8JDhtrpAUvqj1PqL78wLPv5NryOUdzERBtImq4jaA

Kwota zwrotu przekracza kwotę płatności. W przypadku zwrotu częściowego suma wszystkich kwot zwrotów częściowych przekracza kwotę płatności.

refund-incorrect-currency-code

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "refund-incorrect-currency-code",
    "title": "Incorrect refund currency code",
    "status": 409,
    "detail": "Refund currency code not match with payment currency code"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicmVmdW5kLWluY29ycmVjdC1jdXJyZW5jeS1jb2RlIiwidGl0bGUiOiJJbmNvcnJlY3QgcmVmdW5kIGN1cnJlbmN5IGNvZGUiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiUmVmdW5kIGN1cnJlbmN5IGNvZGUgbm90IG1hdGNoIHdpdGggcGF5bWVudCBjdXJyZW5jeSBjb2RlIn0.CnZIXPicq85DcmHtXFFzAqkmdw1bg6CmRVHTrkD5ui4mrs82ncjchy4p5CALffpFLFfetMhddAcp6gpnxsWmPjyRTRAHoCk4-_PbZwdE6Nw1nH4lyeFqBHtx0XrA4HVnPHn3EyEIexJ74b2vq-vwJAHI2rODu_IMA9Wegn7efYhnyZtBCCflviLgimv1I8j5J2vomyHjHiOms4GEcV78zKndS3qnG_xBSklPfYcY7rv4zbnHtuZP4l1nL9FZ0DFIMu9oSwJEZRUimrHtP4gFTrJ2_Js0apUqLUTNPXw4tIfdlyFF4fxqjjuJOfzv6omq2Putp13o4Xn-BKaXT-SuuQ

Waluta zwrotu jest inna niż waluta, którą dokonano płatności.

max-refunds-reached

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "max-refunds-reached",
    "title": "The maximum number of refunds for payment has been reached",
    "status": 409,
    "detail": "The maximum number of refunds for payment with identifier PAY445458962445154 has been reached"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoibWF4LXJlZnVuZHMtcmVhY2hlZCIsInRpdGxlIjoiVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlZnVuZHMgZm9yIHBheW1lbnQgaGFzIGJlZW4gcmVhY2hlZCIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJUaGUgbWF4aW11bSBudW1iZXIgb2YgcmVmdW5kcyBmb3IgcGF5bWVudCB3aXRoIGlkZW50aWZpZXIgUEFZNDQ1NDU4OTYyNDQ1MTU0IGhhcyBiZWVuIHJlYWNoZWQifQ.CG5b7j1H1NtjZTmJ17IEyzLBnHaePOUKiaTdwfZUYqIrhLObogufRc6Pz8xXh0VACZp4CLSsxneRaEPsCgc9eyjKHp-u-rh9FbSBrMM7QUd6uyS7-AUvuD_FDTSAt3Xd_JBFo0pEUJ4AqeQ7CZDoTOo_nYZT76CY56Q2iHl5gv49HnpdyBr_oq6aAHavqXArF7nst9P9k1ZqZGJJTwkGJ6Hz1FN2xGM8BWiDqwjBik4cSIahMigdA1zfpgrCL0jDPlzNfIvlqeAY1AVXIkCiu4DdueuUegTXSf-HP3VePhJ9nnUJB7QZAUpGUxB_Jq1XHUnWsrW8hQi6ju-nuEvKIg

Osiągnięto maksymalną liczbę zwrotów dla płatności.

other-refunds-not-completed

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "other-refunds-not-completed",
    "title": "Not all refunds are completed for payment",
    "status": 409,
    "detail": "Not all refunds are completed for payment with identifier PAY382793112712843"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoib3RoZXItcmVmdW5kcy1ub3QtY29tcGxldGVkIiwidGl0bGUiOiJOb3QgYWxsIHJlZnVuZHMgYXJlIGNvbXBsZXRlZCBmb3IgcGF5bWVudCIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJOb3QgYWxsIHJlZnVuZHMgYXJlIGNvbXBsZXRlZCBmb3IgcGF5bWVudCB3aXRoIGlkZW50aWZpZXIgUEFZMzgyNzkzMTEyNzEyODQzIn0.TC6S889u1aD8EHvMQxuMfp6_7ZuU1YfSeB5zdamuH91EHUmLdkohjHa6CYxxtFDAyTrjsuujg9Uxm-2oFuDqoTw4DyfBEMUtb0Znf9qlfSHuXJ_J6M92De6PoiEOdsRz22hR4K70l1R9dY_iZHbtFLhkL38NFJL5E3EmhrTvoapVG1QizuYgYOVXNXk1j6AHoYdXgvdPDl581qhJmFxnQkkKTcfQSoMjxuvREzbgXz5reAkWkQAUHQuIMOHUrhsk0WyV8tOy27DbSQ1-sK0FAZNuSe4fFZACWmbz1zFMRTy83Uuxl64OAluZXea04FG3thCwEpw0llPAXF-UmpUhYA

Część zwrotów utworzonych dla tej płatności nie została zakończona.

sample-text-verification-failed

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "sample-text-verification-failed",
    "title": "Sample text verification failed",
    "status": 409,
    "detail": "Signed text from encodedText not equals to unsigned text from decodedText"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoic2FtcGxlLXRleHQtdmVyaWZpY2F0aW9uLWZhaWxlZCIsInRpdGxlIjoiU2FtcGxlIHRleHQgdmVyaWZpY2F0aW9uIGZhaWxlZCIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJTaWduZWQgdGV4dCBmcm9tIGVuY29kZWRUZXh0IG5vdCBlcXVhbHMgdG8gdW5zaWduZWQgdGV4dCBmcm9tIGRlY29kZWRUZXh0In0.bC1YhfaC5dukeaCFlsB-2SdllMsiOOkMCCjDpfauLthRu3RS-Ri_Lv0EH0D8dcE_Jr9Kaz9yUZlyTvs_Tbqy8clFRQLFvHB0TpOed4zt96ViY27Q9BLMmJS5HrlLSoAh4KG3I3ZkOKDQhyW1GJgFg98TKRox3bC9-xTpBedLkFOuVEbZsvQ7H2L5P3NU8nCbcvhguKCykcGkB_Misl5h7G_yrXk_vOZOKZSvFumUP-qjpBvSatXB7Sr7y-ca68RBu2smlPv8iDYwD61uPrrZZ5LOZvqUjJQEOBEzzCq4A2jTbQEZPeOVPvz4hdqYbCYlJysh5xNK2AnMZk2fzJ-bqw

Zwracany, gdy podpisana wiadomość w polu encodedText nie jest zgodna z wartością podaną w decodedText.

public-key-has-wrong-length

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "public-key-has-wrong-length",
    "title": "Public key has wrong bytes length",
    "status": 409,
    "detail": "Client public key must have a minimum of 2 048 bytes"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicHVibGljLWtleS1oYXMtd3JvbmctbGVuZ3RoIiwidGl0bGUiOiJQdWJsaWMga2V5IGhhcyB3cm9uZyBieXRlcyBsZW5ndGgiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiQ2xpZW50IHB1YmxpYyBrZXkgbXVzdCBoYXZlIGEgbWluaW11bSBvZiAywqAwNDggYnl0ZXMifQ.Vn0oLx-dZFMNfAKuyPXNNOo8gy2L8_gYkb1TkBYitHkcvS_jnFBuOEbq7LX-ah16NDSKQVO_rm5TVNzAMUqqe5fusek2zV_R8rDccDHuHWlk217BVWvBr9C6_W4VjNqjtOExpf8r7W5ycnvMLomKwIb1h-2cJTzjpB2nMW-PGSgMot-N2lnlu5EuXMmZ0jZ2d2sDoAcI9y6yeRPPt6cmtZ-a_PxJ2LNG_BL1av8Sht8qR9o46j4cHInIVabN5CdehaD7YDqRGT6GdAMVE4vme1ZOoE4xqBIHpszFXoDwFITLByOWY84D1QWfqKDSDaKlF_i0dfF1f2G3uDnE8fCBUA

Zwracany, gdy dodawany klucz publiczny jest mniejszy niż 2048 bajtów.

public-key-already-exist

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "public-key-already-exist",
    "title": "Public key already exist",
    "status": 409,
    "detail": "Client public key with kid lpSoenUSsyxPtZlkP3tGLH9iPLZn1L4zf0G9jUhX3zQ already exist",
    "kid": "lpSoenUSsyxPtZlkP3tGLH9iPLZn1L4zf0G9jUhX3zQ"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicHVibGljLWtleS1hbHJlYWR5LWV4aXN0IiwidGl0bGUiOiJQdWJsaWMga2V5IGFscmVhZHkgZXhpc3QiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiQ2xpZW50IHB1YmxpYyBrZXkgd2l0aCBraWQgbHBTb2VuVVNzeXhQdFpsa1AzdEdMSDlpUExabjFMNHpmMEc5alVoWDN6USBhbHJlYWR5IGV4aXN0Iiwia2lkIjoibHBTb2VuVVNzeXhQdFpsa1AzdEdMSDlpUExabjFMNHpmMEc5alVoWDN6USJ9.QxoW3-rftVjDcNOtreF9ttRLUriMat_xJzpRvM3vPf08TZDK5RHdR6idUti18dKzX78hmmHS-PWXRwT9maCREqZBguqJfzFGwyBs5ui5jKi4V_SsX8-irb8EB-EhznyXQ5FidrF75_Vc69u9HythdIrnj3OimAnmALVKs8uDvZ-m-dED3Ua3-lE1sBIWExJ5R7bzNkuvpIRpzkt5vrEfqmnAYjVkL1ceUBCBgiqPqdi38CoIL0YQFUBlESUGYmXggXXYQcETVlftiieS1D1CJvTlIL5TRUTNXmt98-uvQsNcIkpYwyrtwqCrCkJr4TUh8AwX0dHwW7ThGKk8W9MooA

Zwracany, gdy klucz publiczny już istnieje.

refund-money-below-minimal-amount

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "refund-money-below-minimal-amount",
    "title": "Refund money below minimal amount",
    "status": 409,
    "detail": "Refund money 0.01 PLN is below 1 PLN minimal amount for PLN currency",
    "limit": {
        "value": "1",
        "currency": "PLN"
    }
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicmVmdW5kLW1vbmV5LWJlbG93LW1pbmltYWwtYW1vdW50IiwidGl0bGUiOiJSZWZ1bmQgbW9uZXkgYmVsb3cgbWluaW1hbCBhbW91bnQiLCJzdGF0dXMiOjQwOSwiZGV0YWlsIjoiUmVmdW5kIG1vbmV5IDAuMDEgUExOIGlzIGJlbG93IDEgUExOIG1pbmltYWwgYW1vdW50IGZvciBQTE4gY3VycmVuY3kiLCJsaW1pdCI6eyJ2YWx1ZSI6IjEiLCJjdXJyZW5jeSI6IlBMTiJ9fQ.YE1dB6RJiXNu0t9gjKKEV4MaizlbSJm3Xo5VnZCOmKw4qy7LKEvmK2ggS21bTknzcUQA3n_jIqVzkoWfK52XXWUlINhWRWcmRnJ2Xukb280WYbg2xusBs1FGpdLAlrQ7nrbDVFZye7Q1Mhh8p_mh4r6-aWVe4vHpuj7lKQzYKAFa-aZ9AEnVw2PRXu1-jsbL4WcGhdnFYcTYLkO1jgg2WHes5zZNyKnPgf7mUVFpjN0rHl_gELzJL0JBjEw0MQw7txDb0qPr6kyfdN4lQfnJzY7vy3nWElTzyXL42n0C74QLV1oaKB0gJi0SZ4tyh4IxvjQjU90FD6Ib3kq0hxGjlQ

Wartość zwrotu jest poniżej minimalnej wartości.

refund-not-allowed

Nagłówki odpowiedzi:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json
HTTP/1.1 409 Conflict
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "refund-not-allowed",
    "title": "Refund cannot be executed for selected payment method",
    "status": 409,
    "detail": "Refund cannot be executed for POLI payment method"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicmVmdW5kLW5vdC1hbGxvd2VkIiwidGl0bGUiOiJSZWZ1bmQgY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBzZWxlY3RlZCBwYXltZW50IG1ldGhvZCIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJSZWZ1bmQgY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBQT0xJIHBheW1lbnQgbWV0aG9kIn0.GsJDGxE6ywoU5l9BRdXiIQu3iQC-WlqzEeRCK2WVkM_4FxSQAlt35DkcQhhUC07xt5hoW39Q1jjZx5iXb9TFIWlvqBmyXyru6b-G35zuugmJ7KB2h7rtnwapuPs6jcoHciuzEWDCeCRz75Ln9E217uFSa4RkPjZ2scyEI9YRh3bjORhv3P9CzZ2zrpqhzjRcAdq1x9z1YZrKw-5sPaHKHVLDhw3VewiR89QJ0G90xvkd96aBktupuXaEWr8xblXYozGW2Hon7qnNhapH9oU5FCsuq3DnebUtal75fxRbFxOt9Juq2LTkt2bMCgVHQHXsveWF40UAsaVGm_P0ePJRxA

Nie można zlecić zwrotu dla wybranej metody płatności.

Procesy biznesowe

Proces płatności

Poniżej przedstawiony został proces płatności. Przedstawiony scenariusz zawiera tylko pozytywny przypadek, który ma na celu przedstawić logikę działania całego procesu.

alt text

Warunki wstępne

Klient utworzył, w sklepie internetowym Merchanta koszyk z listą produktów do zakupu.

Scenariusz

  1. Klient na stronie sklepu wybrał metodę płatności udostępnianą przez Merchanta, a następnie kliknął przycisk „Płacę” (Krok 1.).
  2. Serwer Merchanta wysyła komunikat PaymentData do serwera Cinkciarz Pay (Krok 2.).
  3. Serwer Cinkciarz Pay sprawdza poprawność otrzymanego komunikatu i tworzy dyspozycję płatności (Krok 3.).
  4. Serwer Cinkciarz Pay wysyła odpowiedź PaymentInfo do serwera Merchanta (Krok 4.).
  5. Serwer Merchanta zapisuje status transakcji potwierdzający przyjęcie dyspozycji w Cinkciarz Pay (Krok 5.) i przekierowuje Klienta na adres approveUrl otrzymany w odpowiedzi PaymentInfo (Krok 6.).
  6. Klient loguje się do serwisu Cinkciarz Pay (Krok 7.), wybiera konto walutowe, z którego będzie realizowana płatność i klika przycisk „Zapłać” (Krok 8.).
  7. Serwer Cinkciarz Pay przyjmuje do przetwarzania zaakceptowaną przez Klienta płatności (Krok 9.).
  8. Serwer Cinkciarz Pay wykonuje przekierowanie do serwera Merchanta - na adres returnUrl podany przy zakładaniu dyspozycji płatności (zwykle na stronę z podziękowaniem za dokonany zakup) (Krok 10.).

Równolegle do kroków 11. i 12. realizowany jest proces przetwarzania płatności:

  1. Serwer Cinkciarz Pay po zakończeniu przetwarzania płatności wysyła do serwera Merchanta na adres notificationUrl komunikat PaymentStatus z informacją o statusie transakcji (Krok 12.).
  2. Serwer Merchanta zapisuje status zakończonej transakcji (Krok 13.) i wysyła kod odpowiedzi HTTP 200 OK, który oznacza poprawne otrzymanie informacji o statusie transakcji (Krok 14.).
  3. Serwer Merchanta akceptuje wykonaną transakcję płatności (Krok 15.).

Cykl życia płatności

alt text

Proces zwrotu

Zwrot środków na portfel Klienta może być wykonany w dwóch trybach:

Zwrot realizowany jest zawsze w walucie, w której dokonana była płatność. Dla pełnego zwrotu podanie kwoty i waluty nie jest wymagane, natomiast dla zwrotu częściowego waluta musi być zgodna z walutą, w której dokonana została płatność.

W przypadku zwrotu częściowego, suma wszystkich kwot poszczególnych zwrotów częściowych nie może przekroczyć całkowitej kwoty płatności, dla której wykonywany jest zwrot.

Zwrot na kwotę równą kwocie płatności traktowany jest jako zwrot pełny. Jeśli istnieje zwrot częściowy dla płatności, to nie jest możliwe wykonanie zwrotu całkowitego.

Przedstawiony scenariusz zawiera tylko pozytywny przypadek dla zwrotu pełnego, który ma przedstawić logikę działania całego procesu.

alt text

Warunki wstępne

W systemie Cinkciarz Pay istnieje zaksięgowana płatność, dla której ma zostać wykonany zwrot.

Scenariusz

  1. Serwer Partnera wysyła komunikat RefundData do serwera Cinkciarz Pay (Krok 1.).
  2. Serwer Cinkciarz Pay tworzy zwrot (Krok 2.).
  3. Serwer Cinkciarz Pay wysyła odpowiedź RefundInfo do Partnera (Krok 3.).
  4. Serwer Partnera zapisuje informację o utworzeniu zwrotu (Krok 4.).

Równolegle do kroku 4. realizowany jest proces przetwarzania zwrotu:

  1. Serwer Cinkciarz Pay po zakończeniu przetwarzania zwrotu wysyła do serwera Partnera na adres notificationUrl komunikat RefundStatus z informacją o statusie zwrotu (Krok 5.).
  2. Serwer Partnera zapisuje informację o wykonaniu zwrotu (Krok 6.) i i wysyła kod odpowiedzi HTTP 200 OK, który oznacza poprawne otrzymanie informacji o statusie zwrotu (krok 7.).

Cykl życia zwrotu

alt text

Status PENDING może wystąpić w sytuacjach, gdy rachunek płatniczny Partnera nie zawiera wystarczających środków, aby zrealizować zwrot. Zwroty są w takich sytuacjach kolejkowane i oczekują na wpłynięcie środków.

Bezpieczeństwo

System Cinkciarz Pay stosuje poniższe elementy, które zapewniają bezpieczeństwo komunikacji z systemem Partnera:

Autentyczność komunikatu

Specyfikacja JSON Web Signature definiuje, w jaki sposób mogą być podpisane przesyłane komunikaty. JWS jest kodowany przy użyciu base64url i składa się z trzech części oddzielonych od siebie kropkami (.). Ogólna struktura JWS wygląda następująco:

base64url(utf8(header)).base64url(payload).base64url(signature)

Przykładowy minimalny nagłówek JWS akceptowany przez Cinkciarz Pay:

{
    "alg": "RS256",
    "kid": "iQn7M-Eyzw5sde5GwaOu51Xzl8WFXJzNW3pmCBENhhk"
}

Header

Pierwsza część to nagłówek (header), który zawiera m.in. informację o zastosowanym do wyliczenia sygnatury algorytmie - parametr "alg". Możliwe wartości, jakie może przyjmować parametr "alg" zostały podane w tabeli poniżej:

Identyfikator Nazwa algorytmu
RS256 SHA256withRSA
RS384 SHA384withRSA
RS512 SHA512withRSA

Minimalny nagłówek JWS oprócz parametru "alg" musi zawierać także parametr "kid" identyfikujący klucz publiczny, który służy do weryfikacji sygnatury.

Payload

Druga część JWS to tzw. payload, który zawiera przesyłany komunikat. Specyfikacja JWS nie definiuje typu przesyłanego komunikatu (może to być np. XML lub String), jednak Cinkciarz Pay wymaga by komunikat przesyłany był w formacie JSON (kodowanie UTF-8).

Signature

Trzecia część JWS to cyfrowy podpis (signature), który wyliczany jest z zastosowaniem algorytmu podanego w nagłówku JWS dla połączonych ze sobą zakodowanego nagłówka i zakodowanego komunikatu, oddzielonych znakiem kropki (.).

Komunikacja z Cinkciarz Pay

JWS Header

{
  "alg": "RS256",
  "typ": "JWT",
  "cty": "application/json",
  "kid": "DFDOlB7DU6-0hRYA5Uu4BbTG-qrecsKtBHSy3TjiIs8"
}

JWS Payload

{
  "description": "Payment description",
  "externalPaymentId": "342HHH88LKDJ89876767",
  "category": "E_COMMERCE",
  "pointOfSaleId": "POS45896321596547859",
  "totalAmount": {
    "currency": "USD",
    "value": 19.99
  }
}

Przykładowe żądanie utworzenia płatności:

curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/jose+json" \
     -d "@data.jws" \
     "<CINKCIARZ_PAY_HOST>/payments"

data.jws
     eyJraWQiOiJERkRPbEI3RFU2LTBoUllBNVV1NEJiVEctcXJlY3NLdEJIU3kzVGppSXM4IiwiY3R5IjoiYXBwbGljYXRpb24vanNvbiIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.ew0KICAiZGVzY3JpcHRpb24iOiAiUGF5bWVudCBkZXNjcmlwdGlvbiIsDQogICJleHRlcm5hbFBheW1lbnRJZCI6ICIzNDJISEg4OExLREo4OTg3Njc2NyIsDQogICJjYXRlZ29yeSI6ICJFX0NPTU1FUkNFIiwNCiAgInBvaW50T2ZTYWxlSWQiOiAiUE9TNDU4OTYzMjE1OTY1NDc4NTkiLA0KICAidG90YWxBbW91bnQiOiB7DQogICAgImN1cnJlbmN5IjogIlVTRCIsDQogICAgInZhbHVlIjogMTkuOTkNCiAgfQ0KfQ.J2uDZEZL_hlgLAscv3EMX8lKCPBOf1X3UoUEDGhBF0cKFSAvHaDAAtnyzacL53RWsaHmAfDTRHqqFuF6g6wBRStbWukC1pOqXNEYHTXgfHJ01Sh7JZr7IRuX92ol-OgiP7DK01wDnlZ80_wGnJUpWGQjiQEoUzJhOcFyZ44_jSKh7dwU7SWh9wj5FWmC1A8RlBXLpMf6QWCKlA1njw4r7RXUmbLLbdiA71Oiy1LN_Ezf8srYP5y_QhhtoyXxkLEe75YP5ky6d0UObrKpUVbhvj7lwnqMzZVBfD1aIL5F2s8gUg8nQeCUWPUYIRvDNQkmAFTSbqjD2sCG1ysm8JDspA

Nagłówki odpowiedzi:

HTTP/1.1 201 Created
Content-Type: application/jose+json

Odpowiedź:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCIsImtpZCI6InpDNGo0QWNoZHp3S1hTX01xc2g0QWZ3VnlTdUdzRmdnT18yeHY1dHVzemsifQ.eyJwYXltZW50SWQiOiAiUEFZNzE1MDM3NDIyMTgyNTg3IiwiYXBwcm92ZVVybCI6ICJodHRwczovLzxDSU5LQ0lBUlpfUEFZX0hPU1Q-L2FwcHJvdmUifQ.T8YBr9hhEjIEe2JtFEuVo0GAssd2-9ZL7IEGjMNoamqD6c9Ha1W6Nunlrs-CpYHUabejhcI6Z3EKzuA8Ra9YyKki_BOoK_oPAnKSJMaP6DgYeJ0cxqawqdMYkT0Ku3TpUwte-hwIoWVNFKqfjBncwNfhAXPyx4Ti6eqAQENpL8VmfvsrcmLn96BqbxYo1Hp07K_AmVulJs701a_s0BdSysLmAyhmLcQfVwSWCpTgMc7NXbe1R95T6xRYCsif2FvVZke4cM8f9zDZZI5-V7tgUhx8v3BVUEtanjPsPdDcTUs5ZLYl6EH8yCtWECGxbxxJbV2WDGJTPn6mbNRBtsjsNQ

Wszystkie komunikaty wysyłane z systemu Partnera do systemu Cinkciarz Pay muszą być przesyłane w formacie JWS. Jedynie w przypadku dodawania klucza publicznego nie jest wymagane podpisywanie komunikatu.

Poniżej przedstawiony został przykładowy JWS (Compact Serialized), jaki może być przesłany do Cinkciarz Pay:

eyJraWQiOiJERkRPbEI3RFU2LTBoUllBNVV1NEJiVEctcXJlY3NLdEJIU3kzVGppSXM4IiwiY3R5IjoiYXBwbGljYXRpb24vanNvbiIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.ew0KICAiZGVzY3JpcHRpb24iOiAiUGF5bWVudCBkZXNjcmlwdGlvbiIsDQogICJleHRlcm5hbFBheW1lbnRJZCI6ICIzNDJISEg4OExLREo4OTg3Njc2NyIsDQogICJjYXRlZ29yeSI6ICJFX0NPTU1FUkNFIiwNCiAgInBvaW50T2ZTYWxlSWQiOiAiUE9TNDU4OTYzMjE1OTY1NDc4NTkiLA0KICAidG90YWxBbW91bnQiOiB7DQogICAgImN1cnJlbmN5IjogIlVTRCIsDQogICAgInZhbHVlIjogMTkuOTkNCiAgfQ0KfQ.J2uDZEZL_hlgLAscv3EMX8lKCPBOf1X3UoUEDGhBF0cKFSAvHaDAAtnyzacL53RWsaHmAfDTRHqqFuF6g6wBRStbWukC1pOqXNEYHTXgfHJ01Sh7JZr7IRuX92ol-OgiP7DK01wDnlZ80_wGnJUpWGQjiQEoUzJhOcFyZ44_jSKh7dwU7SWh9wj5FWmC1A8RlBXLpMf6QWCKlA1njw4r7RXUmbLLbdiA71Oiy1LN_Ezf8srYP5y_QhhtoyXxkLEe75YP5ky6d0UObrKpUVbhvj7lwnqMzZVBfD1aIL5F2s8gUg8nQeCUWPUYIRvDNQkmAFTSbqjD2sCG1ysm8JDspA

Po zdekodowaniu JWS otrzymuje się JWS Header oraz JWS Payload zawierający minimalny komunikat PaymentData. Do podpisu użyto algorytmu asymetrycznego RSASSA-PKCS1-V1_5 with SHA-256 (RS256). W celu weryfikacji sygnatury należy wykorzystać przykładowy klucz publiczny:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtbQuQMzUo5jTMLdq7Y0p
QuZbOwiAJ7Ty3oB3aww78wAEY8Irb+Ns9fkwRadUaKfkT9OMuj6EWos6QvxFXRAe
kxqMVoTnQaaZsAEA471ZBdt3sZxTxDQhf96I7JOTr1BA1J2fgQN1zRB8hnMotEF1
iaGTBtI1yN1RypSsL/mpdgF05E1Urh2OqMSDbv9Arl1cBqt79jJzAXi0uj2CyVp8
7ID0NruLSwD2zFRxW5/NAee1w4lAbuk7EBMCPLkrikW7xsKQyGIubMO4cpeCWZwU
FTnWOHgpft+HdQqnkaTCpWLIEFOG7DRh7h3kU6oHXIoH7KkhMBRNdw104ZNk1rQw
WwIDAQAB
-----END PUBLIC KEY-----

Do weryfikacji odpowiedzi otrzymanej z Cinkciarz Pay należy użyć klucza publicznego udostępnianego przez API GET /jwks.

Komunikacja z Partnerem

Przykładowa odpowiedź API:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCIsImtpZCI6InpDNGo0QWNoZHp3S1hTX01xc2g0QWZ3VnlTdUdzRmdnT18yeHY1dHVzemsifQ.eyJwYXltZW50SWQiOiAiUEFZNzE1MDM3NDIyMTgyNTg3IiwiYXBwcm92ZVVybCI6ICJodHRwczovLzxDSU5LQ0lBUlpfUEFZX0hPU1Q-L2FwcHJvdmUifQ.T8YBr9hhEjIEe2JtFEuVo0GAssd2-9ZL7IEGjMNoamqD6c9Ha1W6Nunlrs-CpYHUabejhcI6Z3EKzuA8Ra9YyKki_BOoK_oPAnKSJMaP6DgYeJ0cxqawqdMYkT0Ku3TpUwte-hwIoWVNFKqfjBncwNfhAXPyx4Ti6eqAQENpL8VmfvsrcmLn96BqbxYo1Hp07K_AmVulJs701a_s0BdSysLmAyhmLcQfVwSWCpTgMc7NXbe1R95T6xRYCsif2FvVZke4cM8f9zDZZI5-V7tgUhx8v3BVUEtanjPsPdDcTUs5ZLYl6EH8yCtWECGxbxxJbV2WDGJTPn6mbNRBtsjsNQ

Nagłówki odpowiedzi:

HTTP/1.1 201 Created
Content-Type: application/jose+json

JWS Header

{
  "alg": "RS256",
  "typ": "JWT",
  "cty": "application/json",
  "kid": "zC4j4AchdzwKXS_Mqsh4AfwVySuGsFggO_2xv5tuszk"
}

JWS Payload

{
  "paymentId": "PAY715037422182587",
  "approveUrl": "https://<CINKCIARZ_APPROVAL_HOST>/approve"
}

Wszystkie komunikaty oraz odpowiedzi wysyłane z systemu Cinkciarz Pay do systemu Partnera są wysyłane w formacie JWS. Przykłady zawarte w dokumentacji dla uproszczenia są podawane w formie zdekodowanej. W celu weryfikacji otrzymanego komunikatu należy pobrać klucz publiczny Cinkciarz Pay i przy jego pomocy zweryfikować autentyczność otrzymanych danych.

Autentyczność parametrów URL

Zdekodowany parametr data (sekcja JWS Payload):

{
  "paymentId": "PAY893669703633781",
  "externalPaymentId": "464/46846/45",
  "result": "SUCCESS"
}

System Cinkciarz Pay po przekierowaniu Klienta na stronę Partnera zamieszcza w ramach skonfigurowanego adresu URL dodatkowe parametry określające status realizacji płatności przez Klienta. W celu zapewnienia autentyczności, parametry te są podpisywane.

Poniżej zaprezentowany jest przykładowy adres URL:

https://shop.com/success?data=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50SWQiOiJQQVk4OTM2Njk3MDM2MzM3ODEiLCJleHRlcm5hbFBheW1lbnRJZCI6IjQ2NC80Njg0Ni80NSIsInJlc3VsdCI6IlNVQ0NFU1MifQ.S83VbMBroVHrAVfXs-tk_Q3BdulpAj3lni0vdegxZ7zCQHhJuIU_DYCFQ3OTG5-EHTJ6zzsmLjjzTw5S8XVy96MXQfHbJKY-jVWEAEB5mRiLgJMn4PssQRLgaGwWbhbFbvD5qqPCFpIz96-FWnkvoxuPaa86Ywfdhd-aPAZ43m3afIAXaKOt9Iy5A0fmsbtZsiwAtrFYMmPoNZcEl02NZ9paIaJ8RXaoU4oTKgMEVjZECQ4smqfnpVg7UD1UIw54F_NaTppx0fAAIZYp5n9lzT9-DwXMe875AbH0ZzRq6-500fSCmJQc3_ym9bM8Xa5gbKSlNQrw2t4pjxJkXbPOGw

Generowanie klucza publicznego

Linux

Instalacja potrzebnego oprogramowania

W celu wygenerowania klucza publicznego należy użyć programu openssl.
Poniższe kroki przedstawiają proces instalacji oprogramowania:

  1. Należy uruchomić konsolę
  2. W zależności od dystrybucji, należy zainstalować openssl menadżerem pakietów podanym poleceniem

Generowanie klucza

  1. Należy uruchomić konsolę
  2. W celu wygenerowania pary kluczy należy wprowadzić następujące polecenia:
    openssl genpkey -out "klucz-prywatny.pem" -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    openssl rsa -in "klucz-prywatny.pem" -out "klucz-publiczny.pem" -outform PEM -pubout
  3. Klucz publiczny znajduje się w pliku "klucz-publiczny.pem"

macOS

Instalacja potrzebnego oprogramowania

W celu wygenerowania klucza należy użyć programu openssl.
Poniższe kroki przedstawiają proces instalacji oprogramowania:

  1. Należy uruchomić Terminal
  2. W celu instalacji openssl niezbędnym jest zainstalowanie menadżera pakietów dla macOS homebrew:
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. W celu instalacji openssl menadżerem pakietów należy wprowadzić następujące polecenie:
    brew install libressl

Generowanie klucza

  1. Należy uruchomić Terminal
  2. W celu wygenerowania pary kluczy należy wprowadzić następujące polecenia:
    openssl genpkey -out “klucz-prywatny.pem” -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    openssl rsa -in “klucz-prywatny.pem” -out “klucz-publiczny.pem” -outform PEM -pubout
  3. Klucz publiczny znajduje się w pliku "klucz-publiczny.pem"

Windows

Instalacja potrzebnego oprogramowania

W celu wygenerowania klucza należy użyć programu openssl, który jest częścią oprogramowania libressl dostarczonego przez OpenBSD dla systemu Windows.
Poniższe kroki przedstawiają proces instalacji oprogramowania:

  1. Należy pobrać libressl z oficjalnej strony:
    https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.5.5-windows.zip
  2. Należy rozpakować archiwum libressl-2.5.5-windows.zip

Generowanie klucza

  1. Należy przejść do wypakowanego katalogu libressl-2.5.5-windows/x86/
  2. Należy uruchomić program openssl.exe
  3. W celu wygenerowania pary kluczy należy wprowadzić podane polecenia:
    genpkey -out “klucz-prywatny.pem” -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    rsa -in “klucz-prywatny.pem” -out “klucz-publiczny.pem” -outform PEM -pubout
  4. Klucz publiczny znajduje się w bieżącym katalogu w pliku "klucz-publiczny.pem"

Dodanie klucza publicznego

curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/json" \
     -d "@public-key.json" \
     "<CINKCIARZ_PAY_HOST>/public_keys"

public-key.json { "pem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnIo4OMp7I5ugVgGQquUL\nFFdC0m1sL+1e7M1zX8lobKPJpQwApDKaEFTBWjrK5aXvzAsxqKzKzG3yUCSGqa/f\nhuzdzs3kBlvIFCPwk5dM5uc5v2+2W0SF0/8lF3NBUjK2jz8s3Nyb3cCWCfysRF+1\nKhF/4ushqX4spCraIU2GkavZ6ETn/Oyfu1fJnZSuH16fwj2OwGsFnTUHam5yrihn\nhtxIkp4eUbhBOkjMMwb4XLygD1dlcg61Pbe60dmuwV+ZWQzfoi4QzlZd9kpePEva\nbPar+AUItKilx5XvNm86PLGBbcsGIMhtew019UP0MrgF1S2/99ZsF2V76haipaXS\nkQIDAQAB\n-----END PUBLIC KEY-----" }

Nagłówki odpowiedzi:

HTTP/1.1 201 Created
Content-Type: application/json

Odpowiedź:

{
  "kid": "lpSoenUSsyxPtZlkP3tGLH9iPLZn1L4zf0G9jUhX3zQ"
}

W celu umożliwienia bezpiecznej komunikacji pomiędzy Cinkciarz Pay i systemem Partnera istotne jest dostarczenie przez Partnera klucza publicznego, którym będą weryfikowane komunikaty wysyłane przez system. Klucz publiczny w formacie PEM można dodać do systemu Cinkciarz Pay:

Zasób

POST <CINKCIARZ_PAY_HOST>/public_keys Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Uwagi
Authorization
Bearer <access_token>
Musi zawierać token dostępowy typu Bearer. Więcej informacji w Pobranie tokena dostępowego.
Content-Type application/json

Zawartość

Obiekt PublicKey zawierający dane klucza publicznego

Nazwa pola Typ Wymagalność Opis
pem String TAK Klucz publiczny Partnera.
sampleData SampleData NIE Obiekt zawierający przykładowe teksty do weryfikacji klucza publicznego.

Obiekt SampleData zawierający przykładowe teksty do weryfikacji klucza publicznego

Przykład żądania z wypełnionym opcjonalnym polem sampleData:

curl -X POST \\
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \\
     -H "Content-Type: application/json" \\
     -d "@public-key.json" \\
     "<CINKCIARZ_PAY_HOST>/public_keys"

public-key.json
     {
        "pem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnIo4OMp7I5ugVgGQquUL\nFFdC0m1sL+1e7M1zX8lobKPJpQwApDKaEFTBWjrK5aXvzAsxqKzKzG3yUCSGqa/f\nhuzdzs3kBlvIFCPwk5dM5uc5v2+2W0SF0/8lF3NBUjK2jz8s3Nyb3cCWCfysRF+1\nKhF/4ushqX4spCraIU2GkavZ6ETn/Oyfu1fJnZSuH16fwj2OwGsFnTUHam5yrihn\nhtxIkp4eUbhBOkjMMwb4XLygD1dlcg61Pbe60dmuwV+ZWQzfoi4QzlZd9kpePEva\nbPar+AUItKilx5XvNm86PLGBbcsGIMhtew019UP0MrgF1S2/99ZsF2V76haipaXS\nkQIDAQAB\n-----END PUBLIC KEY-----",
        "sampleData": {
            "decodedText": "test",
            "encodedText": "HHjI8WE+jlc/K7vgoYCAqe0NlIGpEHkIcx7iUze2T2hOMOpVogtAUq2XJLDWIkJ6kOIFAfYWrCfXullMIfRKix7ch9CHnBTGg0e0DHOZEw42C/50YhMzg1GpfLSJutQpOMU/KEjSXdvuJiKwngHWqpvJTxHTYJkPkLHzUzANz3iB1XB8KBepnHBW2WQ8SUBb8qw27AD1Gc6bySIgx8OoFSpZAsyDQanPtz/TkYBpakakRdw0ISc/cAM8KKTjOxTbHOwWcNDlwAmoBNS+eUGeH/yNBwjPnK1TS0yhmdgrerIrJ+yZm1VI5EHPbzWMBWx142LE/M9d9AEozAMYCUtOlg=="
        }
     }
Nazwa pola Typ Wymagalność Opis
decodedText String TAK Przykładowy tekst przesyłany w celu weryfikacji poprawności klucza publicznego.
encodedText String TAK Przykładowy tekst z pola decodedText podpisany przez klucz prywatny z sygnaturą SHA-256.

Odpowiedź

Nazwa pola Typ Wymagalność Opis
kid String TAK Identyfikator klucza publicznego Partnera.

Błędy API

Metoda POST /public_keys może zwrócić poniższe błędy biznesowe:

Pobranie kluczy publicznych

curl -X GET \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     "<CINKCIARZ_PAY_HOST>/public_keys"

Nagłówki odpowiedzi:

HTTP/1.1 200 Success
Content-Type: application/json
HTTP/1.1 200 Success
Content-Type: application/jose+json

Odpowiedź:

{
 "publicKeys": [
   {
     "kid": "chi09N6Bog_0IvtrahDhZRGF7kiHTAhQaIm4x_wdpQU",
     "pem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoPYw28jrN71VoWHfSkTR\nb4v8OdYMjwZRs2dg5vPZjv0xryNAqHpHYP5+SCpEz6YRFGzuCWhqkNgSKmZgLBxv\nBVJt8YqZOtbnB4as/4TI0dy73YUmw00LYXLTcrS6al6OFtC4SehUREgoVG9V8Hlf\nx9T0bnNOW5R0z3LvkC+Y8e1Gm+xtX+K5uX00md5TI1jk5GqoE9D7cuv5mBX50Igi\nzMqbZYttu/gdA3TWD6JnceMU2WPKJDLowGN4RnUtQJQiApfRQZDPblB+9AKJkiTy\n8N4g9hAVmKbwC3cehO1vMB7ujOlJrNAXjh1rO7B3OJQ0JXcpb2UhrPZ/DIuRdLvX\n6QIDAQAB\n-----END PUBLIC KEY-----"
   }
 ]
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwdWJsaWNLZXlzIjpbeyJraWQiOiJjaGkwOU42Qm9nXzBJdnRyYWhEaFpSR0Y3a2lIVEFoUWFJbTR4X3dkcFFVIiwicGVtIjoiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBb1BZdzI4anJONzFWb1dIZlNrVFJcbmI0djhPZFlNandaUnMyZGc1dlBaanYweHJ5TkFxSHBIWVA1K1NDcEV6NllSRkd6dUNXaHFrTmdTS21aZ0xCeHZcbkJWSnQ4WXFaT3RibkI0YXMvNFRJMGR5NzNZVW13MDBMWVhMVGNyUzZhbDZPRnRDNFNlaFVSRWdvVkc5VjhIbGZcbng5VDBibk5PVzVSMHozTHZrQytZOGUxR20reHRYK0s1dVgwMG1kNVRJMWprNUdxb0U5RDdjdXY1bUJYNTBJZ2lcbnpNcWJaWXR0dS9nZEEzVFdENkpuY2VNVTJXUEtKRExvd0dONFJuVXRRSlFpQXBmUlFaRFBibEIrOUFLSmtpVHlcbjhONGc5aEFWbUtid0MzY2VoTzF2TUI3dWpPbEpyTkFYamgxck83QjNPSlEwSlhjcGIyVWhyUFovREl1UmRMdlhcbjZRSURBUUFCXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0ifV19.S6QDamP9oYo-0CumydeSa4qlYYekV8sjNzLlFyDggdzwjRgi7aaGvgk_jeddJqKR74npGPABpKozl-ZY1S9SLHWIj4rh0ffB7y50X01o2DV5NRFOM0jyZ8oFCwk215D5-UfpTc-Np03_8WacfD634crIM4qHBwGZgz6EbQUO9qI1tIOUdbGhi55fWY1lKFn0Y2wIm8LQC1YHy81DssjPw3FBPhKTIgoUv6sRT_4JU2xOSnNac0r3Zwtm6Cu4IDKT7XVjUzE8R31vNvbUvRiLJLV6eiG8-x8w5WFdLDPYmMi_6h3XrZIGwhnYqKBQXaVDola0zSgtlh6OriJwqxrMRQ

Dodane klucze publiczne można zweryfikować w Panelu sprzedawcy w sekcji konfiguracja. Można je również pobrać wywołując zasób GET /public_keys opisany poniżej.

Zasób

GET <CINKCIARZ_PAY_HOST>/public_keys Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Uwagi
Authorization
Bearer <access_token>
Musi zawierać token dostępowy typu Bearer. Więcej informacji w Pobranie tokena dostępowego.

Odpowiedź

Obiekt PublicKeys zawierający listę dodanych kluczy publicznych

Nazwa pola Typ Wymagalność Opis
publicKeys Array NIE Lista obiektów typu PublicKey.

Obiekt PublicKey zawierający informację o kluczu publicznym

Nazwa pola Typ Wymagalność Opis
kid String TAK Identyfikator klucza publicznego.
pem String TAK Klucz publiczny.
expiredDate String NIE Data i czas wygaśnięcia klucza zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.

Błędy API

Metoda GET /public_keys może zwrócić jedynie błędy techniczne.

Pobranie klucza Cinkciarz Pay

curl -X GET \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     "<CINKCIARZ_PAY_HOST>/jwks"

Nagłówki odpowiedzi:

HTTP/1.1 200 Success
Content-Type: application/json

Odpowiedź:

{
 "keys": [
   {
     "kty": "RSA",
     "kid": "zC4j4AchdzwKXS_Mqsh4AfwVySuGsFggO_2xv5tuszk",
     "use": "sig",
     "n": "hFava6Gd2uyA9XHmD7IIxiKD-S2vBcJ0QtgjodtvDeI4y3r5Ab_s_XMvTvbdSkCf0nmK84UwWwayQwnTboafvktCRndfnvSXWCVClgiVWJmnNibPhtsMI_uelmc99OjtPM93UZ6_yiohi1mKpC_w8MygxHX7R3rFMxssO5h-qXPfjWYWAiC0-B_Vf592E52N-dOF_yUi5hAP14gFbPv_LSWn2dSWkg2i6n5lTL6QzNQueBw3Q04odYXrbALPm1M0ucwgDewWW8LTzRAsqKwIeY9iTblq9ywxnExbq5qORgtNVk3zunqEYRKQfJIINFZgJSmqxxAfvnzlJyvuih97zQ",
     "e": "AQAB"
   }
 ]
}

W celu weryfikacji komunikatów otrzymywanych z systemu Cinkciarz Pay wymagane jest posiadanie klucza publicznego systemu Cinkciarz Pay. W celu pozyskania klucza należy wykorzystać zasób GET /jwks.

Zasób

GET <CINKCIARZ_PAY_HOST>/jwks Zobacz adresy serwerów

Nagłówki

Nazwa Wartość Uwagi
Authorization
Bearer <access_token>
Musi zawierać token dostępowy typu Bearer. Więcej informacji w Pobranie tokena dostępowego.

Odpowiedź

Obiekt PublicKeys zawierający listę kluczy publicznych systemu Cinkciarz Pay

Nazwa pola Typ Wymagalność Opis
keys Array TAK Lista obiektów typu PublicKey.

Obiekt PublicKey zawierający informację o kluczu publicznym Cinkciarz Pay

Nazwa pola Typ Wymagalność Opis
kty String TAK Typ klucza.
kid String TAK Identyfikator klucza publicznego.
use String TAK Sposób użycia klucza.
n String TAK Moduł standardowego PEM.
e String TAK Wykładnik standardowego PEM.

Błędy API

Metoda GET /jwks może zwrócić jedynie błędy techniczne.

Lista wspieranych walut

Waluta Kod waluty Liczba cyfr po separatorze dziesiętnym Minimalna liczba jednostek waluty dla transakcji
Dirham Zjednoczonych Emiratów Arabskich AED 2 1
Dolar australijski AUD 2 1
Lew bułgarski BGN 2 1
Dolar kanadyjski CAD 2 1
Frank szwajcarski CHF 2 1
Juan chiński CNY 2 1
Korona czeska CZK 2 10
Korona duńska DKK 2 10
Euro EUR 2 1
Funt brytyjski GBP 2 1
Dolar hongkoński HKD 2 1
Kuna chorwacka HRK 2 1
Forint węgierski HUF 0 100
Nowy szekel izraelski ILS 2 1
Jen japoński JPY 0 100
Peso meksykańskie MXN 2 1
Korona norweska NOK 2 10
Dolar nowozelandzki NZD 2 1
Polski złoty PLN 2 1
Lej rumuński RON 2 1
Rubel rosyjski RUB 2 10
Korona szwedzka SEK 2 10
Dolar singapurski SGD 2 1
Lira turecka TRY 2 1
Dolar amerykański USD 2 1
Rand południowoafrykański ZAR 2 1
Bat tajlandzki THB 2 100
Dinar serbski RSD 2 10

Algorytm wysyłania powiadomień

Nieudana próba wysłania: Kolejna próba wysłania za:
1 10 sekund
2 20 sekund
3 30 sekund
4 - 300 120 sekund
> 300 Kolejne próby nie będą podejmowane