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:

API dotyczy obsługi płatności w modelach:

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

Jak zacząć?

W celu integracji z systemem Cinkciarz Pay, Partner musi posiadać:

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

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 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: en,pl;q=0.9,pl-PL;q=0.8" \
     -d "@data.json" \
     "<CINKCIARZ_PAY_HOST>/payments"

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

data.jws
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJleHRlcm5hbFBheW1lbnRJZCI6IjM0MkhISDg4TEtESjg5ODc2NzY3IiwicG9pbnRPZlNhbGVJZCI6IlBPUzQ1ODk2MzEzNjU0ODk2NTQiLCJjYXRlZ29yeSI6IkVfQ09NTUVSQ0UiLCJ0b3RhbEFtb3VudCI6eyJjdXJyZW5jeSI6IlBMTiIsInZhbHVlIjoxOS45OX0sIm1lcmNoYW50Ijp7Im5hbWUiOiJTaG9wIG5hbWUifSwiZGVzY3JpcHRpb24iOiJQYXltZW50IGRlc2NyaXB0aW9uLiJ9.gscljrSF5Mh9poSdxRQGJKBymk4Qm9sWpYYIgps0dOQ2boyx7ajYAbzNI53Ux9VpkniIUNlTquoPfKY2L92doDgT9ia53IlD6_8hEfqBy0FxfCYkvMcunOOStq9W_1p3YiA_iYQTvBbuuir6nTGIsiEqTcy-6amJLodpR-dSKzrBde4snY5s8pVhHQE1zvKzzZHhPFxUTwz-4dqpopmVHZUDIPDq-xnndipe-1C_kA2fzJC01AVuEyQErZUIROBFRQ0xG4icOJclXLuCUAMg9NYGm-wb7dRRpNFjazg6HGOW6gm5QGVuTo2aZs9tP5-WfZy7m47MOgeaEqEDU0urog

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",
  "token": "dGBcEMQoyff6OCQY5l1rehXAwgCDnEwhtp573P1EJyswGBJ79G"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50SWQiOiJQQVk3MTUwMzc0MjIxODI1ODciLCJhcHByb3ZlVXJsIjoiaHR0cHM6Ly88Q0lOS0NJQVJaX0FQUFJPVkFMX0hPU1Q-L2FwcHJvdmUiLCJ0b2tlbiI6ImRHQmNFTVFveWZmNk9DUVk1bDFyZWhYQXdnQ0RuRXdodHA1NzNQMUVKeXN3R0JKNzlHIn0.CRTGAMRkd2kHey33ID65n0hrv_0L1NSv628HtKw7dMp8W5Lou1OsJyUkDYa3VfeHUf0V6j2YLJmOt8bU09I_8zpwQH1-5-JIFnmLkByqp_a0RDKnmslFwD9K4p__OE9QqpLta-u7u5h8v5zK0esQ0w2-9wcKzVfwUrhl8ZiTNxP3BZL5ZDAUoECK9MWmT_aYchc2RuuNcdXiGEh-t-ELM_MwxlRYI-ab1froAEFHkaxxZTbzAmJsbPcWBtTR-whWOLKVZV5eLTIV1Z-8-ZD7q-pCHqalbkN5H8czrBuXySb92pDf58iRUsm4lgXY17PmO51fwhlfQ-UtKpQBDWmtFQ

Umożliwia utworzenie transakcji płatności.

Zasób

POST <CINKCIARZ_PAY_HOST>/payments

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 jedną z dwóch domen interfejsu płatniczego. Dla pl jest to <CINKCIARZ_PAY_WEB_HOST>, a dla pozostałych języków (lub braku ustawienia nagłówka) <CONOTOXIA_PAY_WEB_HOST>. 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ą.
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.
pointOfSaleId String TAK 18 znaków Identyfikator punktu płatności.
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.
notificationUrlParameters Object NIE max. 1024 znaki Dodatkowe parametry, które są wysyłane w powiadomieniach URL informujących o statusie płatności.
merchant Merchant TAK Dane Merchanta.
storeCustomer StoreCustomer NIE Dane klienta sklepu, które są używane do skrócenia procesu płatności poprzez automatyczne uzupełnianie danych płatnika.
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.
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. 19 znaków ze wsparciem dla 2 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.

Obiekt Merchant

Nazwa pola Typ Wymagalność Ograniczenia Opis
name String TAK max. 100 znaków Nazwa Merchanta.

Obiekt StoreCustomer zawierający dane klienta sklepu

Nazwa pola Typ Wymagalność Ograniczenia Opis
firstName String NIE max. 100 znaków Imię klienta sklepu.
lastName String NIE max. 100 znaków Nazwisko klienta sklepu.
email String NIE max. 512 znaków Adres e-mail klienta sklepu.

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.

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 Metoda płatności 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, adres URL do akceptacji płatności i token 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.
token String TAK max. 50 znaków Unikalny token do potwierdzenia 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",
      "amount": {
        "value": 153.13,
        "currency": "EUR"
      },
      "description": "Order 000000001",
      "partner": {
        "commission": {
          "fee": {
            "value": 1.25,
            "currency": "EUR"
          }
        }
      },
      "type": "ONLINE_PAYMENT",
      "createdDate": "2021-02-17T11:36:15.367Z"
    },
    {
      "paymentId": "PAY815576576741391",
      "externalPaymentId": "121/06/2018",
      "status": "BOOKED",
      "amount": {
        "value": 23.52,
        "currency": "EUR"
      },
      "description": "Order 000000002",
      "type": "ONLINE_PAYMENT",
      "createdDate": "2021-01-11T07:26:33.302Z",
      "bookedDate": "2021-01-11T07:29:36.468Z"
    }
  ],
  "pagination": {
    "first": true,
    "last": true,
    "currentPageNumber": 1,
    "currentPageElementsCount": 2,
    "pageSize": 10,
    "totalPages": 1,
    "totalElements": 2,
    "pageLimitExceeded": true
  }
}
eyJhbGciOiJSUzI1NiIsImtpZCI6Il8yNzVUd3dYOVhtaVotak1wLTJwNDZ0SUsyZE0tR2xWM3dYTU1GUTM5UUEifQ.ewogICAiZGF0YSI6WwogICAgICB7CiAgICAgICAgICJwYXltZW50SWQiOiJQQVk3NzIyMzc2OTI1NDgxMTciLAogICAgICAgICAiZXh0ZXJuYWxQYXltZW50SWQiOiIxMjgvMDYvMjAxOCIsCiAgICAgICAgICJzdGF0dXMiOiJQUk9DRVNTSU5HIiwKICAgICAgICAgImFtb3VudCI6ewogICAgICAgICAgICAidmFsdWUiOjE1My4xMywKICAgICAgICAgICAgImN1cnJlbmN5IjoiRVVSIgogICAgICAgICB9LAogICAgICAgICAiZGVzY3JpcHRpb24iOiJPcmRlciAwMDAwMDAwMDEiLAogICAgICAgICAicGFydG5lciI6ewogICAgICAgICAgICAiY29tbWlzc2lvbiI6ewogICAgICAgICAgICAgICAiZmVlIjp7CiAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6MS4yNSwKICAgICAgICAgICAgICAgICAgImN1cnJlbmN5IjoiRVVSIgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAgICAgInR5cGUiOiJPTkxJTkVfUEFZTUVOVCIsCiAgICAgICAgICJjcmVhdGVkRGF0ZSI6IjIwMjEtMDItMTdUMTE6MzY6MTUuMzY3WiIKICAgICAgfSwKICAgICAgewogICAgICAgICAicGF5bWVudElkIjoiUEFZODE1NTc2NTc2NzQxMzkxIiwKICAgICAgICAgImV4dGVybmFsUGF5bWVudElkIjoiMTIxLzA2LzIwMTgiLAogICAgICAgICAic3RhdHVzIjoiQk9PS0VEIiwKICAgICAgICAgImFtb3VudCI6ewogICAgICAgICAgICAidmFsdWUiOjIzLjUyLAogICAgICAgICAgICAiY3VycmVuY3kiOiJFVVIiCiAgICAgICAgIH0sCiAgICAgICAgICJkZXNjcmlwdGlvbiI6Ik9yZGVyIDAwMDAwMDAwMiIsCiAgICAgICAgICJ0eXBlIjoiT05MSU5FX1BBWU1FTlQiLAogICAgICAgICAiY3JlYXRlZERhdGUiOiIyMDIxLTAxLTExVDA3OjI2OjMzLjMwMloiLAogICAgICAgICAiYm9va2VkRGF0ZSI6IjIwMjEtMDEtMTFUMDc6Mjk6MzYuNDY4WiIKICAgICAgfQogICBdLAogICAicGFnaW5hdGlvbiI6ewogICAgICAiZmlyc3QiOnRydWUsCiAgICAgICJsYXN0Ijp0cnVlLAogICAgICAiY3VycmVudFBhZ2VOdW1iZXIiOjEsCiAgICAgICJjdXJyZW50UGFnZUVsZW1lbnRzQ291bnQiOjIsCiAgICAgICJwYWdlU2l6ZSI6MTAsCiAgICAgICJ0b3RhbFBhZ2VzIjoxLAogICAgICAidG90YWxFbGVtZW50cyI6MiwKICAgICAgInBhZ2VMaW1pdEV4Y2VlZGVkIjp0cnVlCiAgIH0KfQ.EuuDkfr9rv90nlZ0hbjTGa014qw_oB8EDTy1DEwfpgeFuEOK7yeEJztPX07jhT3pwdIB7Dc8c9sbSCgKMCvIjoXReNicw6LyJxQwyTs9tR8BEF-UWoLKxSqUP1h_T4jpPw9YH8GMGa1UZI9nktICNezbz35fAk5UH5RhMtIbvrpxVyz4AgBGv5oxqOOS2tXj1vIjZnJ8Vu46LkLKhUZ7RyHjJxUrf5UjkghwMY4URqkKD7jX7-YENfNy5tnH1kfyvtn1osxRfjDGY1wX4JbFUlVFJdkHed0WhcEIIoqYf4MUZ6yD5XvUu1784V3Gq2VVmvoVZiawAU-nUZtbmskr4w

Umożliwia pobieranie listy płatności o zadanych parametrach wyszukiwania.

Zasób

GET <CINKCIARZ_PAY_HOST>/payments

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=PAY772237692548117&paymentIds=PAY815576576741391).
externalPaymentId String NIE Identyfikator zewnętrzny płatności.
createdDateFrom String NIE Data i czas utworzenia płatności od, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
createdDateTo 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 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.
amount Amount TAK Kwota płatności wraz z walutą.
description String TAK min. 1 znak max. 128 znaki Opis płatności.
partner Partner NIE Dane dotyczące partnera.
type String TAK max. 20 znaki Typ płatności.
createdDate String TAK max. 128 znaków Data i czas utworzenia płatności zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
cancelledDate String NIE max. 128 znaków Data i czas anulowania płatności zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
bookedDate String NIE max. 128 znaków Data i czas zaksięgowania płatności zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.

Pole type może przyjmować wartości:

Wartość Opis
ONLINE_PAYMENT Płatność online
PAYMENT_LINK_PARTNER Płatność linkiem

Obiekt Partner zawierający informację dotyczące partnera

Nazwa pola Typ Wymagalność Ograniczenia Opis
commission Commission NIE Opłaty poniesione przez Partnera.

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

Nazwa pola Typ Wymagalność Ograniczenia Opis
value Number TAK Kwota. Max. 19 znaków ze wsparciem dla 2 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.

Obiekt Commission zawierający informację o pobranych prowizjach płatności

Nazwa pola Typ Wymagalność Ograniczenia Opis
fee Fee TAK Kwota prowizji wraz z walutą.

Obiekt Fee zawierający wartość prowizji płatności

Nazwa pola Typ Wymagalność Ograniczenia Opis
value Number TAK Kwota. Max. 19 znaków ze wsparciem dla 2 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.

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
UNIONPAY UnionPay
BLIK BLIK
TRUSTLY Trustly
PAY_BY_LINK Przelew online
GOOGLE_PAY Google Pay
PAYPAL PayPal
SKRILL_WALLET Skrill
APPLE_PAY Apple Pay
RAPID_TRANSFER Rapid Transfer
VIPPS Vipps

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).
PENDING Płatność jest przetwarzana.

BLIK Level 0

Po utworzeniu płatności transakcja może zostać zatwierdzona z pominięciem interfejsu płatniczego dla metody BLIK (BLIK Level 0). Udostępnione zasoby pozwolą wykonać płatność bez potrzeby przekierowania klienta na zewnętrzną stronę płatności.

Przykład użycia:
alt text

Dostępność metody

Przed wywołaniem zatwierdzenia płatności metodą BLIK (BLIK Level 0) można sprawdzić jej dostępność poprzez wykorzystanie poniższego zasobu.

curl -X GET \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     "<CINKCIARZ_PAY_HOST>/payments/methods?currency=PLN&pointOfSaleId=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": [
    {
      "type": "BLIK",
      "status": "ACTIVE"
    }
  ]
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJkYXRhIjpbeyJ0eXBlIjoiQkxJSyIsInN0YXR1cyI6IkFDVElWRSJ9XX0.Oo8llkqARDeUjaU-L8Ff7GquPHPZ1eZRzbhtTmi0dc70s76J2Bh3X2iJ631-W3PQGcxuqp34pKboghYxyqq9ctC2AXFGUc-jfPi2DVOrLm08QAc31CjJB7zRXIHl5tXQYbcGqAFH4J-Ks-xQIG7jpW82W6hPS4BPyxE4wnxqh_De40-bu-q4hFjzW3_5O5CCagjuvEVnd24HyShzVCfBm2CNVeRz_nlEjvCLkjMn5kiceNAEPD-Rpxv82lDXnHxW3EX1pdPHIKdYXoFD0HnPvTqQA47hvSFu-NtLa1FxiAF2OpRWk5KzJK7VZ0SlLGLVwyLuygjOCG7cUmIm0GaztA

Zasób

GET <CINKCIARZ_PAY_HOST>/payments/methods?currency={currency}&pointOfSaleId={pointOfSaleId}

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.

Parametry zapytania

Nazwa pola Typ Wymagalność Opis
currency String TAK Kod waluty zgodny z ISO 4217. Dozwolone kody walut zdefiniowane zostały w Lista wspieranych walut.
pointOfSaleId String TAK Identyfikator punktu płatności.

Odpowiedź

Obiekt Response zawierający dane metod płatności

Nazwa pola Typ Wymagalność Opis
data Array TAK Lista z elementami typu PaymentMethod.

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

Nazwa pola Typ Wymagalność Opis
type String TAK Typ metody płatności.
status String TAK Status metody płatności.

Pole status może przyjmować wartości:

Wartość Opis
ACTIVE Metoda płatności jest dostępna.
UNAVAILABLE Metoda płatności jest niedostępna.

Zatwierdzenie płatności

Umożliwia potwierdzenie transakcji płatności dla metody BLIK (BLIK Level 0). Transakcja w tym przypadku jest zatwierdzona w takiej samej walucie, jaka została podana w kroku utworzenia płatności.

curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/json" \
     -H "Accept-Language: pl,cs;q=0.9,en;q=0.8,pl-PL;q=0.7" \
     -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)" \
     -H "User-Real-Ip: 64.233.160.25" \
     -H "User-Real-Port: 45688" \
     -H "User-Screen-Resolution: 1920x1080" \
     -H "fingerprint: {"some.domain":"1df8g16161f8we81sfwe8"}" \
     -d "@data.json" \
     "<CINKCIARZ_PAY_HOST>/payments/token/BernF3Ix5ozjyOBkePeiMkZNgideCMkvUox7bn8Povvq8CXYkv/confirmations"

data.json
{
  "type": "BLIK",
  "blikCode": "123456",
  "additionalData": {
    "email": "[email protected]",
    "firstName": "John",
    "lastName": "Kowalski"
  },
  "notificationsLocale": "en-GB"
}
curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/jose+json" \
     -H "Accept-Language: pl,cs;q=0.9,en;q=0.8,pl-PL;q=0.7" \
     -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)" \
     -H "User-Real-Ip: 64.233.160.25" \
     -H "User-Real-Port: 45688" \
     -H "User-Screen-Resolution: 1920x1080" \
     -H "fingerprint: {"some.domain":"1df8g16161f8we81sfwe8"}" \
     -d "@data.jws" \
     "<CINKCIARZ_PAY_HOST>/payments/token/BernF3Ix5ozjyOBkePeiMkZNgideCMkvUox7bn8Povvq8CXYkv/confirmations"

data.jws
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoiQkxJSyIsImJsaWtDb2RlIjoiMTIzNDU2IiwiYWRkaXRpb25hbERhdGEiOnsiZW1haWwiOiJqLmtvd2Fsc2tpQGNvbm90b3hpYS5jb20iLCJmaXJzdE5hbWUiOiJKb2huIiwibGFzdE5hbWUiOiJLb3dhbHNraSJ9LCJub3RpZmljYXRpb25zTG9jYWxlIjoiZW4tR0IifQ.dJAliOmP8hOThHP73JfPoMgTA1TKktTgnTyj9idzJhTWMyy_St5GgfobWtX85y0SZmohEfm4SOgoBQbArvJFmbTmhJJjpXi5EnTqWL-HFF1i0OoHCD3Em3RBEDtSnVTIVTKyWKshl1puM-LbYdRr02iHlALrM7r72Snc8KrFfYM2_t5kvTzvlNFvMo_TLu_45F-n-2VR8GeyP6bjT9pZm3v1wjbSZbVXYpFXPmJgbAhECng4jEIguE9OQaeP8kKG6_NYYZR5GW72S0zDAjCMCy5bdLWXbe8mr8Ohj6Sf8xAPoSX3vKHyrElO9G4R0CvFUNE7d2V4pNaGtlus4MjXKg

Nagłówki odpowiedzi:

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

Odpowiedź:

{
  "paymentStatus": "WAITING_FOR_NOTIFICATION"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50U3RhdHVzIjoiV0FJVElOR19GT1JfTk9USUZJQ0FUSU9OIn0.Up-KrFC3ikd3W88C7-vUu5sJFFva-p34p4kgHpaF0yTF3IKuOUc6fSivleWwZy6pV5mGvYR2_nzdMs3xH5nfHrzj4Cwws9Mi0ZwxWy9Zm-fcnmbMsPBQ1NbsuTIvC8SmZccmJHdVR8wxAtXVkFKiDGJ66_h0UdrUWKijhlpoZ-B_WULd8tSP5iOnAyamohx7_JwAKAapLxagZdexi_Fmoh3IYyzzVe8gEjR3g7upWJ5NU_8AK_6e17aiSskXnEe9-lMrcShG3M2FwU7qvCGrAN6QYxq5g-n0-RbG-wkzX6GSQMQUJcAcy5r5sP6t7ZxwBZ36BNOBYBxWNwLjCoIXxQ

Zasób

POST <CINKCIARZ_PAY_HOST>/payments/token/{token}/confirmations

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> TAK Nagłówek ustawiający odpowiedni język powiadomień e-mail ze statusem płatności, które otrzyma klient. Musi być zgodny ze specyfikacją RFC 7231.
User-Agent Wartość nagłówka User-Agent z przeglądarki klienta. TAK
User-Real-Ip Adres IP klienta. TAK
User-Real-Port Port klienta. TAK
User-Screen-Resolution Rozdzielczość ekranu klienta (np. 1920x1080). TAK
fingerprint Hash identyfikatora sesji klienta. TAK

Parametry ścieżki

Nazwa pola Typ Wymagalność Opis
token String TAK Token płatności z pola token w obiekcie PaymentInfo.

Zawartość

Nazwa pola Typ Wymagalność Opis
type String TAK Typ metody płatności.
blikCode String TAK Kod z systemu BLIK. Pole wymagane przy wybranej metodzie płatności BLIK (BLIK Level 0).
additionalData AdditionalData TAK Dodatkowe informacje dotyczące klienta.
notificationsLocale String NIE Parametr nadpisujący nagłówek Accept-Language, który ustawia odpowiedni język powiadomień e-mail ze statusem płatności, które otrzyma klient. Powinien być zgodny ze standardem BCP 47.

Pole notificationsLocale może przyjmować wartości:

Wartość Opis
en-GB Angielski
pl-PL Polski

Obiekt AdditionalData zawierający dodatkowe informacje o Kliencie

Nazwa pola Typ Wymagalność Opis
email String TAK E-mail klienta.
firstName String TAK Imię klienta.
lastName String TAK Nazwisko klienta.

Odpowiedź

Nazwa pola Typ Wymagalność Opis
paymentStatus String TAK Status płatności.

Możliwe wartości pola paymentStatus:

Wartość Opis
INITIATED Płatność zainicjalizowana.
WAITING_FOR_NOTIFICATION Płatność oczekuje na potwierdzenie od zewnętrznego dostawcy płatności.
AUTHORIZATION_REQUESTED Płatność wymaga autoryzacji u zewnętrznego dostawcy płatności.
CANCELLED Płatność anulowana.
CONFIRMED Płatność potwierdzona.

Błędy API

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

Status płatności

Pozwala sprawdzić status płatności po jej zatwierdzeniu. Zasób może być wykorzystany w celu aktualizacji statusu transakcji zatwierdzonej metodą BLIK (BLIK Level 0) na ekranie klienta.

curl -X 'GET' \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     "<CINKCIARZ_PAY_HOST>/payments/status?paymentId=PAY445458962445154"

Nagłówki odpowiedzi:

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

Odpowiedź:

{
  "paymentStatus": "CONFIRMED",
  "paymentId": "PAY445458962445154"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50U3RhdHVzIjoiQ09ORklSTUVEIiwicGF5bWVudElkIjoiUEFZNDQ1NDU4OTYyNDQ1MTU0In0.HQHzzoMgBh-gjc1EFlpcSozMSG4HGCaO_U2kWrLLTIihyMLcv-_ySPCLguA8r4OKeXeQRzaX2rCPAVwUyA8Xyuhy9bHXgNHjURw_4OfZy1DvkJxLy6HujsrRixd8NjXKT23bsDSb0Wv_HPn6KL2ATF1vOH0TjNP0dkIe26gcBjPLfo7Sez22nHgjqhWZBIsaZBh9GRr3zURdyjAJkQAzeSPu93OGwPPGsqZVY2oELkXP7sP9iwOKe9BrR2hqskJsWC4PTY8JZvuWOlv8-ho8EZfgugwL6bMn0qh8XVa_Ld5uOuZo2wePhdvGPVrZi7pVWMCIu6iNj9V8tVA0okflOA

Zasób

GET <CINKCIARZ_PAY_HOST>/payments/status?paymentId={paymentId}

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
paymentId String TAK Identyfikator płatności z pola paymentId w obiekcie PaymentInfo.

Odpowiedź

Nazwa pola Typ Wymagalność Opis
paymentId String TAK Identyfikator płatności.
paymentStatus String TAK Status płatności.

Możliwe wartości pola paymentStatus:

Wartość Opis
INITIATED Płatność zainicjalizowana.
WAITING_FOR_NOTIFICATION Płatność oczekuje na potwierdzenie od zewnętrznego dostawcy płatności.
AUTHORIZATION_REQUESTED Płatność wymaga autoryzacji u zewnętrznego dostawcy płatności.
CANCELLED Płatność anulowana.
CONFIRMED Płatność potwierdzona.

EPS

Po utworzeniu płatności transakcja może zostać zatwierdzona z pominięciem interfejsu płatniczego dla metody EPS. Udostępnione zasoby pozwolą wykonać płatność poprzez bezpośrednie przekierowanie klienta na stronę banku. Przykładowe diagramy sekwencji znajdują się w rozdziale Proces płatności - EPS.

Przykład użycia:
alt text

Dostępność metody

Przed wywołaniem zatwierdzenia płatności metodą EPS należy sprawdzić jej dostępność poprzez wykorzystanie poniższego zasobu.

curl -X GET \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     "<CINKCIARZ_PAY_HOST>/payments/methods?currency=EUR&pointOfSaleId=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": [
    {
      "type": "EPS",
      "status": "ACTIVE",
      "issuers": [
        {
          "id": "edc8afd1-6258-4982-b523-aab56e423c8a",
          "name": "Bank name",
          "code": "BANK_CODE"
        }
      ]
    }
  ]
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJkYXRhIjpbeyJ0eXBlIjoiRVBTIiwic3RhdHVzIjoiQUNUSVZFIiwiaXNzdWVycyI6W3siaWQiOiJlZGM4YWZkMS02MjU4LTQ5ODItYjUyMy1hYWI1NmU0MjNjOGEiLCJuYW1lIjoiQmFuayBuYW1lIiwiY29kZSI6IkJBTktfQ09ERSJ9XX1dfQ.H-_hA-eIbjzZBZn3Td-Nl17zKjV5Tq8qkaHQVD50MOVEJEMg-DpOKC_Sb1UujT3ppxJBsfYpsCN5_i7EouTuxK14V-3ckcNiuJt-ZkE_ZMwgV0TmUiNC-ONJJv2AE9YhgzkOH1K_xzkDEoqk5DDz3HMFAHyhyhllaxmE6s7izU4Nu-6o3Q2j_wfUN9dT-R9YWxJ-q_jT88-oes4kRwYEVTd63ov4f9y7svSxvyCOifBfRkvIQkWjmcen-x2LMpg0XUkDxRU0YjSk4Z1SR8D4lmBHihucB8jKTqnbCp6QnHIFhwXKpYkFGwFw9UMsfbt3UCDaEdPM1A5nD2yPNqVYUQ

Zasób

GET <CINKCIARZ_PAY_HOST>/payments/methods?currency={currency}&pointOfSaleId={pointOfSaleId}

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.

Parametry zapytania

Nazwa pola Typ Wymagalność Opis
currency String TAK Kod waluty zgodny z ISO 4217. Dozwolone kody walut zdefiniowane zostały w Lista wspieranych walut.
pointOfSaleId String TAK Identyfikator punktu płatności.

Odpowiedź

Obiekt Response zawierający dane metod płatności

Nazwa pola Typ Wymagalność Opis
data Array TAK Lista z elementami typu PaymentMethod.

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

Nazwa pola Typ Wymagalność Opis
type String TAK Typ metody płatności.
status String TAK Status metody płatności.
issuers Array NIE Lista z elementami typu Issuer.

Pole status może przyjmować wartości:

Wartość Opis
ACTIVE Metoda płatności jest dostępna.
UNAVAILABLE Metoda płatności jest niedostępna.

Obiekt Issuer zawierający szczegóły banku

Nazwa pola Typ Wymagalność Opis
id String TAK Identyfikator banku.
name String TAK Nazwa banku.
code String TAK Kod banku.

Ikony banków

Dla każdego dostępnego banku reprezentowanego przez obiekt Issuer można pobrać ikonę i przedstawić ją klientowi.

Zasób

GET <CONOTOXIA_PAY_HOST>/images/logos/eps/{issuerId}.svg

Parametry ścieżki

Nazwa pola Typ Wymagalność Opis
issuerId String TAK Identyfikator banku z pola id w obiekcie Issuer.

Zatwierdzenie płatności

Umożliwia potwierdzenie transakcji płatności dla metody EPS. Transakcja w tym przypadku jest zatwierdzona w takiej samej walucie, jaka została podana w kroku utworzenia płatności.

curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/json" \
     -H "Accept-Language: pl,cs;q=0.9,en;q=0.8,pl-PL;q=0.7" \
     -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)" \
     -H "User-Real-Ip: 64.233.160.25" \
     -H "User-Real-Port: 45688" \
     -H "User-Screen-Resolution: 1920x1080" \
     -H "fingerprint: {"some.domain":"1df8g16161f8we81sfwe8"}" \
     -d "@data.json" \
     "<CINKCIARZ_PAY_HOST>/payments/token/BernF3Ix5ozjyOBkePeiMkZNgideCMkvUox7bn8Povvq8CXYkv/confirmations"

data.json
{
  "type": "EPS",
  "issuer": "6c48eff1-48be-4751-8eaa-71b96cc06b4d",
  "issuerCode": "BANK_CODE",
  "additionalData": {
    "email": "[email protected]",
    "firstName": "John",
    "lastName": "Kowalski"
  },
  "notificationsLocale": "en-GB"
}
curl -X POST \
     -H "Authorization: Bearer M1ODU2ZDI5NzU3ZWFkYTRjMjEyMTIwNmRiNmQ2MjdmM" \
     -H "Content-Type: application/jose+json" \
     -H "Accept-Language: pl,cs;q=0.9,en;q=0.8,pl-PL;q=0.7" \
     -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)" \
     -H "User-Real-Ip: 64.233.160.25" \
     -H "User-Real-Port: 45688" \
     -H "User-Screen-Resolution: 1920x1080" \
     -H "fingerprint: {"some.domain":"1df8g16161f8we81sfwe8"}" \
     -d "@data.jws" \
     "<CINKCIARZ_PAY_HOST>/payments/token/BernF3Ix5ozjyOBkePeiMkZNgideCMkvUox7bn8Povvq8CXYkv/confirmations"

data.jws
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoiRVBTIiwiaXNzdWVyIjoiNmM0OGVmZjEtNDhiZS00NzUxLThlYWEtNzFiOTZjYzA2YjRkIiwiaXNzdWVyQ29kZSI6IkJBTktfQ09ERSIsImFkZGl0aW9uYWxEYXRhIjp7ImVtYWlsIjoiai5rb3dhbHNraUBjb25vdG94aWEuY29tIiwiZmlyc3ROYW1lIjoiSm9obiIsImxhc3ROYW1lIjoiS293YWxza2kifSwibm90aWZpY2F0aW9uc0xvY2FsZSI6ImVuLUdCIn0.SIocHLiz-_FTdoq2TF88wg9EbnTjJKBuc1T3tvAJLKnpylZBVS5Navck0qIBc-7Y28wyTdVYDg_zHkCoTbzFAB94WdRc0X4_gN55cx4QAxwgWaUmnmSy5BLAVu_Wwj2D9_QU7UMKT_EU5jAjSsm93GjAlXBxzmg-mJ6rsEzER2Tf2tosPPlBX4Vr25qteurcv5RpQSTcw3wZhw4TBtLpw--YfBBXcM9_g3jFKU5k4T0CEbZCzPciA7KDTMbPaz1phV97tcelcMJLDDMxfiew6gRgWftoGd0JqAd2dehhS3U2i7YbyhO62mccSBjxaOy4qS6J77OkbKJntReFW5RKuA

Nagłówki odpowiedzi:

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

Odpowiedź:

{
  "redirectUrl": "https://www.example.com/redirect",
  "redirectMethod": "GET"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJyZWRpcmVjdFVybCI6Imh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3JlZGlyZWN0IiwicmVkaXJlY3RNZXRob2QiOiJHRVQifQ.J5h5_dlyWEmLviMRGQaVMH-b7jBv5CwUQvMWAO51HERInNjqfDWkZdAjB56AARR6BK_FLN7UBPB9DFwtChoReR6xg20gOJld4Ctl00l2wvZ6lPRazIt4MA1Quo3pkM7p64vZQ6QX2mM8vVRqMjdGQc8HgEhHgnwgciU8w9rdxWbFxTWdZnalG2Fu9KXIKG5ZnWTmYO3L91HEWwL9SjI_lL_Os7r8V_ORPQPIX5-A3RUR3s1kTiI0gwPJzRlWzhVTIlRbnRBvj6m5GTJkK3ULug01k1O9UfWoaKNRgJ9TSMNgTi1PHdbm1P_rZRZ5FqMeTb2tWhcRBJquCTaHXF_BNQ

Zasób

POST <CINKCIARZ_PAY_HOST>/payments/token/{token}/confirmations

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> TAK Nagłówek ustawiający odpowiedni język powiadomień e-mail ze statusem płatności, które otrzyma klient. Musi być zgodny ze specyfikacją RFC 7231.
User-Agent Wartość nagłówka User-Agent z przeglądarki klienta. TAK
User-Real-Ip Adres IP klienta. TAK
User-Real-Port Port klienta. TAK
User-Screen-Resolution Rozdzielczość ekranu klienta (np. 1920x1080). TAK
fingerprint Hash identyfikatora sesji klienta. TAK

Parametry ścieżki

Nazwa pola Typ Wymagalność Opis
token String TAK Token płatności z pola token w obiekcie PaymentInfo.

Zawartość

Nazwa pola Typ Wymagalność Opis
type String TAK Typ metody płatności.
issuer String TAK Identyfikator banku z pola id w obiekcie Issuer.
issuerCode String TAK Kod banku z pola code w obiekcie Issuer.
additionalData AdditionalData TAK Dodatkowe informacje dotyczące klienta.
notificationsLocale String NIE Parametr nadpisujący nagłówek Accept-Language, który ustawia odpowiedni język powiadomień e-mail ze statusem płatności, które otrzyma klient. Powinien być zgodny ze standardem BCP 47.

Pole notificationsLocale może przyjmować wartości:

Wartość Opis
en-GB Angielski
pl-PL Polski

Obiekt AdditionalData zawierający dodatkowe informacje o Kliencie

Nazwa pola Typ Wymagalność Opis
email String TAK E-mail klienta.
firstName String TAK Imię klienta.
lastName String TAK Nazwisko klienta.

Odpowiedź

Nazwa pola Typ Wymagalność Opis
redirectUrl String TAK Adres URL banku, na który należy przekierować klienta.
redirectMethod String TAK Metoda HTTP, która powinna być wykorzystana przy przekierowaniu.

Błędy API

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

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.eyJwYXltZW50SWQiOiJQQVk3MTUwMzc0MjIxODI1ODciLCJyZWFzb24iOiJEYW1hZ2VkIGNvdmVyIiwiYW1vdW50Ijp7ImN1cnJlbmN5IjoiUExOIiwidmFsdWUiOjM0Ljk5fSwiZXh0ZXJuYWxSZWZ1bmRJZCI6IjIzNC8wMy8yMDE2Iiwibm90aWZpY2F0aW9uVXJsIjoiaHR0cDovL3Nob3AuY29tL25vdGlmaWNhdGlvbnMifQ.NacbH-nTXcqY8Yv7Ib1B2l2RUS-vRe8MTGauT_9wYEoGUdpZD8Pks8T2_dLVGxtO4An66VNHn61YYNY3XQCVAaeb2oQ_g1jXacTNIFIgoMCF8v6-nKu3sigYgvCntuM98XfRgLD-T7i6chR-TizggWhJ5dSpNRXwEpNfV9YGUgtroLb9Bt4H99Ys-S6Twzfg23Bj6JZEFb121Dsk7cZE2TEdwDjkiM3PUaWqIVbPDXP-N-kYx2ZZKrv4kIyLBa9990i4yn_KxCHcPSrPcyXE4cROTOSjunfCX_y-PfM96H7oR-5vI9cVnuPrSaF2kf6cHjtsUPnOHGqA7Owj7zfEvQ

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.

Zasób

POST <CINKCIARZ_PAY_HOST>/refunds

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. 19 znaków ze wsparciem dla 2 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",
      "amount": {
        "value": 9.99,
        "currency": "EUR"
      },
      "description": "Wrong order",
      "type": "PARTIAL",
      "createdDate": "2020-01-24T10:06:10.945Z"
    },
    {
      "refundId": "REF942484723821414",
      "externalRefundId": "121/06/2018",
      "status": "COMPLETED",
      "amount": {
        "value": 109.99,
        "currency": "EUR"
      },
      "description": "Wrong order",
      "partner": {
        "commission": {
          "fee": {
            "value": 1.25,
            "currency": "EUR"
          }
        }
      },
      "type": "FULL",
      "createdDate": "2020-11-25T15:14:38.226Z",
      "bookedDate": "2020-11-25T15:15:50.140Z"
    }
  ],
  "pagination": {
    "first": true,
    "last": true,
    "currentPageNumber": 1,
    "currentPageElementsCount": 2,
    "pageSize": 10,
    "totalPages": 1,
    "totalElements": 2,
    "pageLimitExceeded": true
  }
}
eyJhbGciOiJSUzI1NiIsImtpZCI6Il8yNzVUd3dYOVhtaVotak1wLTJwNDZ0SUsyZE0tR2xWM3dYTU1GUTM5UUEifQ.ewogICAiZGF0YSI6WwogICAgICB7CiAgICAgICAgICJyZWZ1bmRJZCI6IlJFRjE5Mjg0MzMyNTEzOTU2NyIsCiAgICAgICAgICJleHRlcm5hbFJlZnVuZElkIjoiMTI4LzA2LzIwMTgiLAogICAgICAgICAic3RhdHVzIjoiTkVXIiwKICAgICAgICAgImFtb3VudCI6ewogICAgICAgICAgICAidmFsdWUiOjkuOTksCiAgICAgICAgICAgICJjdXJyZW5jeSI6IkVVUiIKICAgICAgICAgfSwKICAgICAgICAgImRlc2NyaXB0aW9uIjoiV3Jvbmcgb3JkZXIiLAogICAgICAgICAidHlwZSI6IlBBUlRJQUwiLAogICAgICAgICAiY3JlYXRlZERhdGUiOiIyMDIwLTAxLTI0VDEwOjA2OjEwLjk0NVoiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgInJlZnVuZElkIjoiUkVGOTQyNDg0NzIzODIxNDE0IiwKICAgICAgICAgImV4dGVybmFsUmVmdW5kSWQiOiIxMjEvMDYvMjAxOCIsCiAgICAgICAgICJzdGF0dXMiOiJDT01QTEVURUQiLAogICAgICAgICAiYW1vdW50Ijp7CiAgICAgICAgICAgICJ2YWx1ZSI6MTA5Ljk5LAogICAgICAgICAgICAiY3VycmVuY3kiOiJFVVIiCiAgICAgICAgIH0sCiAgICAgICAgICJkZXNjcmlwdGlvbiI6Ildyb25nIG9yZGVyIiwKICAgICAgICAgInBhcnRuZXIiOnsKICAgICAgICAgICAgImNvbW1pc3Npb24iOnsKICAgICAgICAgICAgICAgImZlZSI6ewogICAgICAgICAgICAgICAgICAidmFsdWUiOjEuMjUsCiAgICAgICAgICAgICAgICAgICJjdXJyZW5jeSI6IkVVUiIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0sCiAgICAgICAgICJ0eXBlIjoiRlVMTCIsCiAgICAgICAgICJjcmVhdGVkRGF0ZSI6IjIwMjAtMTEtMjVUMTU6MTQ6MzguMjI2WiIsCiAgICAgICAgICJib29rZWREYXRlIjoiMjAyMC0xMS0yNVQxNToxNTo1MC4xNDBaIgogICAgICB9CiAgIF0sCiAgICJwYWdpbmF0aW9uIjp7CiAgICAgICJmaXJzdCI6dHJ1ZSwKICAgICAgImxhc3QiOnRydWUsCiAgICAgICJjdXJyZW50UGFnZU51bWJlciI6MSwKICAgICAgImN1cnJlbnRQYWdlRWxlbWVudHNDb3VudCI6MiwKICAgICAgInBhZ2VTaXplIjoxMCwKICAgICAgInRvdGFsUGFnZXMiOjEsCiAgICAgICJ0b3RhbEVsZW1lbnRzIjoyLAogICAgICAicGFnZUxpbWl0RXhjZWVkZWQiOnRydWUKICAgfQp9.Q1ydhLIDwWM4WX_bISLiMvfSSvd7DtOvcXLhwFyygYs8vZVDVrTpGCZOHAY9wpfEc0DcAbPZfC-i3EX5hf7Z_D5RbmOzBV3oazWRKZNuf8WflGI2K8J--gJNwuJKUq01tqVab2WLKv_EF7_zybuP9SZmhgKYJnZbz0AIiDW3H4hmieRm6GLjImSXNphel-eg4q4dT83wRndnmxpFdu_lbUa5BiQn9MrEk0uHdOVVnqP8vtZcfvlfF8KGoEAyCn7vFZGMBNmyaUXtipd3PRiXyepgV4oKfUTUbpOYdSBrilUHvDrvhXHmX9Kx0g7SVOfHRrs3WDfXZe9telxnljARTg

Umożliwia pobieranie listy zwrotów o zadanych parametrach wyszukiwania.

Zasób

GET <CINKCIARZ_PAY_HOST>/refunds

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=PAY772237692548117&paymentIds=PAY815576576741391).
refundIds String NIE Identyfikatory zwrotów (parametr refundIds musi być powielany w żądaniu np. /payments?refundIds=REF192843325139567&refundIds=REF942484723821414).
externalRefundId String NIE Identyfikator zewnętrzny zwrotu.
createdDateFrom String NIE Data i czas utworzenia zwrotu od, zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
createdDateTo 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 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.
amount Amount TAK Kwota zwrotu wraz z walutą.
description String TAK min. 1 znak max. 128 znaki Opis zwrotu.
partner Partner NIE Dane dotyczące partnera.
type String TAK max. 20 znaki Typ zwrotu.
createdDate String TAK max. 128 znaków Data i czas utworzenia zwrotu zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
cancelledDate String NIE max. 128 znaków Data i czas anulowania zwrotu zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.
bookedDate String NIE max. 128 znaków Data i czas zaksięgowania zwrotu zgodna z ISO 8601 format YYYY-MM-ddTHH:mm:ss.fffZ.

Pole type może przyjmować wartości:

Wartość Opis
PARTIAL Zwrot częściowy
FULL Zwrot pełny

Obiekt Partner zawierający informację dotyczące partnera

Nazwa pola Typ Wymagalność Ograniczenia Opis
commission Commission NIE Opłaty poniesione przez Partnera.

Obiekt Amount zawierający kwotę i walutę zwrotu

Nazwa pola Typ Wymagalność Ograniczenia Opis
value Number TAK Kwota. Max. 19 znaków ze wsparciem dla 2 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.

Obiekt Commission zawierający informację o pobranych prowizjach zwrotu

Nazwa pola Typ Wymagalność Ograniczenia Opis
fee Fee TAK Kwota prowizji wraz z walutą.

Obiekt Fee zawierający wartość prowizji zwrotu

Nazwa pola Typ Wymagalność Ograniczenia Opis
value Number TAK Kwota. Max. 19 znaków ze wsparciem dla 2 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.

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.

payment-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": "payment-not-found",
    "title": "Payment not found",
    "status": 404,
    "detail": "Payment identified by myGr2rDrbreYhLwTxmZes1J6qTqXcVZsSeMB3elwovvscmnChm token not found"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicGF5bWVudC1ub3QtZm91bmQiLCJ0aXRsZSI6IlBheW1lbnQgbm90IGZvdW5kIiwic3RhdHVzIjo0MDQsImRldGFpbCI6IlBheW1lbnQgaWRlbnRpZmllZCBieSBteUdyMnJEcmJyZVloTHdUeG1aZXMxSjZxVHFYY1Zac1NlTUIzZWx3b3Z2c2NtbkNobSB0b2tlbiBub3QgZm91bmQifQ.TxMbv4nbfWRX5LrWOBCpTU7tHm-r5Hk2nzYL9MONAcPCPfYuO9MTr0dqdmCGy6W0fso7Ka_KFgFUDI5IMD6K_cu0fmQEfHsfXWrMTjENWbDmBS5varbrKtwRpjkHcND--Jegsgo5l6ToHC9beqY-DZn0hVg8dzAPS2y4J0e1UwEtUcAOQsCIM1ASrK-t0oO-j9Oi4K6-a1yEU9m_GmAIVV7hSG2xOmGQUwn6ATdPSRWn83mbnJbOqPESsn4Mqye4IM53i7aKgw5tOKvez3NgCJ20sQHraHAndfqoSc4vpRHqcGEvRcuMnknv2qaXvSvosERPxWocvH_YajqGj5C7CQ

Identyfikator płatności jest niepoprawny.

payment-expired

Nagłówki odpowiedzi:

HTTP/1.1 410 Gone
Content-Type: application/problem+json
HTTP/1.1 410 Gone
Content-Type: application/jose+json

Odpowiedź:

{
    "type": "payment-expired",
    "title": "Payment expired",
    "status": 410,
    "detail": "Payment with identifier PAY715037422182587 expired"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicGF5bWVudC1leHBpcmVkIiwidGl0bGUiOiJQYXltZW50IGV4cGlyZWQiLCJzdGF0dXMiOjQxMCwiZGV0YWlsIjoiUGF5bWVudCB3aXRoIGlkZW50aWZpZXIgUEFZNzE1MDM3NDIyMTgyNTg3IGV4cGlyZWQifQ.GCuNAcmY907pl4Q1ge629UencSPpTxrw_vDFnqwhhgJo46cuvX6YicEyrq5rtC-OBOvkb3S9ZKjFqerXRTFaMbJPKm6ip-1Xjqjc90xizFSu1hSNuJWSD9JrhqXyrKZWz9QHvHb5mQZW5tDItior_DekOtQzZzBSBEd1b403UG8aHHNbunlbwTM6IoXQbX8o1qXHfRqqqgKGumw1b6zprI1xG2rFD6CUMUAzhu6SGyk_8nx3euKG_EosVr-TQ_m42r9s6F1zL9l9l-TouHqe1Y0PkM1WZqmWnjtZZ7P0KfQf3mm6pNIBEYK_F2370lGNgSJe7RYsIxpRxr03VOy4SA

Token płatności wygasł lub płatność została już zatwierdzona.

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.

public-key-is-not-activated

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-is-not-activated",
    "title": "Public key is not activated",
    "status": 409,
    "detail": "Client public key with kid lpSoenUSsyxPtZlkP3tGLH9iPLZn1L4zf0G9jUhX3zQ is not activated"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoicHVibGljLWtleS1pcy1ub3QtYWN0aXZhdGVkIiwidGl0bGUiOiJQdWJsaWMga2V5IGFscmVhZHkgaXMgbm90IGFjdGl2YXRlZCIsInN0YXR1cyI6NDA5LCJkZXRhaWwiOiJDbGllbnQgcHVibGljIGtleSB3aXRoIGtpZCBscFNvZW5VU3N5eFB0WmxrUDN0R0xIOWlQTFpuMUw0emYwRzlqVWhYM3pRIGlzIG5vdCBhY3RpdmF0ZWQifQ.Mb_Naf5LCuvvUpEmCU1nt4sCT9KFnPZcwl3Zq1fnT0Zu0vOOqyOGhAiYA69VxwkhZ170FHA3L6a_56qNx4sNjL9V2oIVs4zLg0HI6jjrqZUWdGEPUgQO3Iq35J1f_afKi4GVaSw3-q0L9eIGyBcumTB1948IR0pNzAGtuR_8ep7wO536lJLJwJod9auS-XEtHba4d0zxiGHy-bqLTZKSOH_xwqWHpUSN3ZI0pD2fiz9HT8rv4_tsE0du-O79ykVdFnG-kWiNowC5ZNBG6wdNRBDAWW2-RHmXVsPaanPEcZ5zhfM9Q7Rw-zDH_21hQ4XSwtf32xu15Y5Ipa03bB_37g

Zwracany, gdy klucz użyty do weryfikacji podpisu nie został aktywowany.

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.

transaction-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": "transaction-below-limit",
    "title": "Transaction below limit",
    "status": 409,
    "detail": "The 0.01 EUR transaction is below the 1.00 EUR limit",
    "limitType": "CURRENCY",
    "money": {
        "value": 0.01,
        "currency": "EUR"
    },
    "limit": {
        "value": 1.00,
        "currency": "EUR"
    }
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoidHJhbnNhY3Rpb24tYmVsb3ctbGltaXQiLCJ0aXRsZSI6IlRyYW5zYWN0aW9uIGJlbG93IGxpbWl0Iiwic3RhdHVzIjo0MDksImRldGFpbCI6IlRoZSAwLjAxIEVVUiB0cmFuc2FjdGlvbiBpcyBiZWxvdyB0aGUgMS4wMCBFVVIgbGltaXQiLCJsaW1pdFR5cGUiOiJDVVJSRU5DWSIsIm1vbmV5Ijp7InZhbHVlIjowLjAxLCJjdXJyZW5jeSI6IkVVUiJ9LCJsaW1pdCI6eyJ2YWx1ZSI6MS4wLCJjdXJyZW5jeSI6IkVVUiJ9fQ.YHIf3PxPqdUlrCh68ycOTgaw01q5jbVfIrlHtfQv_dLbQpEYpXZdqTd8PUB5nZYCuFzhU88aC7TW0kdsAdFrRCUMjxAx5Gas2p2YtL4QGONdpUV-bi8jtOvk9zMnzZY5_j-fPZ4pkUYX3vTdFOJh2-S5CB8dYj0M4behdTwABxzwuVDpw2OMUiVXGA4QDfL-GBSOr3arEnCwqcbAhoq_ocszrP1rozALocGy7Q7Z2J8sP-I9DJEe2JDfslUo4R9SMqBNDYmXW_48FVK9XFWi5TliyIFGa-vnzxW6MvLtV-iRtFYsNZpMydkCRJs3Giw42PFvAZN-OpiEKdL2q1hKgg

Kwota transakcji znajduje się poniżej limitu.

Możliwe wartości pola limitType:

Wartość Opis
CURRENCY Podana kwota transakcji znajduje się poniżej zdefiniowanej wartości dla danej waluty.
COMMISSION Dla wybranej metody płatności opłaty przewyższają kwotę transakcji.

transaction-above-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": "transaction-above-limit",
    "title": "Transaction above limit",
    "status": 409,
    "detail": "The 250000.00 EUR transaction exceeded the 200000.00 EUR limit",
    "limitType": "PAYMENT_METHOD",
    "money": {
        "value": 250000.00,
        "currency": "EUR"
    },
    "limit": {
        "value": 200000.00,
        "currency": "EUR"
    }
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoidHJhbnNhY3Rpb24tYWJvdmUtbGltaXQiLCJ0aXRsZSI6IlRyYW5zYWN0aW9uIGFib3ZlIGxpbWl0Iiwic3RhdHVzIjo0MDksImRldGFpbCI6IlRoZSAyNTAwMDAuMDAgRVVSIHRyYW5zYWN0aW9uIGV4Y2VlZGVkIHRoZSAyMDAwMDAuMDAgRVVSIGxpbWl0IiwibGltaXRUeXBlIjoiUEFZTUVOVF9NRVRIT0QiLCJtb25leSI6eyJ2YWx1ZSI6MjUwMDAwLjAsImN1cnJlbmN5IjoiRVVSIn0sImxpbWl0Ijp7InZhbHVlIjoyMDAwMDAuMCwiY3VycmVuY3kiOiJFVVIifX0.dhQxLLsPdU2OLLaeC46wpk2FzG3pcSj1_WOLWqQxrvQqzSYv85k0Vu4u2KVxxuO6cnnDT-J73w1Z9yeocDV2Ic90RvKVlQDG9GGn0cfpoC4LrqWB8OfDXDbFxNyfEWnIx7T_7-qWrS_kF9ZdxkTPHenzU2rFK-L_Gf_ez973BWCPd2ewGtnTgpFldziwGWce54N1so-f6crsR4nY_4z0SztK-Blu9L6sBWLSlNw0HXc_Fu8pCW_ADAadAysuxvRlR2w7c2NdxeLz9qOB2E2T_pB1piEchHs456_q2oKR-lzYEUoBBgNt0Lk4giWSA8tAvBK44BoT3Jn2OOQBy5tELw

Kwota transakcji znajduje się powyżej limitu.

Możliwe wartości pola limitType:

Wartość Opis
PAYMENT_METHOD Limit dotyczy wybranej metody płatności.
POINT_OF_SALE Limit dotyczy punktu płatności.

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-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.

currency-unavailable

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": "currency-unavailable",
    "title": "Currency is unavailable",
    "status": 409,
    "detail": "Currency HRK is unavailable"
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJ0eXBlIjoiY3VycmVuY3ktdW5hdmFpbGFibGUiLCJ0aXRsZSI6IkN1cnJlbmN5IGlzIHVuYXZhaWxhYmxlIiwic3RhdHVzIjo0MDksImRldGFpbCI6IkN1cnJlbmN5IEhSSyBpcyB1bmF2YWlsYWJsZSJ9.VmM7LCkFQYuLESlnrL1MHkPxkR3ogCKJQmjfVTlnMiv2mbISaAD7qeFeHW3iCxSbmRpMqt-EzAIUuTKWSmEVovI-h7ORv1DD1OWCQEUpIkhcXXkyjZwuZC2o759vpJbHQDhBHkHvWrnVbXR7U86UAmMkxg337gU1rhP9IGhe3DhAhGD4HEe3o9idL9X9qw7yAtP3YpzJ05NNMmkQ8mOmIhXXqEttFiPyeGtagd6rCDKxwq3T5yIIPUMyRBJePzPugbeXdbWySbbK_0bisUF7DeSC0j0m-_dKjBbnFTWrfiGPjDJKVRpqzqi9_ZrYnlIaghNhhNKBjhw6k2SfHuCiSg

Wybrana waluta jest niedostępna.

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 obsługiwanym przez Integratora, koszyk z listą produktów do zakupu.

Scenariusz

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

Po przyjęciu do przetwarzania zaakceptowanej płatności (Krok 9.) realizowany jest asynchroniczny proces przetwarzania płatności:

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

Proces płatności - EPS

Poniżej przedstawiony został proces płatności dla wybranej metody płatności EPS, gdzie pominięty został interfejs płatniczy Cinkciarz Pay. Funkcjonalność prezentacji listy banków oraz wyboru banku przez użytkownika musi być zaimplementowana po stronie serwera Merchanta. Przedstawiony scenariusz zawiera tylko pozytywny przypadek, który ma na celu przedstawić logikę działania całego procesu.

alt text

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": "iQn7M-Eyzw5sde5GwaOu51Xzl8WFXJzNW3pmCBENhhk"
}

JWS Payload

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

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
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJleHRlcm5hbFBheW1lbnRJZCI6IjM0MkhISDg4TEtESjg5ODc2NzY3IiwicG9pbnRPZlNhbGVJZCI6IlBPUzQ1ODk2MzIxNTk2NTQ3ODU5IiwiY2F0ZWdvcnkiOiJFX0NPTU1FUkNFIiwidG90YWxBbW91bnQiOnsiY3VycmVuY3kiOiJVU0QiLCJ2YWx1ZSI6MTkuOTl9LCJtZXJjaGFudCI6eyJuYW1lIjoiU2hvcCBuYW1lIn0sImRlc2NyaXB0aW9uIjoiUGF5bWVudCBkZXNjcmlwdGlvbi4ifQ.DSY8GuqO7aphexEekzNN7kncNuSzyE-PD_DlISq4W-YWvlJ3CfevmYWsj8Jrh-zWSypYaA9ezmoAyiXpZ8heQb3ON_7BLXqcsQguS29_07BeRTk_KlONs2LgbBebNbIDKTN18G8yk8eRDLJ_9zh3HcLc1THa-NcKXSf4FJLO7ML48P3HKY-8klUtOAGnibJq_vXq22ZlTwesl7i-ZEOegksymZcVLRaGsmAmU5Etuk-lu-mbyefZILJpRf64lVnFvyvBGPX3iIHcEp32jhHX3FazZTYHEsJe04wIOLzH8Uw0j-4j8RC_gHMpLFWIi3W6iPIYcSAdls8dq3PQfT-MjA

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:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJpUW43TS1FeXp3NXNkZTVHd2FPdTUxWHpsOFdGWEp6TlczcG1DQkVOaGhrIn0.eyAgImV4dGVybmFsUGF5bWVudElkIjogIjM0MkhISDg4TEtESjg5ODc2NzY3IiwgICJwb2ludE9mU2FsZUlkIjogIlBPUzQ1ODk2MzIxNTk2NTQ3ODU5IiwgICJjYXRlZ29yeSI6ICJFX0NPTU1FUkNFIiwgICJ0b3RhbEFtb3VudCI6IHsgICAgImN1cnJlbmN5IjogIlVTRCIsICAgICJ2YWx1ZSI6ICIxOS45OSIgIH0sICAibWVyY2hhbnQiOiB7ICAgICJuYW1lIjogIlNob3AgbmFtZSIgIH0sICAiZGVzY3JpcHRpb24iOiAiUGF5bWVudCBkZXNjcmlwdGlvbi4ifQ.CrO1KVHEoaa6kfhtOMNuTJU-GaseYMLVZBAvD1JPOZ6Mmi_CD9TakNq3LTbac49c5KMS7hwmZnW-RKiVIdOKEVslziLrJIU1Aigben547xyU0OxILIf01_eqrk3VPPf3tfgG6GmwkeKQbWS-TnVIeurzEFHERv7lDw9W2a4DxbBZg1UkOQd59Ri9zRkDeANZCV1rYD1aVHIY-1LGHAyQP9BVVaho1VTilCZTOucJ3nSDT1eP9zqhXWY5WQKFimRJn6vdghE7PIS_GMIgtTyPBNMx1fVSN633koFktYApGl-Ioe3AQojMQol4Q3hpTU4zrVV7SS8na5reOYdUS3NKIw

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-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnIo4OMp7I5ugVgGQquUL
FFdC0m1sL+1e7M1zX8lobKPJpQwApDKaEFTBWjrK5aXvzAsxqKzKzG3yUCSGqa/f
huzdzs3kBlvIFCPwk5dM5uc5v2+2W0SF0/8lF3NBUjK2jz8s3Nyb3cCWCfysRF+1
KhF/4ushqX4spCraIU2GkavZ6ETn/Oyfu1fJnZSuH16fwj2OwGsFnTUHam5yrihn
htxIkp4eUbhBOkjMMwb4XLygD1dlcg61Pbe60dmuwV+ZWQzfoi4QzlZd9kpePEva
bPar+AUItKilx5XvNm86PLGBbcsGIMhtew019UP0MrgF1S2/99ZsF2V76haipaXS
kQIDAQAB
-----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:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJwYXltZW50SWQiOiJQQVk3MTUwMzc0MjIxODI1ODciLCJhcHByb3ZlVXJsIjoiaHR0cHM6Ly88Q0lOS0NJQVJaX0FQUFJPVkFMX0hPU1Q-L2FwcHJvdmUiLCJ0b2tlbiI6ImRHQmNFTVFveWZmNk9DUVk1bDFyZWhYQXdnQ0RuRXdodHA1NzNQMUVKeXN3R0JKNzlHIn0.CRTGAMRkd2kHey33ID65n0hrv_0L1NSv628HtKw7dMp8W5Lou1OsJyUkDYa3VfeHUf0V6j2YLJmOt8bU09I_8zpwQH1-5-JIFnmLkByqp_a0RDKnmslFwD9K4p__OE9QqpLta-u7u5h8v5zK0esQ0w2-9wcKzVfwUrhl8ZiTNxP3BZL5ZDAUoECK9MWmT_aYchc2RuuNcdXiGEh-t-ELM_MwxlRYI-ab1froAEFHkaxxZTbzAmJsbPcWBtTR-whWOLKVZV5eLTIV1Z-8-ZD7q-pCHqalbkN5H8czrBuXySb92pDf58iRUsm4lgXY17PmO51fwhlfQ-UtKpQBDWmtFQ

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",
  "token": "dGBcEMQoyff6OCQY5l1rehXAwgCDnEwhtp573P1EJyswGBJ79G"
}

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"

Bezpieczeństwo klucza prywatnego

Klucz prywatny należy przechowywać w bezpiecznej lokalizacji takiej jak moduł HSM (Hardware Security Module). Jeśli nie jest dostępna sprzętowa metoda ochrony, należy użyć bezpiecznego magazynu kluczy prywatnych systemu operacyjnego. Bezpieczne przechowywanie klucza prywatnego zmniejszy prawdopodobieństwo jego kompromitacji.

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",
  "status": "INACTIVE"
}

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 należy dostarczyć w formacie PEM wywołując zasób POST /public_keys.

Zasób

POST <CINKCIARZ_PAY_HOST>/public_keys

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.
status String TAK Status klucza publicznego Partnera.

Pole status może przyjmować wartości:

Wartość Opis
ACTIVATED Klucz publiczny jest aktywny.
INACTIVE Klucz publiczny wymaga aktywacji.
REVOKED Klucz publiczny został odwołany.

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>/v2/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ź:

{
 "data": [
   {
     "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-----",
     "status": "ACTIVE"
   }
 ],
 "pagination": {
     "first": true,
     "last": true,
     "currentPageNumber": 1,
     "currentPageElementsCount": 2,
     "pageSize": 10,
     "totalPages": 1,
     "totalElements": 2,
     "pageLimitExceeded": false
   }
}
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJraWQiOiJ6QzRqNEFjaGR6d0tYU19NcXNoNEFmd1Z5U3VHc0ZnZ09fMnh2NXR1c3prIn0.eyJkYXRhIjpbeyJraWQiOiJjaGkwOU42Qm9nXzBJdnRyYWhEaFpSR0Y3a2lIVEFoUWFJbTR4X3dkcFFVIiwicGVtIjoiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBb1BZdzI4anJONzFWb1dIZlNrVFJcbmI0djhPZFlNandaUnMyZGc1dlBaanYweHJ5TkFxSHBIWVA1K1NDcEV6NllSRkd6dUNXaHFrTmdTS21aZ0xCeHZcbkJWSnQ4WXFaT3RibkI0YXMvNFRJMGR5NzNZVW13MDBMWVhMVGNyUzZhbDZPRnRDNFNlaFVSRWdvVkc5VjhIbGZcbng5VDBibk5PVzVSMHozTHZrQytZOGUxR20reHRYK0s1dVgwMG1kNVRJMWprNUdxb0U5RDdjdXY1bUJYNTBJZ2lcbnpNcWJaWXR0dS9nZEEzVFdENkpuY2VNVTJXUEtKRExvd0dONFJuVXRRSlFpQXBmUlFaRFBibEIrOUFLSmtpVHlcbjhONGc5aEFWbUtid0MzY2VoTzF2TUI3dWpPbEpyTkFYamgxck83QjNPSlEwSlhjcGIyVWhyUFovREl1UmRMdlhcbjZRSURBUUFCXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0iLCJzdGF0dXMiOiJBQ1RJVkUifV0sInBhZ2luYXRpb24iOnsiZmlyc3QiOnRydWUsImxhc3QiOnRydWUsImN1cnJlbnRQYWdlTnVtYmVyIjoxLCJjdXJyZW50UGFnZUVsZW1lbnRzQ291bnQiOjIsInBhZ2VTaXplIjoxMCwidG90YWxQYWdlcyI6MSwidG90YWxFbGVtZW50cyI6MiwicGFnZUxpbWl0RXhjZWVkZWQiOmZhbHNlfX0.AVbO7pKOwd_wDBTuC9TriU4wafUxuXJ1G35REfhbgzSH0HvoIeymGsb5ItdUmFXzLnQqV5OsptawinIErNzx4DW-RUsheijJztenHHxOPlsE3m1LMfzJqg78qVYnzZatWRlNT86u0O-DIvfcdWcL0MGQDpTxs2V8IJCJWIZqEDm-V3WpUcjgMuqhj_jl-GL1TRhnLZjZkW8YwfvLNBXfpcvfyI58Q4mnhaMsmw6ikgjI3ocIhuGW-uXvA2E-gJxmaoN-O3BqG1u2XWKtWOA_sRf6-0P8PTI2JA-AToUjdK9yd-lcufIkyJvFUYf3XmzgV8uoCH11tCM3gd-Vp-_kfg

Dodane klucze publiczne można pobrać wywołując zasób GET /v2/public_keys.

Zasób

GET <CINKCIARZ_PAY_HOST>/v2/public_keys

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
pageNumber Number NIE Numer strony.
inStatuses String NIE Lista statusów, w których ma zawierać się status kluczy publicznych.
notInStatuses String NIE Lista statusów, w których nie ma zawierać się status kluczy publicznych.

Odpowiedź

Obiekt data zawierający listę dodanych kluczy publicznych

Nazwa pola Typ Wymagalność Opis
data Array TAK Lista obiektów typu PublicKey.
pagination Pagination TAK Metadane zwróconej strony.

Obiekt PublicKey zawierający informację o kluczu publicznym

Nazwa pola Typ Wymagalność Opis
kid String TAK Identyfikator klucza publicznego.
pem String TAK Klucz publiczny.
status String TAK Status klucza publicznego.

Pole status może przyjmować wartości:

Wartość Opis
ACTIVATED Klucz publiczny jest aktywny.
INACTIVE Klucz publiczny wymaga aktywacji.
REVOKED Klucz publiczny został odwołany.

Obiekt Pagination zawierający metadane zwróconej strony z kluczami publicznymi

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 /v2/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

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
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
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 5 sekund
2 - 11 10 sekund
12 - 20 600 sekund
21 - 110 1800 sekund
> 110 Kolejne próby nie będą podejmowane