Dokumentacja techniczna integracji z systemem transakcyjnym imoje

tech support imojeapi
Help

Apiary Powered Documentation

Sign in with Apiary account.

Dokumentacja techniczna integracji z systemem transakcyjnym imoje

Introduction

Instrukcja integracji metodą RESTful API z bramką płatności imoje

Dokumentacja w języku angielskim

Zobacz również naszą dokumentację dla integracji FRONT API (paywall)

Wymagane dane do integracji

  • Identyfikator klienta - merchantId

  • Identyfikator sklepu - serviceId

  • Klucz sklepu - serviceKey

  • Token autoryzacyjny

Gdzie znaleźć dane do integracji

Po zalogowaniu się do panelu administracyjnego imoje należy przejść do zakładki Sklepy, wybrać odpowiedni sklep i przejść do jego Szczegółów. Następnie do zakładki Dane do integracji. W tym miejscu znajduje się: identyfikator klienta, identyfikator sklepu oraz klucz sklepu.

Token autoryzacyjny znajdziesz, klikając w prawym górnym rogu panelu w swoje imię i nazwisko. Następnie należy przejść do zakładki Klucze API, wybrać istniejący klucz (default) i wejść w jego Szczegóły, gdzie należy skopiować istniejący token.

Panel administracyjny dla środowiska testowego sandbox

Zarys techniczny

Komunikacja odbywa się poprzez wymianę informacji zapisanych w formacie JSON. Każde zapytanie powinno zawierać odpowiednią metodę autoryzacji.

Statusy transakcji

Transakcje mogą przyjmować następujące statusy:

Status Opis
new Nowa, nieobsłużona transakcja
pending Oczekiwanie na status
rejected Transakcja odrzucona
settled Transakcja zrealizowana
error Błąd w transakcji
cancelled Transakcja anulowana

Metody autoryzacji

Integracja pozwala na autoryzację za pomocą tokenu autoryzacyjnego. Token można znaleźć w panelu administracyjnym imoje, w części Ustawienia a następnie w zakładce Klucze API.

Token autoryzacyjny

Aby dokonać autoryzacji zapytania należy w nagłówkach żądania do serwera umieścić dane autoryzacyjne:

Accept: application/json
Content-Type: application/json
Authorization: Bearer {token}

Kody odpowiedzi HTTP

Kod HTTP Znaczenie
200 Zapytanie wykonane poprawnie. Utworzono transakcję
400 Błędne żądanie, niepoprawny payload żądania
401 Nieautoryzowany dostęp. Żądanie zasobu, który wymaga uwierzytelnienia
403 Brak uprawnień do wykonania żądania
404 Nieznany zasób
422 Payload jest poprawny ale nie zawiera wymaganaych parametrów
500 Błąd serwera
503 System niedostępny

Przykładowe powody błędów podczas próby wykonania zapytania znajdują się tutaj

Metody RESTful API

Produkcyjny URL: https://api.imoje.pl/v1/merchant

Sandbox URL: https://sandbox.api.imoje.pl/v1/merchant

Każdy poprawny adres składa się z trzech części:

  • adresu bazowego zapytania (https://api.imoje.pl/v1)

  • identyfikatora klienta (/merchant/{identyfikator klienta})

  • funkcji jednoznacznie określającej zakres danych, których dotyczy zapytanie ( np. /transaction lub /services)

Każde zapytanie do serwera powinno zawierać dane autoryzacyjne w nagłówkach (Token autoryzacyjny).

Endpoint Zastosowanie Metody
/{merchantId}/transaction Tworzy nową transakcję POST
/{merchantId}/transaction/{transactionId} Pobiera dane transakcji GET
/{merchantId}/services Zwraca informacje o sklepach akceptanta GET
/{merchantId}/service/{serviceId} Zwraca informacje o sklepie akceptanta o określonym serviceId oraz możliwych metodach płatności. GET
/{merchantId}/settings/ips Pobiera zaufane adresy IP GET
/{merchantId}/settings/ips Ustawia zaufane adresy IP PUT
/{merchantId}/payment Tworzy nowy link płatności POST
/{merchantId}/payment/{paymentId} Pobiera dane płatności GET
/{merchantId}/transaction/profile Obciąża istniejący profil kartowy POST
/{merchantId}/profile/cid/{cid} Pobiera profile o podanym cid GET
/{merchantId}/profile/id/{paymentProfileId} Pobiera profil o podanym id GET
/{merchantId}/profile/deactivate Dezaktywuje profil o podanym w żądaniu identyfikatorze POST
/{merchantId}/profile/id/{paymentProfileId} Dezaktywuje profil o podanym paymentProfileId DELETE
/{merchantId}/payment/cancel Anuluje link płatności POST

gdzie:

  • merchantId - identyfikator klienta

  • serviceId - identyfikator sklepu z którym związane są określone metody realizacji transakcji (UUID v4)

  • cid - identyfikator klienta/płatnika nadany przez akceptanta

  • transactionId - unikalny identyfikator transakcji (UUID v4)

  • paymentProfileId - identyfikator profilu kartowego

  • paymentId - unikalny identyfikator linku płatności (UUID v4)

Tworzenie nowej transakcji przez API

Zapytanie umożliwia utworzenie transakcji dla wybranego kanału w ramach danej metody płatności z bezpośrednim przekierowaniem lub w przypadku niektórych metod (karty płatnicze, BLIK z przekazanym kodem) - z natychmiastową realizacją po autoryzacji płatności przez płatnika.

Zgodnie z wymaganiami PCI DSS (ustawionymi przez organizacje płatnicze) zabronione jest przetwarzanie, przekazywanie czy przechowywanie numerów i innych danych dotyczących kart płatniczych czy kredytowych.

Jeśli posiadasz właściwy certyfikat PCI DSS i chcesz udostępnić formatkę płatności kartami na stronie Twojego sklepu - prosimy o przesłanie go do wsparcia technicznego na adres kontakt.tech@imoje.pl

W celu utworzenia nowego zamówienia należy za pomocą metody POST przesłać komunikat na endpoint API:

  • produkcja: https://api.imoje.pl/v1/merchant/{merchantId}/transaction

  • sandbox: https://sandbox.api.imoje.pl/v1/merchant/{merchantId}/transaction

gdzie:

  • merchantId - identyfikator klienta

Zobacz przykład prawidłowego utworzenia nowej transakcji

Chcesz uzyskać logo wybranej metody płatności? Skorzystaj z tego zapytania lub skontaktuj się z nami.

Masz pytanie? Zobacz nasze FAQ

Przykład zapytania HTTP

Adres zapytania:

https://api.imoje.pl/v1/merchant/6yt3gjtm9p7b8h9xsdqz/transaction

Nagłówki zapytania

Accept: application/json
Authorization: Bearer ad8y3hdoashco8fh49fhiahfb237f8hoihsd0f2hfikljf023h8
Content-Length: 895
Content-Type: application/json

Body zapytania

{
  "type": "sale",
  "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
  "amount": 100,
  "currency": "PLN",
  "title": "",
  "orderId": "123123123",
  "paymentMethod": "pbl",
  "paymentMethodCode": "ipko",
  "successReturnUrl": "https://domain.com/success",
  "failureReturnUrl": "https://domain.com/failure",
  "customer": {
    "firstName": "Jan",
    "lastName": "Kowalski",
    "cid": "123",
    "company": "",
    "phone": "",
    "email": "jan.kowalski@example.com"
  },
  "billing": {
    "firstName": "Jan",
    "lastName": "Kowalski",
    "company": "Company",
    "street": "Street",
    "city": "City",
    "region": "Region",
    "postalCode": "",
    "countryCodeAlpha2": "PL"
  },
  "shipping": {
    "firstName": "Jan",
    "lastName": "Kowalski",
    "company": "Company",
    "street": "Street",
    "city": "City",
    "region": "Region",
    "postalCode": "",
    "countryCodeAlpha2": "PL"
  }
}

Parametry zapytania

Parametr Typ Parametr wymagany Opis
type string TAK Typ transakcji,
dopuszczalne wartości: sale
serviceId string(36) TAK identyfikator sklepu jako UUID v4
amount integer TAK Kwota transakcji w najmniejszej jednostce waluty np. grosze
currency string(3) TAK Waluta transakcji w standardzie ISO 4217
orderId string(100) TAK Numer zamówienia akceptanta,
dopuszczalne znaki: A-Za-z0-9#_-./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
paymentMethod string TAK Metoda realizacji zamówienia.
Zobacz dopuszczalne wartości
paymentMethodCode string TAK Oznaczenie kanału płatności.
Zobacz dopuszczalne wartości
successReturnUrl string(300) TAK Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku dokonania płatności z powodzeniem
failureReturnUrl string(300) TAK Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku wystąpienia błędu płatności
customer object TAK Dane klienta - zobacz tabelę poniżej
title string(255) NIE Tytuł zamówienia,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
additionalDescription string(255) NIE Szczegóły zamówionych produktów lub usług
billing object NIE Dane płatnika - zobacz tabelę poniżej
shipping object NIE Dane dostawy - zobacz tabelę poniżej
card object NIE Dane do płatności kartą (wymagane podczas płatności card) - zobacz tabelę poniżej
additionalData object NIE Informacje o przeglądarce płatnika, wymagane podczas wykonywania płatności kartą z autoryzacją 3ds
visibleMethod array NIE Metody płatności widoczne na bramce płatności po zmianie metody/kanału przez płatnika. Jeśli tego pola nie ma lub jest puste to są wyświetlane wszystkie włączone w sklepie klienta metody płatności. Istnieje wiele konfiguracji wyświetlania metod płatności. Należy je zawsze rozdzielać przecinkiem
Dostępne wartości: pbl, card, wallet, blik, imoje_paylater, wt, lease, imoje_installments
validTo integer, null NIE Data ważności transakcji jako timestamp w sekundach. Brak realizacji płatności do tego czasu spowoduje jej anulowanie. Jeżeli nie jest przekazane to transakcja ważna jest do czasu ustawionego w parametrze Aktywność płatności na Panelu Merchanta (ustawienia sklepu). Przekazanie parametru validTo= NULL powoduje brak wygaśnięcia transakcji z pominięciem ustawień w parametrze Aktywność płatności na Panelu Merchanta (ustawienia sklepu). Minimalny czas ważności linku to 60 sekund.
multipayout array NIE Wymagana aktywna funkcja multiwypłat. Zawiera informacje na temat numerów rachunków, na jakie mają zostać wypłacone środki z transakcji. Szczegółowy opis znajduje się w punkcie Multiwypłaty
invoice object NIE Dane do faktury wymagane przy aktywnej usłudze ING Księgowość. Szczegółowy opis znajduje się w punkcie ING Księgowość
notificationUrl string(300) NIE Dynamiczny adres notyfikacji, możliwość ustawienia konkretnego adresu dla pojedynczej transakcji.
Adresy zawierające localhost oraz porty zostaną odrzucone.
profileType string NIE Rodzaj transakcji kartowej OneClick i recurring. Wymagany przy płatnościach OneClick i recurring bez profilu kartowego.
Dopuszczalne wartości: FIRST w przypadku transakcji rejestrującej, STANDARD w przypadku obciążenia karty

W przypadku, gdy transakcja pozostanie w statusie W trakcie realizacji, płatnik powróci na adres powrotu failureReturnUrl.

Jeżeli w zapytaniu wystąpi parametr customer, billing, shipping lub card konieczne jest dostarczenie parametrów:


Parametry dla obiektu customer

Parametr Typ Parametr wymagany Opis
firstName string(100) TAK Imię klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
lastName string(100) TAK Nazwisko klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
email string(200) TAK Adres e-mail w formacie zgodnym ze standardem RFC 5322 oraz RFC 6531
cid string(36) NIE Identyfikator klienta. (Wymagane podczas płatności oneclick, recurring),
dopuszczalne znaki: A-Za-z0-9 oraz myślnik (0x2D)
company string(200) NIE Nazwa firmy,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
phone string(20) NIE Numer telefonu,
dopuszczalne znaki: 0-9+- oraz znak spacji (0x20)
locale string(2) NIE Lokalizacja płatnika, określa język komunikacji Bramki Płatniczej do Płatnika - Paywall, Maile oraz Statusy.
Dopuszczalne wartości: pl, en, cs, de, es, fr, it, lt, ru, sk, sl, uk, nl, hu, ro, bg, sv

Parametry dla obiektu billing

Parametr Typ Parametr wymagany Opis
firstName string(100) TAK Imię klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
lastName string(100) TAK Nazwisko klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
company string(200) NIE Nazwa firmy,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
street string(200) NIE Ulica,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
city string(100) NIE Miasto,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
region string(100) NIE Region,
Dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
postalCode string(30) NIE Kod pocztowy
countryCodeAlpha2 string(20) NIE Kod kraju Alpha2
taxId string(12) NIE Numer identyfikacji podatkowej

Parametry dla obiektu shipping

Parametr Typ Parametr wymagany Opis
firstName string(100) TAK Imię klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
lastName string(100) TAK Nazwisko klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
company string(200) NIE Nazwa firmy,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
street string(200) NIE Ulica,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
city string(100) NIE Miasto,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
region string(100) NIE Region,
dopuszczalne znaki: A-Za-z0-9 oraz znak spacji (0x20)
postalCode string(30) NIE Kod pocztowy
countryCodeAlpha2 string(2) NIE Kod kraju Alpha2

Parametry dla obiektu card

Parametr Typ Parametr wymagany Opis
firstName string(100) TAK Imię właściciela karty,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
lastName string(100) TAK Nazwisko właściciela karty,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
number string(16) TAK Numer karty
month string(2) TAK Ważność karty - miesiąc
year string(4) TAK Ważność karty - rok
cvv string(4) TAK Kod cvv karty
firstTransactionId string NIE Identyfikator transakcji rejestrującej. Wymagany przy obciążaniu karty w płatnościach OneClick i rekurencyjnej bez profilu

Parametry dla obiektu additionalData

Parametr Typ Parametr wymagany Opis
browser object Tak Informacje na temat przeglądarki płatnika
browser.ip string Tak Adres IP. Dopuszczalne wartości: ipv4, ipv6
browser.language string Tak Język przeglądarki określony w formacie UNICODE np. pl-PL
browser.jsEnabled boolean Tak Określa, czy w przeglądarce włączona jest obsługa JavaScript
browser.timezoneOffset integer Tak Informacja o strefie czasowej. Dla strefy Europe/Warsaw (+0200) timezoneOffset ma mieć wartość 120, a dla strefy Austalia/Melbourne (+1000) ma mieć wartość 600
browser.userAgent string Tak Informacja o używanej aplikacji klienckiej
browser.accept string Tak Akceptowane wartości przez aplikację
browser.javaEnabled boolean Tak Określa, czy w przeglądarce włączona jest obsługa Java
browser.screenColorDepth integer Tak Głębia wyświetlanych kolorów
browser.screenHeight integer Tak Wysokość okna przeglądarki
browser.screenWidth integer Tak Szerokość okna przeglądarki

W przypadku aktywnych mutliwypłat do zapytania należy dodać obiekt multipayout zgodnie z punktem Multiwypłaty

Metody i kanały realizacji transakcji

Transakcje można realizować następującymi metodami:

Nazwa Wartość parametru paymentMethod Wartość parametru paymentMethodCode
Przelewy online pbl Tabela poniżej
Płatność kartą card Tabela poniżej
Portfele elektroniczne wallet Tabela poniżej
Płatność BLIK blik blik
Płać z ING ing ing
imoje płacę później imoje_paylater imoje_twisto, paypo, pragma_go lub blik_paylater
Przelew tradycyjny wt wt, wt_split
imoje raty imoje_installments Tabela poniżej

Dla usługi "Płać z ING" parametr paymentMethod jest inny niż dla standardowego przelewu Pay By Link i zawiera wartość ing.

PragmaGo jest tylko dla klientów biznesowych. Po przekierowaniu należy podać dane firmy, aby zapłacić. Limity transakcji dla PragmaGo to od 500 zł do 100 tys. PLN

Przelew online Pay By Link

Przelewy Pay By Link można realizować za pomocą następujących usług banków:

Wartość parametru Nazwa usługi Waluta
mtransfer mTransfer - mBank PLN
bzwbk Przelew24 - Santander Bank Polska PLN
pekao24 Pekao24Przelew - Bank Pekao PLN
inteligo Płacę z Inteligo PLN
ipko Płać z iPKO PLN
getin Płacę z VeloBank PLN
noble Płacę z VeloBank PLN
creditagricole Credit Agricole e-przelew PLN
alior Płacę z Alior Bankiem PLN
millennium Millennium - płatności internetowe PLN
citi Przelew z Citi Handlowego PLN
bos Płać z BOŚ PLN
bnpparibas Płacę z BNP Paribas PLN
pocztowy Pocztowy24 PLN
plusbank Płacę z Plus Bank PLN
bs Bank Spółdzielczy PLN
bspb Bank Spółdzielczy w Brodnicy PLN
nest nestPrzelew PLN
pbs Bank Nowy BFG PLN
cs Česká spořitelna CZK
mp mBank CZK
kb Komerční banka CZK
rf Raiffeisenbank CZK
pg Moneta Money Bank CZK
pf Fio banka CZK
cb ČSOB CZK
uc UniCredit CZK
posta Poštová banka, a. s. EUR
sporo sporiteľňa EUR
tatra Tatra banka, a. s. EUR
viamo Viamo EUR
vub Všeobecná úverová banka, a. s. EUR

Płatność kartą

Płatność kartą można realizować za pomocą następujących usług:

Wartość parametru Nazwa usługi
ecom3ds Płatność kartą 3DS
oneclick Płatność za pomocą usługi oneclick
recurring Płatność za pomocą usługi recurring

Płatności kartą są dostępne w kilku walutach: PLN, EUR, USD, SEK, RON, HUF, GBP, CZK, CHF, BGN.

Portfele elektroniczne

Płatność portfelem elektronicznym można realizować za pomocą następujących usług:

Wartość parametru Nazwa usługi
gpay Płatność za pomocą GooglePay
applepay Płatność za pomocą ApplePay
visa_mobile Płatność za pomocą Visa Mobile
paypal Płatność za pomocą PayPal

Płatności gpay, applepay oraz paypal są dostępne w kilku walutach: PLN, EUR, USD, SEK, RON, HUF, GBP, CZK, CHF, BGN.

Płatności visamobile są dostępne tylko w walucie PLN.

Ważne! Dla poprawnego działania płatności PayPal nie należy usuwać adresów URL w webhookach. W przypadku zmian kluczy integracyjnych w PayPal, należy je również zaktualizować w panelu administracyjnym imoje.

imoje raty

Płatność imoje raty można realizować za pomocą następujących usług:

Wartość parametru Nazwa usługi
inbank Do 60 rat, RRSO zmienne, zależne od ilości rat
inbank_0 Do 10 rat, RRSO 0%

Ważne! Pozostałe metody płatności dostępne są tylko w walucie PLN.

Dane przeglądarki

W przypadku generowania płatności kartą, która wymaga autoryzacji metodą 3D Secure, należy pobrać i przekazać informacje na temat przeglądarki płatnika w dodatkowym obiekcie additionalData.

Struktura wygląda w następujący sposób:

Parametr Typ Parametr wymagany Opis
browser object Tak Informacje na temat przeglądarki płatnika
browser.ip string Tak Adres IP. Dopuszczalne wartości: ipv4, ipv6
browser.language string Tak Język przeglądarki określony w formacie UNICODE np. pl-PL
browser.jsEnabled boolean Tak Określa, czy w przeglądarce włączona jest obsługa JavaScript
browser.timezoneOffset integer Tak Informacja o strefie czasowej. Dla strefy Europe/Warsaw (+0200) timezoneOffset ma mieć wartość 120, a dla strefy Austalia/Melbourne (+1000) ma mieć wartość 600
browser.userAgent string Tak Informacja o używanej aplikacji klienckiej
browser.accept string Tak Akceptowane wartości przez aplikację
browser.javaEnabled boolean Tak Określa, czy w przeglądarce włączona jest obsługa Java
browser.screenColorDepth integer Tak Głębia wyświetlanych kolorów
browser.screenHeight integer Tak Wysokość okna przeglądarki
browser.screenWidth integer Tak Szerokość okna przeglądarki

Przykład przekazywanego obiektu

"additionalData": {
    "browser": {
        "ip": "127.0.0.1",
        "language": "pl-PL",
        "jsEnabled": true,
        "timezoneOffset": 100,
        "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36",
        "accept": "application/json, text/javascript, */*; q=0.01",
        "javaEnabled": false,
        "screenColorDepth": 24,
        "screenHeight": 1080,
        "screenWidth": 2560
        }
    }

Odpowiedź HTTP

W przypadku wykonania poprawnego zapytania rejestrującego nowe zamówienie serwer odpowie statusem HTTP 200 oraz informacją o nowo utworzonej transakcji:

{
    "transaction": {
        "id": "f115d23d-a943-4585-a3d7-09f6c417200d",
        "type": "sale",
        "status": "new",
        "source": "api",
        "created": 1501188304,
        "modified": 1501188304,
        "notificationUrl": "https://notification_url",
        "serviceId": "63f574ed-d4ad-407e-9981-39ed7584a7b7",
        "amount": 100,
        "currency": "PLN",
        "title": "",
        "orderId": "123123123",
        "paymentMethod": "pbl",
        "paymentMethodCode": "ipko",
        "successReturnUrl": "https://domain.com/success",
        "failureReturnUrl": "https://domain.com/failure",
        "customer": {
            "firstName": "Jan",
            "lastName": "Kowalski",
            "cid": "123",
            "company": "",
            "phone": "",
            "email": "jan.kowalski@example.com"
        },
        "billing": {
            "firstName": "Jan",
            "lastName": "Kowalski",
            "company": "Company",
            "street": "Street",
            "city": "City",
            "region": "Region",
            "postalCode": "",
            "countryCodeAlpha2": "PL"
        },
        "shipping": {
            "firstName": "Jan",
            "lastName": "Kowalski",
            "company": "Company",
            "street": "Street",
            "city": "City",
            "region": "Region",
            "postalCode": "",
            "countryCodeAlpha2": "PL"
        }
    },
    "action": {
        "type": "redirect",
        "url": "https://www.ipko.pl/interpay",
        "method": "POST",
        "contentType": "",
        "contentBodyRaw": "Type=Ipay2&ControlData=031626162694b9f899ea9af2dddc68f1&Description=XX1765158138XX%7Cwww.imoje.pl%7Cimoje%20payment.pl&CustomParam=PL1765158138&Amount=100&Currency=PLN&MerchantID=139"
    }
}

W odpowiedzi otrzymujemy dwa obiekty: transaction oraz action

Obiekt transaction jest identyczny z wysłanym w zapytaniu rejestrującym zamówienie i zawiera kilka dodatkowych parametrów:

Parametr Typ Opis
id string Identyfikator transakcji w formacie UUID v4. Unikalny dla każdego zamówienia
status string Status zamówienia
source string Źródło zamówienia. Może posiadać wartości: api lub web.
created integer Data utworzenia zamówienia w formacie UNIX TIMESTAMP czasu UTC
notificationUrl string Adres notyfikacji
modified integer Data ostatniej zmiany statusu transakcji w formacji UNIX TIMESTAMP czasu UTC

Drugim dodatkowym obiektem jest action. Obiekt ten wystąpi tylko w przypadku konieczności przekierowania płatnika na zewnętrzną stronę jak to ma miejsce w przypadku płatności Pay-By-Link. Obiekt ten zawiera dodatkowe pola których znaczenie jest opisane poniżej:

Parametr Typ Opis
type string Typ akcji
url string W przypadku konieczności wykonania przekierowania płatnika na inną stronę (np. banku) adres URL
method string Metoda POST lub GET
contentType string Pozycja w nagłówku zapytania do banku określająca typ payloadu
contentBodyRaw string Payload zapytania

Odpowiedź dla przelewu tradycyjnego

W przypadku transakcji realizowanej przelewem tradycyjnym, w parametrze action.ban zostanie zwrócony numer rachunku bankowego, na który płatnik jest zobowiązany przelać kwotę transakcji. Natomiast w parametrze transaction.paidAmount zwracana jest dotychczasowo zaksięgowana kwota transakcji.

 ...
 "paidAmount": 0
    },
"action": {
            "type": "transfer",
            "ban": "87109024021825522612596739"
    }

Przekazanie kodu BLIK

Podczas tworzenia transakcji metodą płatności BLIK, istnieje możliwość finalizacji jej bez przekierowania płatnika na zewnętrzną stronę eblik.pl.

Do podstawowego zapytania tworzącego transakcję należy dodać następujące parametry:

Parametr Typ Parametr wymagany Opis
blikCode string(6) WYMAGANE Kod BLIK pobrany od płatnika
clientIp string(39) WYMAGANE Rzeczywisty adres IP płatnika podany w protokole IPv4 lub IPv6

Po wysłaniu odpowiedniego żądania, należy poinformować płatnika o oczekiwaniu na zmianę statusu po stronie sklepu, oraz o potrzebie zatwierdzenia kodu w aplikacji bankowej.

Do zrealizowanej transakcji zostanie wysłana notyfikacja pozwalająca zmienić status płatności po stronie sklepu.

Przykład zapytania

{
    "type": "sale",
    "serviceId": "463f6289-e2a6-4f20-b11b-1b7d5d461122",
    "amount": 100,
    "currency": "PLN",
    "orderId": "123456",
    "paymentMethod": "blik",
    "paymentMethodCode": "blik",
    "successReturnUrl": "https://domain.com/success",
    "failureReturnUrl": "https://domain.com/failure",
    "clientIp": "2001:db8::8a2e:370:7334",
    "blikCode": "414986",
    "customer":{
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@mail.pl"
    }
}

Tworzenie nowego linku płatności przez API

Zapytanie umożliwia utworzenie linku do bramki płatniczej imoje ze wszystkimi dostępnymi metodami płatności lub z tylko wybranymi.

W celu utworzenia nowego linku płatności należy za pomocą metody POST przesłać komunikat na endpoint API:

  • produkcja: https://api.imoje.pl/v1/merchant/{merchantId}/payment

  • sandbox: https://sandbox.api.imoje.pl/v1/merchant/{merchantId}/payment

gdzie:

  • merchantId - identyfikator klienta

Zobacz przykład prawidłowego utworzenia nowego linku płatności

Chcesz uzyskać logo wybranej metody płatności? Skorzystaj z tego zapytania lub skontaktuj się z nami.

Masz pytanie? Zobacz nasze FAQ

Przykład zapytania HTTP

Adres zapytania

https://api.imoje.pl/v1/merchant/6yt3gjtm9p7b8h9xsdqz/payment

Nagłówki zapytania

Accept: application/json
Authorization: Bearer sMkJhausOksa87Hbagt+8salsnsJjayPmznx
Content-Type: application/json  
Cache-Control: no-cache

Body zapytania

{
    "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
    "amount": 100,
    "currency": "PLN",
    "title": "",
    "orderId": "123123123",
    "returnUrl": "https://domain.com/return",  
    "successReturnUrl": "https://domain.com/success",
    "failureReturnUrl": "https://domain.com/failure",
    "customer": {
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@example.com",
        "phone": "501501501"
    }
}

Parametry zapytania

Parametr Typ Parametr wymagany Opis
serviceId string(36) TAK Identyfikator sklepu jako UUID v4
amount integer TAK Kwota transakcji w najmniejszej jednostce waluty np. grosze
currency string(3) TAK Waluta transakcji w standardzie ISO 4217
orderID string(100) TAK Numer zamówienia akceptanta,
dopuszczalne znaki: A-Za-z0-9#_-./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
customer object TAK Dane klienta
title string(255) NIE Tytuł zamówienia,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
additionalDescription string(255) NIE Szczegóły zamówionych produktów lub usług
visibleMethod array NIE Metody płatności widoczne na bramce płatności. Jeśli tego pola nie ma lub jest puste to są wyświetlane wszystkie włączone w sklepie klienta metody płatności. Istnieje wiele konfiguracji wyświetlania metod płatności. Należy je zawsze rozdzielać przecinkiem
Dostępne wartości: pbl, card, wallet, blik, imoje_paylater, wt, lease, imoje_installments
preselectMethodCode string(20) NIE Kanał płatności ustawiony jako domyślny i automatycznie wybrany po otwarciu bramki płatności. Jeśli tego pola nie ma to bramka otwiera się bez wybranego zaznaczonego kanału płatności. Pole nie może być zdefiniowane i pozostawione bez wartości.
Dostępne wartości: Metody i kanały realizacji transakcji
returnUrl string(300) NIE Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku nie rozstrzygnięcia statusu transakcji
successReturnUrl string(300) NIE Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku dokonania płatności z powodzeniem
failureReturnUrl string(300) NIE Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku wystąpienia błędu płatności
validTo integer, null NIE Data ważności linku jako timestamp w sekundach. Brak realizacji płatności do tego czasu spowoduje jej anulowanie. Jeżeli nie jest przekazane to link ważny jest do czasu ustawionego w parametrze Aktywność płatności na Panelu Merchanta (ustawienia sklepu). Przekazanie parametru validTo= NULL powoduje brak wygaśnięcia linku płatności z pominięciem ustawień w parametrze Aktywność płatności na Panelu Merchanta (ustawienia sklepu). Minimalny czas ważności linku to 60 sekund.
cart object NIE Informacje o zamówionych produktach. Wymagane przy aktywnej usludze ING Lease Now. Szczegółowy opis znajduje się w punkcie ING Lease Now
multipayout array NIE Wymagana aktywna funkcja multiwypłat. Zawiera informacje na temat numerów rachunków, na jakie mają zostać wypłacone środki z transakcji. Szczegółowy opis znajduje się w punkcie Multiwypłaty
invoice object NIE Dane do faktury wymagane przy aktywnej usłudze ING Księgowość. Szczegółowy opis znajduje się w punkcie ING Księgowość
notificationUrl string(300) NIE Dynamiczny adres notyfikacji, możliwość ustawienia konkretnego adresu dla pojedynczej transakcji.
Adresy zawierające localhost oraz porty zostaną odrzucone.

Parametry dla obiektu customer:

Parametr Typ Parametr wymagany Opis
firstName string(100) TAK Imię klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
lastName string(100) TAK Nazwisko klienta,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
email string(200) NIE Adres e-mail w formacie zgodnym ze standardem RFC 5322 oraz RFC 6531
phone string(20) NIE Numer telefonu,
dopuszczalne znaki: 0-9+- oraz znak spacji (0x20).
locale string(2) NIE Lokalizacja płatnika, określa język komunikacji Bramki Płatniczej do Płatnika - Paywall, Maile oraz Statusy.
Dopuszczalne wartości: pl, en, cs, de, es, fr, it, lt, ru, sk, sl, uk, nl, hu, ro, bg, sv

W przypadku aktywnych mutliwypłat do zapytania należy dodać obiekt multipayout zgodnie z punktem multiwypłaty

Wyświetlanie wybranych metod płatności w linku płatności

W imoje istnieje możliwość wyświetlenia tylko konkretnych metod płatności Płatnikowi. Do sandardowego zapytania tworzącego link płatności należy dodać tablicę visibleMethod z przynajmniej jedną z poniższych wartości:

Nazwa Wartość parametru Opis
Karty płatnicze card Płatność kartą: Visa, MasterCard
Portfele elektroniczne wallet Płatności portfelem elektronicznym: Apple Pay, Google Pay, Visa Mobile, PayPal
Przelew online pbl Płatność przelewem online
BLIK blik Płatność BLIK
Płatności odroczone imoje_paylater Płatności imoje płacę później: Twisto, PayPo, PragmaGO
Leaseing online lease Płatność ING Lease Now
Przelew tradycyjny wt Płatność przelewem tradycyjnym
imoje raty imoje_installments Płatność w ratach

Odpowiedź HTTP

W przypadku wykonania poprawnego zapytania rejestrującego nowy link płatności serwer odpowie statusem HTTP 200 oraz informacją o nowo utworzonym linku płatności:

{
    "payment": {
        "id": "f86b4c43-940f-4a66-90e0-ff85416c481b",
        "url": "https://paywall.imoje.pl/pay/f86b4c43-940f-4a66-90e0-ff85416c481b",
        "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
        "orderId": "123123123",
        "title": "123123123",
        "amount": 100,
        "currency": "PLN",
        "returnUrl": "https://domain.com/return",
        "failureReturnUrl": "https://domain.com/failure",
        "successReturnUrl": "https://domain.com/success",
        "customer": {
            "firstName": "Jan",
            "lastName": "Kowalski",
            "email": "jan.kowalski@example.com",
            "phone": "501501501"
        },
        "isActive": true,
        "validTo": null,
        "created": 1645182031,
        "modified": 1645182031
    }
}

W odpowiedzi otrzymujemy obiekt payment z informacjami które zostały przekazane w requeście i zawiera kilka dodatkowych parametrów:

Parametr Typ Opis
id string Identyfikator transakcji w formacie UUID v4. Unikalny dla każdego zamówienia
url string Adres URL linku płatności
validTo integer, null Data ważności linku jako timestamp w sekundach. Brak realizacji płatności do tego czasu spowoduje jej anulowanie. Jeżeli nie jest przekazane to link ważny jest do czasu ustawionego w parametrze Aktywność płatności na Panelu Merchanta (ustawienia sklepu). Przekazanie parametru validTo= NULL powoduje brak wygaśnięcia linku płatności z pominięciem ustawień w parametrze Aktywność płatności na Panelu Merchanta (ustawienia sklepu). Minimalny czas ważności linku to 60 sekund.
created integer Data utworzenia linku płatności w formacie UNIX TIMESTAMP czasu UTC
modified integer Data ostatniej zmiany statusu linku płatności w formacji UNIX TIMESTAMP czasu UTC

Statusy HTTP

Kod HTTP Znaczenie
200 Zapytanie wykonane poprawnie. Utworzono transakcję
400 Błędne żądanie, niepoprawny payload żądania
401 Nieautoryzowany dostęp. Żądanie zasobu, który wymaga uwierzytelnienia
403 Brak uprawnień do wykonania żądania
404 Nieznany zasób
422 Payload jest poprawny ale nie zawiera wymaganaych parametrów
500 Błąd serwera
503 System niedostępny

Status 400

Przyczyny wystąpienia kodu odpowiedzi 400 oraz treść odpowiedzi może być następująca:

  • payload to niepoprawny JSON i nie mógł być przetworzony przez serwer:
{
    "apiErrorResponse": {
        "code": "REQ-ERROR-100001",
        "message": "Bad request. Incorrect content-type. Expected application/json.",
        "instance": {},
        "errors": []
    }
}

Status 422

  • payload żądania zawiera poprawny string JSON jednak nie zawiera wszystkich wymaganych parametrów:
{
    "apiErrorResponse": {
        "code": "PMT-ERROR-150001",
        "message": "Unprocessable Entity.",
        "instance": {
            "serviceId": "63f574ed-d4ad-407e-9981-39ed7584a7b7",
            "amount": 100,
            "currency": "PLN",
            "title": "",
            "orderId": "123123123",
            "customer": {
                "firstName": "",
                "lastName": "",
                "email": ""
            }
        },
        "errors": [
            {
                "property": "instance.customer.firstName",
                "message": "does not meet minimum length of 1"
            },
            {
                "property": "instance.customer.lastName",
                "message": "does not meet minimum length of 1"
            },
            {
                "property": "instance.customer.email",
                "message": "does not conform to the \"email\" format"
            }
        ],
    }
}

gdzie:

  • code - kod błędu walidacji treści żądania

  • message - opis błędu

  • instance - zawiera treść zapytania wysłana do serwera imoje

  • errors - zawiera listę błędów, które wystąpiły podczas walidacji treści zapytania

Anulowanie linku płatności

W celu anulowania utworzonego linku płatności należy wysłać żądanie metodą POST na adres https://api.imoje.pl/v1/merchant/{merchantId}/payment/cancel

Body zapytania powinno zawierać następujące parametry:

Nazwa Parametr wymagany Typ Opis
serviceId Tak string Identyfikator sklepu
paymentId Tak string Identyfikator linku płatności

Przykład żądania

{
    "serviceId": "000eec9b-7248-4dae-98f2-56aab6a53927",
    "paymentId": "805f9c2c-e7ee-4606-b201-ee09032c49b0"
}

imoje płacę później

W ramach imoje płacę później oferowane są na ten moment 3 metody płatności odroczonych: Twisto, PayPo, Pragma GO, Blik płacę później.

Chcesz uzyskać logo wybranej metody płatności? Skorzystaj z tego zapytania lub skontaktuj się z nami.

Masz pytanie? Zobacz nasze FAQ

Utworzenie transakcji z imoje płacę później

W celu utworzenia transakcji z wybraną metodą płatności odroczonej imoje płacę później, w zapytaniu służącym do utworzenia transakcji należy skorzystać z odpowiednich wartości w parametrze paymentMethod oraz w paymentMethodCode:

Nazwa parametru Dostępne wartości parametru
paymentMethod imoje_paylater
paymentMethodCode imoje_twisto, paypo, pragma_go, blik_paylater

Przykład zapytania:

{
  "type": "sale",
  "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
  "amount": 10000,
  "currency": "PLN",
  "title": "title",
  "orderId": "orderId",
  "paymentMethod": "imoje_paylater",
  "paymentMethodCode": "imoje_twisto",
  "successReturnUrl": "https://domain.com/success",
  "failureReturnUrl": "https://domain.com/failure",
  "customer": {
    "firstName": "Jan",
    "lastName": "Kowalski",
    "email": "jan.kowalski@example.com"
  }
}

Adres billing przesyłany po API zwiększa scoring płatnika.

Utworzenie linku płatności z imoje płacę później

W celu utworzenia linku płatności ze zdefionwanym tylko imoje płacę później na bramce płatności wystarczy w dodatkowej tablicy visibleMethod przekazać wartość imoje_paylater.

Przykład zapytania:

{
    "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
    "amount": 10000,
    "currency": "PLN",
    "title": "title",
    "orderId": "orderId",
    "visibleMethod": ["imoje_paylater"],
    "returnUrl": "https://domain.com/return",  
    "successReturnUrl": "https://domain.com/success",
    "failureReturnUrl": "https://domain.com/failure",
    "customer": {
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@example.com"
    }
}

Notyfikacje

Dla poprawnej konfiguracji wysyłki notyfikacji, należy wprowadzić odpowiedni adres url notyfikacji w panelu administracyjnym imoje.

Aby dodać adres należy po zalogowaniu się do panelu imoje przejść do zakładki Sklepy, później należy wybrać sklep w którym wykonywana jest integracja i kliknąć w Szczegóły. Następnie przejść do sekcji Dane do integracji i edytować pole Adres notyfikacji.

Notyfikacje są wysyłane z adresów IP z zakresów:
5.196.116.32/28,
51.195.95.0/28,
54.37.185.64/28,
54.37.185.80/28,
147.135.151.16/28

Notyfikacje wysyłane są na domyślne porty HTTP (80) i HTTPS (443).

W momencie zmiany statusu transakcji serwery imoje wysyłają powiadomienia na wskazany przez akceptanta adres URL. Wymagane jest by serwer akceptanta (np. sklep) odpowiedział statusem 200 OK z body {"status":"ok"}, który będzie oznaczał poprawne odebranie i przetworzenie notyfikacji przez serwer akceptanta. Notyfikacje wysyłane są w następującym cyklu:

  • 3 razy co 10 milisekund, następnie,

  • 5 razy co 5 minut, następnie,

  • 5 razy co 60 minut, następnie,

  • 5 razy co 360 minut, następnie,

  • 5 razy co 720 minut.

Jeśli serwer akceptanta zwróci status 200 OK, lub notyfikacja nie zostanie odebrana do czasu zakończenia trwania całego cyklu, serwery imoje zaprzestają powtórzeń wysyłki notyfikacji.

W przypadku otrzymania z serwerów imoje dwóch identycznych notyfikacji pierwszą należy obsłużyć zgodnie z punktem metoda weryfikacji podpisu notyfikacji, natomiast drugą (duplikat) należy zignorować.

Masz pytanie? Zobacz nasze FAQ

Zawartość BODY notyfikacji

Notyfikacje wysyłane są jako obiekt JSON metodą POST i mają następującą postać:

{
    "transaction": {
        "id": "07938437-cae3-4d46-877d-e1b9d6e6c58f",
        "type": "sale",
        "status": "pending",
        "source": "api",
        "created": 1666339083,
        "modified": 1666339083,
        "notificationUrl": "https://qaz54.requestcatcher.com/",
        "serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
        "amount": 100,
        "currency": "PLN",
        "title": "",
        "orderId": "Zamowienie test",
        "paymentMethod": "pbl",
        "paymentMethodCode": "ipko"
    },
    "payment": {
        "id": "07980a69-a884-46f7-ad16-216c88a13b98",
        "title": "",
        "amount": 100,
        "status": "pending",
        "created": 1666339083,
        "orderId": "Zamowienie test",
        "currency": "PLN",
        "modified": 1666339083,
        "serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
        "notificationUrl": "https://qaz54.requestcatcher.com/"
    },
    "action": {
        "type": "redirect",
        "url": "https://sandbox.paywall.imoje.pl/sandbox/07980a69-a884-46f7-ad16-216c88a13b98",
        "method": "GET",
        "contentType": "",
        "contentBodyRaw": ""
    }
}

Notyfikacja może składać się z następujących obiektów:

  • transaction - zawiera informacje o transakcji jeśli została utworzona po wybraniu metody płatności przez płatnika

  • payment - zawiera informacje o utworzonym linku płatności

  • action - zawiera informacje na temat danych użytych do przekierowania na zewnętrzną stronę banku

  • paymentProfile - zawiera informacje na temat utworzonego profilu kartowego Oneclick/Recurring z punktu Płatność oneclick i rekurencyjna

Obiekt payment będzie jedynym wysłanym obiektem, gdy link płatności straci swój czas ważności lub zostanie ręcznie anulowany.

Parametry notyfikacji

Parametry dla obiektu transaction:

Parametr Typ Opis
id string(36) Identyfikator transakcji UUID v4
type string Typ transakcji, dopuszczalne wartości: sale, refund
status string Status transakcji, dopuszczalne wartości: new, pending, settled, cancelled, rejected
source string Źródło transakcji, dopuszczalne wartości: api, web
created integer(10) Data utworzenia transakcji
modified integer(10) Data modyfikacji transakcji
notificationUrl varchar(300) Adres notyfikacji
serviceId string(36) Identyfikator sklepu UUID v4
amount integer(9) Kwota transakcji, maksymalna wartość: 999999999
currency string(3) Waluta transakcji w standardzie ISO 4217
title string(255) Tytuł zamówienia, dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
orderId string(100) Numer zamówienia, dopuszczalne znaki: A-Za-z0-9#_-./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
paymentMethod string Metoda realizacji zamówienia.
Zobacz dopuszczalne wartości
paymentMethodCode string Oznaczenie kanału płatności.
Zobacz dopuszczalne wartości
statusCode string(24) Kod statusu zwracany do transakcji kartami
statusCodeDescription string(113) Opis kodu statusu zwracany do transakcji kartami

Parametry dla obiektu payment:

Parametr Typ Opis
id string(36) Identyfikator zamówienia UUID v4
title string(255) Tytuł zamówienia, dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
amount integer(9) Kwota zamówienia, maksymalna wartość: 999999999
status string Status zamówienia, dopuszczalne wartości: new, pending, settled, cancelled, rejected
created integer(10) Data utworzenia zamówienia
orderId string(100) Numer zamówienia, dopuszczalne znaki: A-Za-z0-9#_-./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
currency string(3) Waluta zamówienia w standardzie ISO 4217
modified integer(10) Data modyfikacji zamówienia
serviceId string(36) Identyfikator sklepu UUID v4
notificationUrl varchar(300) Adres notyfikacji

Parametry dla obiektu action:

Parametr Typ Opis
type string Typ przekierowania, dopuszczalne wartości: redirect, transfer
url string(2083) Adres przekierowania
method string Metoda przekierowania, dopuszczalne wartości: POST, GET
contentType varchar(100) Typ formatu danych
contentBodyRaw text Parametry przekierowania
ban string(26) Numer rachunku bankowego, zwracany dla metody płatności Przelew tradycyjny

Parametry dla obiektu paymentProfile:

Parametr Typ Opis
id string(36) Identyfikator profilu UUID v4
merchantMid string(20) Identyfikator klienta
merchantCustomerId string(36) Identyfikator płatnika, dopuszczalne znaki: A-Za-z0-9 oraz myślnik (0x2D)
firstName string(100) Imię płatnika, dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
lastName string(100) Nazwisko płatnika, dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
maskedNumber string(16) Zamaskowany numer karty płatnika
month string(2) Ważność karty - miesiąc
year string(4) Ważność karty - rok
organization varchar(30) Organizacja karty płatnika
isActive integer(1) Aktywność profilu Oneclick/Recurring, dpouszczalne wartości: 1 (aktywny), 0 (nieaktywny)
profile string Typ profilu płatnika, dopuszczalne wartości: oneclick, recurring
statusCode string(24) Kod statusu transakcji Oneclick/Recurring
statusCodeDescription string(113) Opis kodu statusu transakcji Oneclick/Recurring

Zawartość nagłówków notyfikacji

Dodatkowo w nagłówkach HTTP umieszczane są następujące parametry:

Accept: "text/plain",
User-Agent: "imoje",
Content-Type: "application/json; charset=UTF-8",
X-Imoje-Signature: "merchantid={merchantid};serviceid={serviceid};signature={signature};alg=sha256"

gdzie:

  • merchantid - identyfikator klienta

  • serviceid - identyfikator sklepu

  • signature - podpis notyfikacji

  • alg - algorytm funkcji skrótu, dopuszczalne wartości: sha256

Przykład nagłówka X-Imoje-Signature

X-Imoje-Signature: "merchantid=6yt3gjtm9p7b8h9xsdqz;serviceid=63f574ed-d4ad-407e-9981-39ed7584a7b7;signature=20cdc8646eb268ea754842bdf0db1df21a2cf0b1c6e3e16e74ef7f7cca8f5450;alg=sha256"

Metoda weryfikacji podpisu notyfikacji

Weryfikacja podpisu notyfikacji jest krytycznym elementem uwierzytelnienia informacji przesyłanych w pakiecie notyfikacji.

Nagłówek zawierający podpis notyfikacji ma postać:

X-Imoje-Signature: merchantid=[...];serviceid=[...];signature=[...];alg=[...]

Aby uwierzytelnić pochodzenie oraz zweryfikować integralność wiadomości powiadomienia należy wykonać następujące czynności:

  1. Z nagłówków pakietu przychodzącego na adres notyfikacji należy pobrać zawartość X-IMoje-Signature,

  2. Następnie należy pobrać wartość parametru signature oraz alg,

  3. W zależności od algorytmu funkcji skrótu określonego w parametrze alg należy obliczyć odpowiednią funkcją skrót:

    string incoming_signature = x_imoje_signature[signature]
    string body = notification_body
    string own_signature = hash(body + service_key, alg)
    
  4. Obliczoną wartość own_signature należy porównać z wartością incoming_signature, która została pobrana z nagłówka,

  5. Jeżeli wartości own_signature i incoming_signature są identyczne oznacza to, że wiadomość notyfikacji jest poprawna i pochodzi z zaufanego źródła.

Zmiany statusów transakcji należy dokonywać tylko gdy weryfikacja podpisu przebiegła poprawnie.

Przykład weryfikacji podpisu notyfikacji

  1. W nagłówku otrzymujemy sygnaturę imoje:

    X-Imoje-Signature: merchantid=mdy7zxvxudgarxbsou9n;serviceid=a33f331b-23fc-42b0-9fd1-67f310028b46;signature=b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23;alg=sha256
    
  2. W treści pakietu notyfikacji otrzymujemy JSON:

{
    "transaction": {
        "id": "07938437-cae3-4d46-877d-e1b9d6e6c58f",
        "type": "sale",
        "status": "pending",
        "source": "api",
        "created": 1666339083,
        "modified": 1666339083,
        "notificationUrl": "https://qaz54.requestcatcher.com/",
        "serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
        "amount": 100,
        "currency": "PLN",
        "title": "",
        "orderId": "Zamowienie test",
        "paymentMethod": "pbl",
        "paymentMethodCode": "ipko"
    },
    "payment": {
        "id": "07980a69-a884-46f7-ad16-216c88a13b98",
        "title": "",
        "amount": 100,
        "status": "pending",
        "created": 1666339083,
        "orderId": "Zamowienie test",
        "currency": "PLN",
        "modified": 1666339083,
        "serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
        "notificationUrl": "https://qaz54.requestcatcher.com/"
    },
    "action": {
        "type": "redirect",
        "url": "https://sandbox.paywall.imoje.pl/sandbox/07980a69-a884-46f7-ad16-216c88a13b98",
        "method": "GET",
        "contentType": "",
        "contentBodyRaw": ""
    }
}
  1. Obliczamy sygnaturę:

    service_key: PIcMy86ssE5wuNHAuQn5zPKf6hCAwX3Oxvjw

    own_signature = sha256(body + service_key)

    own_signature: b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23

  2. Porównujemy sygnaturę obliczoną z otrzymaną w nagłówku notyfikacji:

const crypto = require('crypto')
let body = "{...}";
let headerSignature = "b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23";
let privateKey = "PIcMy86ssE5wuNHAuQn5zPKf6hCAwX3Oxvjw";
let mySignature = crypto.createHash("sha256").update(body + privateKey).digest("hex");
if (mySignature === headerSignature) {
    // Notyfikacja zweryfikowana poprawnie. Przetwarzaj dalej.
} else {
    // Notyfikacja zweryfikowana negatywnie. Ignoruj notyfikację.
}

Notyfikacje do raportów

Dla raportów planowanych możliwe jest odbieranie notyfikacji o możliwości pobrania gotowego raportu.

W tym celu po zalogowaniu się do panelu administracyjnego imoje należy przejść do zakładki Raporty, a następnie w sekcji Raporty planowane wybrać opcję Dodaj raport. Oprócz uzupełnienia pożądanych parametrów w formularzu należy wprowadzić także Adres notyfikacji, który będzie odbierał notyfikacje na temat dostępności raportu.

Notyfikacje do raportów wysyłane są jako obiekt JSON metodą POST i mają następującą postać:

{
    "id": "57526046-db6a-45f9-8288-284337129a8f",
    "status": "generated",
    "fileExt": "owi1",
    "created": 1540382655,
    "modified": 1705398343,
    "url": "https://imoje.ing.pl/351e2776166edaf0e867e3231e518111b17580baa650c90764e671de57465e08c90ef7751600ef7107cdf7628ffced66bd85360776bf0b713881cbc9b9230c83"
}

WAŻNE! Notyfikacje do raportów nie zawierają sygnatury.

Notyfikacja może składać się z następujących parametrów:

Parametr Typ Opis
id string(36) Identyfikator raportu UUIDv4
status string Status raportu, dopuszczalne wartości: generated
fileExt string(5) Format raportu, dopuszczalne wartości: csv, owi1, mt940
created integer(10) Data utworzenia raportu
modified integer(10) Data modyfikacji raportu
url string(2083) Adres przekierowania

Notyfikacje do zwrotów

Domyślnie nie wysyłamy notyfikacji do zwrotów.

Jeśli jednak chcesz je otrzymywać, to skontaktuj się z nami pod adresem kontakt.tech@imoje.pl. W treści swojego mejla podaj identyfikator sklepu, dla którego chcesz włączyć notyfikacje do zwrotów.

Płatność oneclick i rekurencyjna

Płatności oneclick polegają na obciążeniu zarejestrowanego już w systemie imoje profilu klienta/płatnika. Pierwsza płatność wymaga weryfikacji i podania pełnych danych instrumentu płatniczego. Każda kolejna płatność odbywa się za pomocą obciążenia na podstawie przydzielonego do instrumentu płatniczego identyfikatora.

Płatności rekurencyjne polegają na cyklicznym obciążaniu instrumentu płatniczego klienta bez weryfikacji. Rejestracja instrumentu płatniczego odbywa się podobnie jak w płatności oneclick. Zgodnie z regulacjami organizacji płatniczych płatność musi być powtarzalna co do kwoty oraz okresu czasu.

Dokonując płatności należy pamiętać aby każdy instrument płatniczy posiadał swój unikalny identyfikator klienta/płatnika - cid.

Masz pytanie? Zobacz nasze FAQ

Tworzenie nowego profilu

Utworzenie nowego profilu kartowego następuje poprzez dokonanie pierwszej transakcji rejestrującej. Transakcję rejestrującą można utworzyć na dwa sposoby:


Zgodnie z wymaganiami PCI DSS (ustanowionymi przez organizacje płatnicze) zabronione jest przetwarzanie, przekazywanie czy przechowywanie numerów i innych danych dotyczących kart płatniczych czy kredytowych bez posiadania stosownego certyfikatu.

Jeśli posiadasz właściwy certyfikat PCI DSS i chcesz udostępnić formatkę płatności kartami na stronie Twojego sklepu - prosimy o przesłanie go do wsparcia technicznego na adres kontakt.tech@imoje.pl.

Obciążenie istniejącego profilu

Wysyłając żądanie POST na adres https://api.imoje.pl/v1/merchant/{merchantId}/transaction/profile możemy obciążyć istniejący profil w systemie.

Body zapytania powininno zawierać JSON:

{
    "serviceId": "63f574ed-d4ad-407e-9981-39ed7584a7b7",
    "paymentProfileId": "39ac1087-e632-41ff-acb8-8d661068a9d5",
    "amount": 100,
    "currency": "PLN",
    "orderId": "123123123",
    "title": ""
}

gdzie:

Parametr Typ Parametr wymagany Opis
serviceId string(36) TAK identyfikator sklepu jako UUID v4
paymentProfileId string(36) TAK identyfikator profilu który ma zostać obciążony
amount integer TAK Kwota transakcji w najmniejszej jednostce waluty np. grosze
currency string(3) TAK Waluta transakcji w standardzie ISO 4217
orderID string(100) TAK Numer zamówienia akceptanta - dopuszczalne znaki: A-Za-z0-9#_-./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
title string(255) NIE Tytuł transakcji - dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
notificationUrl string(300) NIE Dynamiczny adres notyfikacji, możliwość ustawienia konkretnego adresu dla pojedynczej transakcji.

Odpowiedź na zapytanie obciążające profil

Parametr status jest polem kluczowym świadczącym o wyniku obiążenia profilu. Pozostałe statusy - statusCode oraz statusCodeDescription są przesyłane informacyjnie.

W odpowiedzi na obciążenie profilu zwrócone mogą zostać statusy takie jak: new, pending, settled, error i rejected.

Jeśli w parametrze status zostanie zwrócona wartość new lub pending, to w celu zweryfikowania czy transakcja została zrealizowana należy wysłać zapytanie o dane zamówienia.
Dodatkowo w przypadku pomyślnego opłacenia transakcji zawsze wysyłana jest notyfikacja ze statusem settled.

{
    "transaction": {
        "id": "3b96f0cd-258a-480d-ab59-74fbf1c62d5c",
        "type": "sale",
        "status": "settled",
        "source": "api",
        "created": 1657205449,
        "modified": 1657205449,
        "notificationUrl": "https://sklep.com/notyfikacje",
        "serviceId": "eb751aad-c300-4d9a-b677-7efc31ef7aa3",
        "amount": 150,
        "currency": "PLN",
        "title": "testkonto2",
        "orderId": "test2",
        "paymentMethod": "card",
        "paymentMethodCode": "oneclick",
        "payment": {
            "id": "e0f09b1e-82c5-4dab-86db-58f17aa1df91",
            "status": "settled"
        },
        "statusCode": "CODE_000",
        "statusCodeDescription": "CODE_000 - OK",
        "paymentProfile": {
            "id": "9c9386fa-cd2a-483a-a458-6ce3b8f4560c",
            "merchantMid": "24vmh3tzmcfguuf4m332",
            "merchantCustomerId": "4",
            "firstName": "Jan",
            "lastName": "Kowalski",
            "maskedNumber": "****1111",
            "month": "12",
            "year": "2022",
            "organization": "VISA",
            "isActive": 1,
            "profile": "ONE_CLICK"
        }
    }
}

gdzie:

  • statusCode - kod odpowiedzi od dostawcy. W przypadku braku kodu zwracana zostaje wartość bezpośrednio od dostawcy.

  • statusCodeDescription - opis błędu. W przypadku braku kodu zwracana jest pusta wartość.

  • obiekt paymentProfile:

    • id - identyfikator profilu
    • merchantMid - identyfikator klienta
    • merchantCustomerId - identyfikator płatnika, dopuszczalne znaki: A-Za-z0-9_-
    • firstName - imię posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • lastName - nazwisko posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • maskedNumber - cztery gwiazdki oraz ostatnie cztery cyfry instrumentu płatniczego
    • month - data ważności karty: miesiąc
    • year - data ważności karty: rok
    • organization - organizacja płatnicza która wydała zarejestrowaną kartę
    • isActive - aktywność profilu: 1 - aktywna, 0 - nieaktywna
    • profile - rodzaj profilu

Kod odpowiedzi od dostawcy dostępne w rozdziale Kody odpowiedzi dostawcy

Pobranie informacji o profilu na podstawie identyfikatora profilu

Wysyłając żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/profile/id/{paymentProfileId} możemy pobrać szczegółowe informacje o profilu.

W odpowiedzi otrzymamy JSON:

{
    "paymentProfile": {
        "id": "d6a5bd6c-8e9c-496e-beb2-f0ca08215645",
        "firstName": "Jan",
        "lastName": "Kowalski",
        "maskedNumber": "****1791",
        "month": "10",
        "year": "2020",
        "organization": "MASTERCARD",
        "isActive": 1,
        "profile": "ONE_CLICK"
    }
}

gdzie:

  • obiekt paymentProfile:
    • id - identyfikator profilu
    • firstName - imię posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • lastName - imię posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • maskedNumber - cztery gwiazdki oraz ostatnie cztery cyfry instrumentu płatniczego
    • month - data ważności karty: miesiąc
    • year - data ważności karty: rok
    • organization - organizacja płatnicza która wydała zarejestrowaną kartę
    • isActive - aktywność profilu: 1 - aktywna, 0 - nieaktywna
    • profile - rodzaj profilu

Pobranie informacji o profilach na podstawie customerId

Wysyłając żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/profile/cid/{customerId} możemy pobrać szczegółowe informacje o zarejestrowanych profilach dla podanego identyfikatora customerId.

W odpowiedzi otrzymamy JSON:

{
    "paymentProfiles": [
        {
        "id": "3b9a1aa2-a1ac-4b35-9d05-db4d637e5f91",
        "firstName": "Jan",
        "lastName": "Kowalski",
        "maskedNumber": "****1791",
        "month": "12",
        "year": "2019",
        "organization": "MASTERCARD",
        "isActive": 1,
        "profile": "ONE_CLICK"
        },
        {
        "id": "d6a59d6c-8e9c-496e-beb2-f0ca08215645",
        "firstName": "Jan",
        "lastName": "Kowalski",
        "maskedNumber": "****2741",
        "month": "11",
        "year": "2021",
        "organization": "VISA",
        "isActive": 1,
        "profile": "ONE_CLICK"
        },
        {
        "id": "39ac5087-e622-41ff-acb8-8d621068a9d5",
        "firstName": "Jan",
        "lastName": "Kowalski",
        "maskedNumber": "****1461",
        "month": "10",
        "year": "2020",
        "organization": "MASTERCARD",
        "isActive": 1,
        "profile": "ONE_CLICK"
        }
    ]
}

gdzie:

  • pojedynczy obiekt paymentProfile:
    • id - identyfikator profilu
    • firstName - imię posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • lastName - imię posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • maskedNumber - cztery gwiazdki oraz ostatnie cztery cyfry instrumentu płatniczego
    • month - data ważności karty: miesiąc
    • year - data ważności karty: rok
    • organization - organizacja płatnicza która wydała zarejestrowaną kartę
    • isActive - aktywność profilu: 1 - aktywna, 0 - nieaktywna
    • profile - rodzaj profilu

Dezaktywacja profilu na podstawie identyfikatora

Wysyłając żądanie POST na adres https://api.imoje.pl/v1/merchant/{merchantId}/profile/deactivate możemy dezaktywować profil.

Body zapytania powininno zawierać JSON:

{
    "paymentProfileId": "3b9a1aa2-a1ac-4b35-9d05-db4d637e5f91" 
}

gdzie:

  • paymentProfileId - identyfikator profilu który ma zostać dezaktywowany

W odpowiedzi otrzymamy obiekt JSON:

{
    "paymentProfile": {
        "id": "3b9a1aa2-a1ac-4b35-9d05-db4d637e5f91",
        "firstName": "Jan",
        "lastName": "Kowalski",
        "maskedNumber": "****1791",
        "month": "10",
        "year": "2020",
        "organization": "MASTERCARD",
        "isActive": 0,
        "profile": "ONE_CLICK"
    }
}

gdzie:

  • obiekt paymentProfile:
    • id - identyfikator profilu
    • firstName - imię posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • lastName - imię posiadacza instrumentu płatniczego na który jest zarejestrowany profil
    • maskedNumber - cztery gwiazdki oraz ostatnie cztery cyfry instrumentu płatniczego
    • month - data ważności karty: miesiąc
    • year - data ważności karty: rok
    • organization - organizacja płatnicza która wydała zarejestrowaną kartę
    • isActive - aktywność profilu: 1 - aktywna, 0 - nieaktywna
    • profile - rodzaj profilu

Alternatywne dezaktywowanie profilu metodą DELETE

Wysyłając żądanie DELETE na adres https://api.imoje.pl/v1/merchant/{merchantId}/profile/id/{paymentProfileId} możemy dezaktywować profil, gdzie:

  • paymentProfileId - identyfikator profilu

Płatność oneclick i rekurencyjna bez profilu

Ten wariant płatności OneClick i rekurencyjnej różni się tym, że przy płatności rejestrującej nie jest tworzony profil kartowy i obciążenie karty wywoływane jest na innej zasadzie.

WAŻNE! Z tego wariantu możesz skorzystać tylko jeśli posiadasz ważny certyfikat PCI DSS. W przeciwnym wypadku wróć do punktu Płatność oneclick i rekurencyjna i postępuj zgodnie z zamieszczonymi tam instrukcjami.

Transakcja rejestrująca

W celu utworzenia transakcji rejestrującej OneClick lub recurring, należy przesłać zapytanie HTTP zgodnie z punktem Tworzenie nowej transakcji przez API przekazując dodatkowy obiekt card, obiekt additionalData oraz parametr profileType z wartością FIRST. Szczegółowy opis obiektu card oraz additionalData znajdziesz w punkcie Parametry zapytania.

Przykład zapytania HTTP

{
    "type": "sale",
    "serviceId": "yourServiceId",
    "amount": 100,
    "currency": "PLN",
    "title": "yourTitle",
    "orderId": "yourOrderId",
    "paymentMethod": "card",
    "paymentMethodCode": "recurring",
    "profileType": "FIRST",
    "successReturnUrl": "https://example.com/success",
    "failureReturnUrl": "https://example.com/fail",
    "customer": {
        "firstName": "John",
        "lastName": "Doe",
        "email": "john.doe@example.com"
    },
    "card": {
        "firstName": "John",
        "lastName": "Doe",
        "number": "4111111111111111",
        "month": "12",
        "year": "2029",
        "cvv": "123"
    },
    "additionalData": {
        "browser": {
            "ip": "127.0.0.1",
            "language": "pl-PL",
            "jsEnabled": true,
            "timezoneOffset": 100,
            "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36",
            "accept": "application/json, text/javascript, */*; q=0.01",
            "javaEnabled": false,
            "screenColorDepth": 24,
            "screenHeight": 1080,
            "screenWidth": 2560
        }
    }
}

Pobranie identyfikatora trasakcji rejestrującej

Uzyskanie unikalnego identyfikatora pierwszej transakcji (rejestrującej) jest niezbędne do pomyślnego obciążenia karty Płatnika.

Jest to inny identyfikator niż zwracany w parametrze id obiektu transaction lub payment!

W celu uzyskania identyfikatora pierwszej transakcji należy wysłać zapytanie GET zgodnie z punktem Pobieranie danych transakcji.

W odpowiedzi zostanie zwrócony dodatkowy parametr firstTransactionId w obiekcie payerCardData, z którego należy zapisać wartość i wykorzystywać przy obciążaniu karty Płatnika.

Przykład odpowiedzi HTTP

{
    "transaction": {
        "id": "5f9bea42-ecd8-47d2-b85f-2ea792e4b14e",
        "type": "sale",
        "status": "settled",
        "source": "api",
        "created": 1730373608,
        "modified": 1730373625,
        "notificationUrl": "https://yourshopname.com/notifications/",
        "serviceId": "6ba396a5-2f4c-438d-a5fd-8fb534fe506c",
        "amount": 1000,
        "currency": "PLN",
        "title": "yourTitle",
        "orderId": "yourOrderId",
        "paymentMethod": "card",
        "paymentMethodCode": "recurring",
        "payment": {
            "id": "5f9bea42-ecd8-47d2-b85f-2ea792e4b14e",
            "status": "settled"
        },
        "statusCode": "CODE_000",
        "statusCodeDescription": "CODE_000 - OK",
        "payerCardData": {
            "brand": "VISA",
            "bin": "41111111",
            "last4": "1111",
            "type": "DEBIT",
            "countryCodeAlpha2": "PL",
            "countryCodeAlpha3": "POL",
            "countryName": "POLAND",
            "firstTransactionId": "MCC0111LL1121"
        }
    }
}

Obciążanie karty

W celu obciążenia karty należy ponownie przesłać zapytanie HTTP zgodnie z punktem Tworzenie nowej transakcji przez API.
W zapytaniu musisz przekazać dodatkowy parametr profileType tym razem z wartością STANDARD oraz parametr firstTransactionId w obiekcie card zamiast parametru cvv z wartością, która została zwrócona w zapytaniu GET o dane transakcji

Przykład zapytania HTTP

{
    "type": "sale",
    "serviceId": "yourServiceId",
    "amount": 100,
    "currency": "PLN",
    "title": "yourTitle",
    "orderId": "yourOrderId",
    "paymentMethod": "card",
    "paymentMethodCode": "recurring",
    "profileType": "STANDARD",
    "successReturnUrl": "https://example.com/success",
    "failureReturnUrl": "https://example.com/fail",
    "customer": {
        "firstName": "John",
        "lastName": "Doe",
        "email": "john.doe@example.com"
    },
    "card": {
        "firstName": "John",
        "lastName": "Doe",
        "number": "4111111111111111",
        "month": "12",
        "year": "2029",
        "firstTransactionId": "MCC0111LL1121"
    }
}

imoje raty

W ramach tej metody płatności możliwe jest rozłożenie przez płatnika kwoty zamówienia na raty.

WAŻNE! imoje raty są dostępne tylko dla klientów indywidualnych Twojego sklepu.

Dostępne są dwie opcje rat:

  • od 3 do 60 rat, RRSO oprocentowanie 1%, zależne od ilości rat (inbank)

  • od 3 do 10 rat, RRSO 0% na drodze indywidualnego wniosku (inbank_0)

Minimalna kwota wymagana do skorzystania z imoje raty to 300 PLN, a maksymalna to 50000 PLN.

Imoje raty są dostępne zarówno w transakcji po API jak i w linku płatności po API.

  1. Transakcja po API - należy w zapytaniu skorzystać z wartości zgodnie z punktem Metody i kanały realizacji transakcji.

  2. Link po API - imoje raty wyświetlą się domyślnie wraz z innymi metodami płatności. Jeśli korzystasz z tablicy visibleMethod to należy dodać wartość imoje_installments.

Chcesz uzyskać logo wybranej metody płatności? Skorzystaj z tego zapytania lub skontaktuj się z nami.

Masz pytanie? Zobacz nasze FAQ

Utworzenie transakcji z imoje raty

W celu utworzenia transakcji dla metody płatności imoje raty, należy w zapytaniu przekazać odpowiednie wartości w parametrze paymentMethod oraz paymentMethodCode:

Parametr Typ Parametr wymagany Opis
paymentMethod string TAK Dopuszcalne wartości:imoje_installments
paymentMethodCode string TAK Dopuszcalne wartości:inbank (od 3 do 60 rat, RRSO oprocentowanie 1%, zależne od ilości rat),
inbank_0 (od 3 do 10 rat, RRSO 0% na drodze indywidualnego wniosku)
installment object NIE Tabela niżej

Parametry dla obiektu installment

Parametr Typ Parametr wymagany Opis
period integer NIE Ilość rat.
Dopuszczalny wartości: od 3 do 36 dla wartości inbank, od 3 do 10 dla wartości inbank_0

Przykład zapytania HTTP:

{
    "type": "sale",
    "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
    "amount": 5000000,
    "currency": "PLN",
    "orderId": "imoje raty",
    "title": "imoje raty",
    "paymentMethod": "imoje_installments",
    "paymentMethodCode": "inbank",
    "successReturnUrl": "https://domain.com/success",
    "failureReturnUrl": "https://domain.com/fail",
    "customer": {
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@example.com",
        "phone": "+48515515515"
    }

Utworzenie linku płatności z imoje raty

Domyślnie w linku płatności imoje raty wyświetlą się wraz z innymi metodami płatności. W celu utworzenia linku płatności tylko z imoje raty, należy w ramach tablicy visibleMethod przekazać wartość imoje_installments.

Przykład zapytania HTTP:

{
    "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
    "amount": 5000000,
    "currency": "PLN",
    "title": "imoje raty",
    "orderId": "imoje raty",
    "visibleMethod": ["imoje_installments"],
    "returnUrl": "https://domain.com/return",  
    "successReturnUrl": "https://domain.com/success",
    "failureReturnUrl": "https://domain.com/failure",
    "customer": {
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@example.com",
        "phone": "501501501"
    }

Kalkulator imoje raty - widżet

Widżet imoje raty pozwala na wyświetlenie na podsumowaniu sklepu kalkulatora rat, za pomocą którego Płatnik może wstępnie ustalić ile wyniosą raty dla wybranego okresu. Wstępne ustawienie ilości rat można pobrać z kalkulatora i przekazać następnie w zapytaniu tworzącym transakcję.

W celu wywołania kalkulatora należy wykorzystać odpowiedni skrypt JavaScript i wywołać go w obiekcie o id imoje-installments__wrapper

Adresy URL widżetu

PRODUKCJA: https://paywall.imoje.pl/js/installments.js

SANDBOX: https://sandbox.paywall.imoje.pl/js/installments.js

ID skryptu

imoje-installments__script

Parametry Wymagane

Parametr Opis
merchantId Identyfikator klienta
serviceId Identyfikator sklepu klienta jako UUID v4
amount Kwota transakcji w najmniejszej jednostce waluty np. grosze.
Minimalna wartość: 30000
Maksymalna wartość: 5000000
currency Waluta transakcji w standardzie ISO 4217, dopuszczalna wartość: PLN
signature Wyliczona sygnatura

Przykład wywołania skryptu

    (function () {
      const form = document.getElementById('form');

      function onSubmit(event) {
        event.preventDefault();

        let script = document.getElementById('imoje-installments__script');
        if (!script) {
          script = document.createElement('script');
          script.id = 'imoje-installments__script';
          script.src = 'https://paywall.imoje.pl/js/installments.js';
          script.onload = () => onSubmit(event);
          document.body.appendChild(script);
          return;
        }

        const options = { 
          merchantId: "Twój identyfikator Klienta", 
          serviceId: "Twój identyfikator sklepu", 
          amount: "Kwota zamówienia", 
          currency: "PLN", 
          signature: "Wyliczona sygnatura" 
        };

        document.getElementById('imoje-installments__wrapper').imojeInstallments(options);
      }

      form.addEventListener('submit', onSubmit);
    })();

Pobranie ustawień z kalkulatora

W zależności od wybranego na kalkulatorze kanału imoje raty oraz ilości rat, widżet za każdym razem tworzy nowe wydarzenie, na podstawie którego można pobrać wartości i przekazać je w zapytaniu tworzącym transakcję.

Przykład pobrania danych

    window.addEventListener('message', function (data) {
        if (data.data.channel && data.data.period) {
            var channel = data.data.channel;
            var period = data.data.period;
        }
    }, false);

Zwroty do imoje raty

W przypadku tej metody płatności to obecnie zwroty są możliwe tylko w wysokości całkowitej kwoty transakcji, po uprzednim potwierdzeniu tej kwoty przez Inbank.

W celu pobrania informacji o maksymalnej kwocie zwrotu pełnego i częściowego należy skorzystać z zapytania w punkcie Pobieranie informacji o możliwości dokonania zwrotu

Przelewy tradycyjne Split Payment

Płatności Split Payment polegają na rozdzieleniu kwoty przelewu tradycyjnego na kwotę netto i podatek VAT, które trafiają oddzielnie na dedykowane numery rachunków. Ten typ płatności dotyczy tylko podatników VAT.

Warunkiem prawidłowej realizacji przelewu Split Payment jest:

  • poprawna kwota całkowita
  • zgodna z fakturą kwota VAT
  • przekazanie faktury VAT w obiekcie invoice
  • tytuł zgodny z parametrem title w odpowiedzi HTTP

W celu skorzystania z płatności Split Payment należy do zapytania dołączyć obiekt invoice wraz z parametrami invoiceId (numer faktury) oraz taxAmount (wysokość podatku). Dokładny opis obiektu invoice znajdziesz poniżej w punkcie 10.1.

Obiekt invoice jest wymagany zarówno w zapytaniu tworzącym transakcję po API jak i w zapytaniu tworzącym link płatności po API.

  1. Transakcja po API - należy w parametrze paymentMethod wprowadzić wartość wt, a w paymentMethodCode wartość wt_split zgodnie z punktem Metody i kanały realizacji transakcji.

  2. Link po API - jeśli korzystasz z tablicy visibleMethod to należy dodać wartość wt.

Masz pytanie? Zobacz nasze FAQ

Obiekt invoice

Do podstawowego zapytania tworzącego transakcję lub link po API należy załączyć obiekt invoice. Obiekt ten składa się z obiektu buyer oraz tablicy positions z następujacymi parametrami:

obiekt invoice:

Parametr Typ Parametr wymagany Opis
invoiceId string TAK Numer faktury
buyer object TAK Dane kupującego
positions array TAK Dane produktu

obiekt buyer:

Parametr Typ Parametr wymagany Opis
type string TAK Przyjmuje wartość PERSON odbioraca indywidualny lub COMPANY firma
email string(200) TAK Adres e-mail w formacie zgodnym ze standardem RFC 5322 oraz RFC 6531
fullName string(200) TAK Imię i nazwisko nabywcy/nazwa firmy,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
street string(200) TAK Ulica
city string(100) TAK Miasto
postalCode string(30) TAK Kod pocztowy
countryCodeAlpha2 string(2) TAK Kod kraju Alpha2
idCountryCodeAlpha2 string(2) NIE Identyfikator kodu kraju Alpha2. Wymagane dla wartości VAT_ID parametru idType
idType string NIE Typ numeru identyfikacyjnego. Wymagane dla wartości COMPANY parametru type. Przyjmuje wartość ID PESEL lub VAT_ID NIP.
idNumber string(30) NIE NIP lub numer PESEL. Wymagane w przypadku wartości COMPANY dla parametru type

tablica positions:

Parametr Typ Parametr wymagany Opis
name string TAK Nazwa produktu
code string TAK Kod produktu
quantity number TAK Ilość. Minimalna wartość to 0
unit string TAK Jednostka
grossAmount integer TAK Wartość jednostkowa brutto w groszach
taxStake string TAK Stawka podatku. Dostępne wartości: TAX_23, TAX_22, TAX_8, TAX_7, TAX_5, TAX_3, TAX_0, TAX_EXEMPT, TAX_NOT_LIABLE, TAX_REVERSE_CHARGE, TAX_EXCLUDING
taxAmount integer TAK Wartość podatku w groszach
discountAmount integer NIE Wartość upustu

Utworzenie transakcji Split Payment

W celu utworzenia transakcji dla metody płatności Split payment, należy w zapytaniu przekazać odpowiednie wartości w parametrze paymentMethod oraz paymentMethodCode:

Nazwa parametru Dostępne wartości parametru
paymentMethod wt
paymentMethodCode wt_split

Dodatkowo należy dołączyć obiekt invoice zgodnie z punktem Obiekt invoice

Przykład zapytania HTTP

{
    "type": "sale",
    "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
    "amount": 12300,
    "currency": "PLN",
    "orderId": "Split payment",
    "title": "Split payment",
    "paymentMethod": "wt",
    "paymentMethodCode": "wt_split",
    "successReturnUrl": "https://example.com/success",
    "failureReturnUrl": "https://example.com/fail",
    "customer": {
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@example.com",
        "phone": "+48515515515"
    },
    "invoice": {
        "invoiceId": "04/12/23",
        "buyer": {
            "type": "COMPANY",
            "idType": "VAT_ID",
            "idNumber": "5354235387",
            "email": "nazwafirmy@example.com",
            "fullName": "Nazwa firmy",
            "street": "Ulica",
            "city": "Miasto",
            "postalCode": "12-345",
            "countryCodeAlpha2": "PL",
            "idCountryCodeAlpha2": "PL"
        },
        "positions": [
            {
                "name": "Produkt",
                "code": "produkt-01",
                "quantity": 1,
                "unit": "Sztuki",
                "taxStake": "TAX_23",
                "grossAmount": 12300,
                "taxAmount":  2300
            }
        ]
    }
}

Przykład odpowiedzi HTTP

{
    "transaction": {
        "id": "e9b67178-1f3e-4a4c-b808-dd7edba8e50e",
        "type": "sale",
        "status": "pending",
        "source": "api",
        "created": 1701693627,
        "modified": 1701693627,
        "notificationUrl": "https://asdgs.requestcatcher.com/",
        "serviceId": "6ba396a5-2f4c-438d-a5fd-8fb534fe506c",
        "amount": 12300,
        "currency": "PLN",
        "title": "Split payment",
        "orderId": "Split payment",
        "paymentMethod": "wt",
        "paymentMethodCode": "wt_split",
        "payment": {
            "id": "e9b67178-1f3e-4a4c-b808-dd7edba8e50e",
            "status": "pending"
        }
    },
    "action": {
        "type": "transfer",
        "ban": "05999999999999333800001179",
        "title": "/VAT/23/IDC/1111111111/INV/04/12/23/TXT//OPT/X/////E333800001179"
    }
}

gdzie:

  • type - typ wymaganej akcji

  • ban - numer rachunku bankowego, na który należy wykonać przelew

  • title - tytuł przelewu

Utworzenie linku płatności Split Payment

Do standardowego zapytania tworzącego link płatności po API należy dołączyć obiekt invoice zgodnie z punktem Obiekt invoice. Jeśli korzystasz z tablicy visibleMethod to należy dodać wartość wt.

Przykład zapytania HTTP

{
    "serviceId": "62f574ed-d4ad-4a7e-9981-89ed7284aaba",
    "amount": 12300,
    "currency": "PLN",
    "title": "Split payment",
    "orderId": "Split payment",
    "visibleMethod": ["wt"],
    "returnUrl": "https://domain.com/return",  
    "successReturnUrl": "https://domain.com/success",
    "failureReturnUrl": "https://domain.com/failure",
    "validTo": null,
    "customer": {
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@example.com"
    },
    "invoice": {
        "invoiceId": "04/12/23",
        "buyer": {
            "type": "COMPANY",
            "idType": "VAT_ID",
            "idNumber": "5354235387",
            "email": "nazwafirmy@example.com",
            "fullName": "Nazwa firmy",
            "street": "Ulica",
            "city": "Miasto",
            "postalCode": "12-345",
            "countryCodeAlpha2": "PL",
            "idCountryCodeAlpha2": "PL"
        },
        "positions": [
            {
                "name": "Produkt",
                "code": "produkt-01",
                "quantity": 1,
                "unit": "Sztuki",
                "taxStake": "TAX_23",
                "grossAmount": 12300,
                "taxAmount":  2300
            }
        ]
    }
}

Multiwypłaty

Opcja dostępna w przypadku włączonej funkcji multiwypłaty. Do podstawowego zapytania tworzącego transakcję lub link płatności należy załączyć dodatkową tablicę multipayout z następującymi parametrami:

Parametr Typ Parametr wymagany Opis
ban string TAK Numer konta bankowego
amount integer TAK Kwota transakcji w najmniejszej jednostce waluty np. grosze
label string(70) TAK Nazwa odbiorcy, dopuszczalne znaki: A-Za-z0-9-"',. oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
title string(105) NIE Tytuł przelewu, dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne).
Jego obecność powoduje wyodrębnienie danej transakcji na koncie odbiorcy. Podanie parametru dla jednego elementu warunkuje konieczność dostarczenia go dla pozostałych

Przykładowa zawartość dla zapytania tworzącego transakcję:

{  
   "type":"sale",
   "serviceId":"62f574ed-d4ad-4a7e-9981-89ed7284aaba",
   "amount":300,
   "currency":"PLN",
   "title":"",
   "orderId":"123123123",
   "paymentMethod":"pbl",
   "paymentMethodCode":"ipko",
   "successReturnUrl":"https://domain.com/success",
   "failureReturnUrl":"https://domain.com/failure",
   "customer":{  
      "firstName":"Jan",
      "lastName":"Kowalski",
      "cid":"123",
      "company":"",
      "phone":"",
      "email":"jan.kowalski@example.com"
   },
   "billing":{  
      "firstName":"Jan",
      "lastName":"Kowalski",
      "company":"Firma",
      "street":"Ulica",
      "city":"Miasto",
      "region":"Region",
      "postalCode":"",
      "countryCodeAlpha2":"PL"
   },
   "shipping":{  
      "firstName":"Jan",
      "lastName":"Kowalski",
      "company":"Firma",
      "street":"Ulica",
      "city":"Miasto",
      "region":"Region",
      "postalCode":"",
      "countryCodeAlpha2":"PL"
   },
    "data": {
        "multipayout": [
            {
                "ban": "55105000026800208114085773",
                "amount": 100,
                "label": "Nazwa firmy 0",
                "title": "Płatność za zamówienie 17AH441"
            },
            {
                "ban": "55105000026800208114085773",
                "amount": 200,
                "label": "Nazwa firmy 1",
                "title": "Płatność za zamówienie 17AH441"
            }
        ]
    }
}

Przykładowa zawartość dla zapytania tworzącego link płatności:

{  
   "type":"sale",
   "serviceId":"62f574ed-d4ad-4a7e-9981-89ed7284aaba",
   "amount":300,
   "currency":"PLN",
   "title":"",
   "orderId":"123123123",
   "paymentMethod":"pbl",
   "paymentMethodCode":"ipko",
   "successReturnUrl":"https://domain.com/success",
   "failureReturnUrl":"https://domain.com/failure",
   "customer":{  
      "firstName":"Jan",
      "lastName":"Kowalski",
      "cid":"123",
      "company":"",
      "phone":"",
      "email":"jan.kowalski@example.com"
   },
   "billing":{  
      "firstName":"Jan",
      "lastName":"Kowalski",
      "company":"Firma",
      "street":"Ulica",
      "city":"Miasto",
      "region":"Region",
      "postalCode":"",
      "countryCodeAlpha2":"PL"
   },
   "shipping":{  
      "firstName":"Jan",
      "lastName":"Kowalski",
      "company":"Firma",
      "street":"Ulica",
      "city":"Miasto",
      "region":"Region",
      "postalCode":"",
      "countryCodeAlpha2":"PL"
   },
    "multipayout": [
            {
                "ban": "55105000026800208114085773",
                "amount": 100,
                "label": "Nazwa firmy 0"
            },
            {
                "ban": "55105000026800208114085773",
                "amount": 200,
                "label": "Nazwa firmy 1"
            }
    ]
}

Masz pytanie? Zobacz nasze FAQ

ING Księgowość

Opcja dostępna w przypadku włączonej usługi ING Księgowość. Do podstawowego zapytania tworzącego transakcję lub link po API należy załączyć obiekt invoice. Obiekt ten składa się z obiektu buyer oraz tablicy positions z następujacymi parametrami:

obiekt buyer:

Parametr Typ Parametr wymagany Opis
type string TAK Przyjmuje wartość PERSON odbioraca indywidualny lub COMPANY firma
email string(200) TAK Adres e-mail
fullName string(200) TAK Imię i nazwisko nabywcy/nazwa firmy,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne), 0400 - 04FF (cyrylica)
street string(200) TAK Ulica
city string(100) TAK Miasto
postalCode string(30) TAK Kod pocztowy
countryCodeAlpha2 string(2) TAK Kod kraju Alpha2
idCountryCodeAlpha2 string(2) NIE Identyfikator kodu kraju Alpha2. Wymagane dla wartości VAT_ID parametru idType
idType string NIE Typ numeru identyfikacyjnego. Wymagane dla wartości COMPANY parametru type. Przyjmuje wartość ID PESEL lub VAT_ID NIP.
idNumber string(30) NIE NIP lub numer PESEL. Wymagane w przypadku wartości COMPANY dla parametru type

tablica positions:

Parametr Typ Parametr wymagany Opis
name string TAK Nazwa produktu
code string TAK Kod produktu
quantity number TAK Ilość. Minimalna wartość to 0
unit string TAK Jednostka
grossAmount integer TAK Wartość jednostkowa brutto
taxStake string TAK Stawka podatku. Dostępne wartości: TAX_23, TAX_22, TAX_8, TAX_7, TAX_5, TAX_3, TAX_0, TAX_EXEMPT, TAX_NOT_LIABLE, TAX_REVERSE_CHARGE, TAX_EXCLUDING
discountAmount integer NIE Wartość upustu

W przypadku zwolnienia z podatku, odpowiednie dane należy przekazać w zapytaniu, korzystając z obiektu basisForVatExemption z parametrami:

Parametr Typ Parametr wymagany Opis
type string NIE Dostępne wartości: DENTAL_TECHNICAN_SERVICES,DOCTOR_DENTIST_SERVICES, PHYSIOTHERAPY_SERVICES, NURSING_SERVICES, PSYCHOLOGICAL_SERVICES, MEDICAL_TRANSPORT_SERVICES, CARE_SERVICES, TUTORING, TEACHING_FOREIGN_LANGUAGES, ARTISTS, RENTING_PROPERTY, INSURANCE_SERVICES, CREDITS_AND_LOANS_SERVICES, GUARANTIEES, SPECIAL_CONDITIONS_FOR_EXEMPTION, UE_TRANSACTIONS, SUBJECTIVE_EXEMPTIONS, OTHER, OTHER_OBJECTIVE_EXEMPTIONS
text string NIE Opis. Parametr niezbędny w przypadku podania w parametrze type wartości OTHER

Dodatkowo możliwe jest wskazanie, czy faktura ma być automatycznie wysyłana za pomocą parmetru:

Parametr Typ Parametr wymagany Opis
issueInvoice boolean NIE Automatyczna wysyłka faktury

Przykład zapytania:

"invoice": {
        "buyer": {
            "type": "PERSON",
            "email": "john@doe.com",
            "fullName": "John Doe",
            "street": "Testowa 12",
            "city": "Warszawa",
            "postalCode": "40-100",
            "countryCodeAlpha2": "PL",
            "taxId": "23"
        },
        "positions": [
            {
                "name": "Produkt",
                "code": "produkt-01",
                "quantity": 1,
                "unit": "Sztuki",
                "taxStake": "TAX_EXEMPT",
                "grossAmount": 12300
            },
            {
                "name": "Produkt",
                "code": "produkt-01",
                "quantity": 1,
                "unit": "Sztuki",
                "taxStake": "TAX_EXEMPT",
                "grossAmount": 12300
            }
        ],
        "issueInvoice": true,
        "basisForVatExemption": {
                    "type": "OTHER",
                    "text": "Zwolnienie z podatku"
                }
    }

Masz pytanie? Zobacz nasze FAQ

ING Lease Now

Opcja dostępna w przypadku włączonej metody płatności Leasing Online. Do zapytania tworzącego link po API należy załączyć obiekt cart z tablicą items (zawierającą dowolną ilość produktów) wraz z następujacymi parametrami:

Parametr Typ Parametr wymagany Opis
id string TAK Identyfikator produktu
name string TAK Nazwa produktu
amount integer TAK Wartość jednostkowa produktu netto w najmniejszej jednostce waluty np.grosze. Dopuszczalna jest również wartość 0.
tax number TAK Wartość jednostkowa podatku
taxStake number lub string TAK Stawka podatku. Dostępne wartości: 23, 22, 8, 7, 5, 3, 0, TAX_EXEMPT, TAX_NOT_LIABLE, TAX_REVERSE_CHARGE, TAX_EXCLUDING
quantity integer TAK Ilość. Minimalna wartość to 1
url string TAK Adres url dla danego produktu
categoryId string TAK Nazwa kategorii
unit string(35) NIE Jednostka
state string NIE Stan produktu. Dostępne wartości: NEW, USED
discount.amount integer NIE Wartość rabatu
discount.tax number NIE Wartość podatku rabatu

Minimalna wartość dla pojedynczego produktu w Leasingu to 1000 PLN, natomiast wartość całego koszyka musi wynosić minimum 5000 PLN. Podane kwoty są kwotami netto.

Przykład zapytania:

{
    "serviceId": " 62f574ed-d4ad-4a7e-9981-89ed7284aaba",
    "amount": 615000,
    "currency": "PLN",
    "orderId": "test”,
    "returnUrl": "https://domain.com/return",
    "successReturnUrl": "https://domain.com/success",
    "failureReturnUrl": " https://domain.com/failure",
    "customer": {
        "firstName": "Jan",
        "lastName": "Kowalski",
        "email": "jan.kowalski@example.com",
        "phone": "501501501"
    },
    "cart": {
        "items": [
            {
                "id": "1",
                "categoryId": "category123",
                "name": "Product name",
                "amount": 500000,
                "tax": 115000,
                "taxStake": 23,
                "quantity": 1,
                "url": "https://product.url",
                "unit": "szt",
                "state": "NEW",
                "discount": {
                    "amount": 100,
                    "tax": 23
                }
            }
        ]
    }
}

Dodając parametr visibleMethod: lease wyświetlamy płatnikowi jedynie opcję leasingu na bramce.

Masz pytanie? Zobacz nasze FAQ

Zwroty

Wykonanie zwrotu

Podczas wykonywania wielu transakcji zwrotu jednocześnie, należy wprowadzić co najmniej 5-cio sekundowe opóźnienie pomiędzy kolejnymi transakcjami.

Ze względów bezpieczeństwa zwroty można wykonywać:

  • w przypadku BLIK maksymalnie do 12 miesięcy
  • dla imoje płacę później maksymalnie do 12 miesięcy
  • dla kart płatniczych do 3 lat

Poprawne wykonanie zwrotu polega na wysłaniu żądania metodą POST na adres:

  • produkcja: https://api.imoje.pl/v1/merchant/{merchantId}/transaction/{transactionId}/refund

  • sandbox: https://sandbox.api.imoje.pl/v1/merchant/{merchantId}/transaction/{transactionId}/refund

gdzie:

  • merchantId - identyfikator klienta

  • transactionId - unikalny identyfikator dla każdej transakcji której dotyczy zwrot

WAŻNE! Jeśli uda się utworzyć zwrot to, w odpowiedzi do zapytania HTTP zostanie przez nas zwrócony status settled, który niekoniecznie oznacza, że cała transakcja została zrealizowana, lecz świadczy o pomyślnym zainicjowaniu procesu zwrotu. W trakcie procesu może zostać przypisany jednak inny status końcowy tj. rejected.

Zobacz przykład prawidłowego utworzenia zwrotu

Parametry zapytania

Parametr Typ Parametr wymagany Opis
type string TAK Typ akcji
serviceId string(36) TAK Identyfikator sklepu jako UUID v4
amount integer TAK Kwota zwrotu w najmniejszej jednostce waluty - grosze
title string(255) NIE Tytuł zamówienia,
dopuszczalne znaki: A-Za-z0-9#&_-"',./ oraz znak spacji(0x20) i znaki z zakresu UNICODE 00C0 - 02C0 (m.in. polskie znaki diakrytyczne)
sendRefundConfirmationEmail boolean NIE Wyślij e-mail z potwierdzeniem zwrotu do płatnika. Dopuszczalne wartości: true, false. Mail jest wysyłany po poprawnym zrealizowaniu zwrotu (status settled) na adres e-mail podany przy składaniu zamówienia.

Przykład zapytania HTTP

W zawartości zapytania należy wprowadzić:

{
  "type": "refund",
  "serviceId": "24737aab-a507-4feb-8248-3f42bfdbb006",
  "amount": 100
}

Masz pytanie? Zobacz nasze FAQ

Pobieranie informacji o możliwości dokonania zwrotu

W celu uzyskania informacji jaka jest dopuszczalna wartość zwrotu całoścowego i częściowego dla danej transakcji należy wysłać zapytanie POST na poniższy endpoint:

  • produkcja: https://api.imoje.pl/v1/merchant/{merchantId}/transaction/{transactionId}/can-refund

  • sandbox: https://sandbox.api.imoje.pl/v1/merchant/{merchantId}/transaction/{transactionId}/can-refund

gdzie:

  • merchantId - identyfikator klienta

  • transactionId - identyfikator transakcji

Przykład odpowiedzi HTTP

{
    "id": "b9cb2d59-7c1a-47f1-b491-a3f2387a7752",
    "refundable": true,
    "balance": 60888,
    "fullRefund": 30000,
    "partialRefund": {
        "maxRefundAmount": 29999,
        "minRefundAmount": 1
    }
}

gdzie:

  • id - identyfikator transakcji

  • refundable - mozliwość zwrotu, dopuszczalne wartości: true, false

  • balance - wysokość dostępnego salda sklepu w profilu imoje jako wartość liczbowa

  • fullRefund - dostępna wartość pełnego zwrotu

  • partialRefund - maksymalna (maxRefundAmount) i minimalna (minRefundAmount) wartość zwrotu częsciowego w formie liczbowej

W przypadku braku możliwości wykonania zwrotu częściowego, w parametrze partialRefund zostanie zwrócona wartość false

Masz pytanie? Zobacz nasze FAQ

Notyfikacje do zwrotów

Domyślnie nie wysyłamy notyfikacji do zwrotów.

Jeśli jednak chcesz je otrzymywać, to skontaktuj się z nami pod adresem kontakt.tech@imoje.pl. W treści swojego mejla podaj identyfikator sklepu, dla którego chcesz włączyć notyfikacje do zwrotów.

Obsługa błędów dla transakcji kartowych

Kody odpowiedzi zwracane jedynie w przypadku transakcji kartowych typu sprzedaż (sale), o statusach: zrealizowana (settled), autoryzacja (authorized), odrzucona (rejected)

W odpowiedzi na transakcję kartową otrzymamy request o strukturze notyfikacji płatności wzbogacony o parametry: statusCode oraz statusCodeDescription.

gdzie:

  • statusCode - kod odpowiedzi od dostawcy. W przypadku braku kodu z poniższej listy zwracana zostaje wartość bezpośrednio od dostawcy.

  • statusCodeDescription - opis błędu. W przypadku braku kodu z poniższej listy zwracana jest pusta wartość.

Przykład przesłanej notyfikacji dla zrealizowanej transakcji kartowej

{
    "transaction": {
        "id": "25d78bd7-a210-486a-8e14-cbq474c31cqe",
        "type": "sale",
        "status": "settled",
        "source": "web",
        "created": 1657016052,
        "modified": 1657016052,
        "notificationUrl": "https://1.requestcatcher.com/",
        "serviceId": "eb751aad-c300-4d9a-b677-7efc31ef7add",
        "amount": 100,
        "currency": "PLN",
        "title": "test2",
        "orderId": "test2",
        "paymentMethod": "card",
        "paymentMethodCode": "ecom3ds",
        "statusCode": "CODE_000",
        "statusCodeDescription": "CODE_000 - OK"
    },
    "payment": {
        "id": "59a387b3-2192-42ff-a4c8-8bae165b74c8",
        "title": "test2",
        "amount": 100,
        "status": "settled",
        "created": 1657016036,
        "orderId": "test2",
        "currency": "PLN",
        "modified": 1657016052,
        "serviceId": "eb751aad-c300-4d9a-b677-7efc31ef7add",
        "notificationUrl": "https://1.requestcatcher.com/"
    }
}

Kody odpowiedzi dostawcy

StatusCode StatusCodeDescription Opis
INT_CREDIT_CARD_DISABLED INT_CREDIT_CARD_DISABLED Płatność nieodstępna dla kart kredytowych
CODE_000 CODE_000 - OK Płatność zaakceptowana
CODE_01 CODE_01 - Refer to card issuer Skontaktuj się z wystawcą karty
CODE_02 CODE_02 - Refer to card issuer, special condition Błąd wystawcy karty, skontaktuj się z wystawcą karty
CODE_03 CODE_03 - Invalid merchant or service provider Błąd konfiguracji sklepu
CODE_04 CODE_04 - Pickup card Zatrzymaj kartę
CODE_05 CODE_05 - Do not honor Odmowa banku, skontaktuj się z wystawcą karty
CODE_06 CODE_06 - General error Błąd
CODE_07 CODE_07 - Pick up card, special condition (fraud account) Zatrzymaj kartę, próba oszustwa.
CODE_08 CODE_08 - Honor with ID Karta obsługiwana jedynie z dowodem osobistym
CODE_10 CODE_10 - Partial approval Częściowe zatwierdzenie
CODE_11 CODE_11 - Approved (V.I.P) Płatność zaakceptowana
CODE_12 CODE_12 - Invalid transaction Nieprawidłowa transakcja
CODE_13 CODE_13 - Invalid amount Limit dla transakcji internetowych został przekroczony.
CODE_14 CODE_14 - Invalid account number (no such number) Nieprawidłowy numer konta (nie ma takiego rachunku)
CODE_15 CODE_15 - Invalid issuer/No such issuer (first 8 digits of account number do not relate to an issuing identifier) Nie ma takiego wydawcy
CODE_19 CODE_19 - Re-enter transaction Wprowadź transakcję ponownie
CODE_20 CODE_20 - Invalid response Nieprawidłowa odpowiedź
CODE_21 CODE_21 - No action taken Nie podjęto żadnych działań
CODE_30 CODE_30 - Message format error Błąd formatu wiadomości
CODE_33 CODE_33 - Expired Card - Pick Up Karta utraciła ważność - karta zgubiona albo zgłoszona
CODE_34 CODE_34 - Suspected Fraud - Pick Up Podejrzenie oszustwa
CODE_35 CODE_35 - Contact Acquirer - Pick Up Skontaktuj się z dostawcą
CODE_39 CODE_39 - No credit account Brak rachunku karty kredytowej
CODE_40 CODE_40 - Requested Function Not Supported Żądana funkcja nie jest obsługiwana
CODE_41 CODE_41 - Lost card, pick up (fraud account) Karta złoszona jako zagubiona
CODE_43 CODE_43 - Pickup card (stolen card) Karta zgloszona jako skradziona
CODE_51 CODE_51 - Insufficient funds Brak środków na karcie.
CODE_52 CODE_52 - No checking account Brak rachunku karty kredytowej
CODE_53 CODE_53 - No savings account Brak rachunku karty
CODE_54 CODE_54 - Expired card Karta wygasła lub Płacący podał niepoprawne daty ważności karty.
CODE_56 CODE_56 - No Card Record Brak zapisu karty
CODE_57 CODE_57 - Card disabled for e-commerce or cross-border transactions Karta wyłączona dla e-commerce lub transakcji transgranicznych
CODE_59 CODE_59 - Suspected fraud Podejrzenie oszustwa
CODE_61 CODE_61 - Exceeds approval amount Przekroczony limit karty
CODE_62 CODE_62 - Restricted card / Country exclusion table Ograniczenie karty ( karta nieważna w tym regionie lub kraju)
CODE_63 CODE_63 - Security violation (source is not correct issuer) Naruszenie bezpieczeństwa
CODE_64 CODE_64 - Transaction does not fulfill AML requirement Transakcja nie spełnia wymogu AML
CODE_65 CODE_65 - Exceeds withdrawal frequency limit Przekroczenie limitu ilości transakcji
CODE_75 CODE_75 - Allowable number of PIN-entry tries exceeded Przekroczono dopuszczalną liczbę prób wprowadzenia kodu PIN
CODE_83 CODE_83 - Fraud/Security (Mastercard use only) Oszustwo/bezpieczeństwo (tylko do użytku Mastercard)
CODE_90 CODE_90 - Destination not available Miejsce docelowe niedostępne
CODE_93 CODE_93 - Card disabled for e-commerce transactions Karta wyłączona dla transakcji e-commerce
CODE_99 CODE_99 - Authorization error – default Błąd autoryzacji
CODE_114 CODE_114 - No account of type requested Brak żądanego konta typu
CODE_570 CODE_570 - 3D Secure authentication failed Uwierzytelnianie 3D Secure nie powiodło się
CODE_581 CODE_581 - Exceeded limit of unsuccessful transaction attempts for the specified card Przekroczony limit nieudanych prób transakcji dla określonej karty
CODE_AC CODE_AC - Account closed (do not try again) Konto zamknięte (nie próbuj ponownie)
CODE_N0 CODE_N0 - Unable to authorize / Force STIP Niepowodzenie autoryzacji karty
CODE_N8 CODE_N8 - Transaction amount exceeds preauthorized approval amount Zbyt wysoka kwota transakcji
CODE_P1 CODE_P1 - Over daily limit (try again later) Przekroczono dzienny limit
CODE_P9 CODE_P9 - Enter lesser amount Wprowadź mniejszą kwotę
CODE_PF CODE_PF - Possible fraud (do not try again) Podejrzenie oszustwa (nie próbuj ponownie)
CODE_Q1 CODE_Q1 - Card Authentication failed Niepowodzenie autoryzacji karty
CODE_SD CODE_SD - Soft decline (strong authentication required) Miękkie odrzucenie (wymagane silne uwierzytelnienie)
CODE_T3 CODE_T3 - Card not supported Karta nie obsługiwana
CODE_T5 CODE_T5 - Card inactive or closed (updated information needed) Karta nieaktywna lub zamknięta (potrzeba zaktualizować informacje)
CODE_T8 CODE_T8 - Invalid account Nieważne konto
CODE_Z3 CODE_Z3 - Unable to go online Błąd komunikacji z wydawcą

Kody odpowiedzi dostawcy - sandbox

W środowisku sandbox możliwa jest symulacja zwracanego kodu poprzez ustawienie odpowiedniej kwoty wraz z wybraną kartą zwracającą status rejected (odrzucona)

StatusCode StatusCodeDescription Opis
CODE_05 CODE_05 - Do not honor Domyślny kod odpowiedzi, istnieje możliwość wywołania go wykonując transakcję odrzuconą na kwotę 15 groszy
CODE_51 CODE_51 - Insufficient funds Domyślny kod odpowiedzi, istnieje możliwość wywołania go wykonując transakcję odrzuconą na kwotę 151 groszy
CODE_114 CODE_114 - No account of type requested Domyślny kod odpowiedzi, istnieje możliwość wywołania go wykonując transakcję odrzuconą na kwotę 1141 groszy
CODE_AC CODE_AC - Account closed (do not try again) Domyślny kod odpowiedzi, istnieje możliwość wywołania go wykonując transakcję odrzuconą na kwotę 14143 groszy

Masz pytanie? Zobacz nasze FAQ

Pozostałe funkcje API

Pobieranie danych transakcji

Aby pobrać dane transakcji należy wysłać żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/transaction/{transactionId}.

Na przykład:

https://api.imoje.pl/v1/merchant/6yt3gjtm9p7b8h9xsdqz/transaction/f115d23d-a943-4585-a3d7-09f6c417200d

W odpowiedzi otrzymamy:

{
            "transaction": {
                "id": "f115d23d-a943-4585-a3d7-09f6c417200d",
                "type": "sale",
                "status": "pending",
                "source": "api",
                "created": 1667569676,
                "modified": 1667569676,
                "notificationUrl": "https://notification_url",
                "serviceId": "63f574ed-d4ad-407e-9981-39ed7584a7b7",
                "amount": 100,
                "currency": "PLN",
                "title": "",
                "orderId": "123123123",
                "paymentMethod": "pbl",
                "paymentMethodCode": "ipko",
                "payment": {
                    "id": "04c528da-afc7-443b-841d-a28bb9fc1a6f",
                    "status": "pending"
                }
            }
        }

Dla przelewu tradycyjnego w odpowiedzi otrzymujemy także parametr paidAmount który zwraca dotychczasowo zaksięgowaną kwotę transakcji.

Pobieranie danych zamówień

Aby pobrać dane zamówienia należy wysłać żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/payment/{paymentId}.

Na przykład:

https://api.imoje.pl/v1/merchant/6yt3gjtm9p7b8h9xsdqz/payment/cbea1a8c-8019-4716-ae46-6fa9d2c11106

W odpowiedzi otrzymamy:

{
    "payment": {
        "id": "f9b9a613-5133-4d81-9d09-a3c83f505136",
        "url": "https://paywall.imoje.pl/pay/fsb9a613-5133-4d81-9d09-a3c83f505136",
        "serviceId": "63f574ed-d4ad-407e-9981-39ed7584a7b7",
        "orderId": "123123123",
        "title": "",
        "amount": 100,
        "currency": "PLN",
        "status": "new",
        "isActive": true,
        "validTo": null,
        "created": 1539679647,
        "modified": 1539679647,
        "isGenerated": false,
        "isUsed": false,
        "usedAt": null,
        "isConfirmVisited": false,
        "confirmVisitedAt": null,
        "returnUrl": "https://domain.com/return",
        "failureReturnUrl": "https://domain.com/failue",
        "successReturnUrl": "https://domain.com/success",
        "customer": {
            "firstName": "Jan",
            "lastName": "Kowalski",
            "phone": "501501501",
            "email": "jan.kowalski@example.com"
        },
        "transactions": [
                {
                "id": "f115d23d-a943-4585-a3d7-09f6c417200d",
                "type": "sale",
                "status": "pending",
                "source": "api",
                "created": 1483381278,
                "modified": 1483382515,
                "notificationUrl": "https://notification_url",
                "serviceId": "63f574ed-d4ad-407e-9981-39ed7584a7b7",
                "amount": 100,
                "currency": "PLN",
                "title": "",
                "orderId": "123123123",
                "paymentMethod": "pbl",
                "paymentMethodCode": "ipko",
                "customer": {
                    "firstName": "Jan",
                    "lastName": "Kowalski",
                    "cid": "123",
                    "company": "",
                    "phone": "",
                    "email": "jan.kowalski@example.com"
                },
                "billing": {
                    "firstName": "Jan",
                    "lastName": "Kowalski",
                    "company": "Company",
                    "street": "Street",
                    "city": "City",
                    "region": "Region",
                    "postalCode": "",
                    "countryCodeAlpha2": "PL"
                },
                "shipping": {
                    "firstName": "Jan",
                    "lastName": "Kowalski",
                    "company": "Company",
                    "street": "Street",
                    "city": "City",
                    "region": "Region",
                    "postalCode": "",
                    "countryCodeAlpha2": "PL"
                }
            },
            ...
        ]
    }
}

Pobieranie danych o sklepach akceptanta

Wysyłając żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/services otrzymamy dokument JSON zawierający informacje o wszystkich sklepach akceptanta.

W odpowiedzi otrzymamy:

[
    {
        "service": {
            "id": "eb751aad-c300-4d9a-b677-7efc31ef7cb4",
            "created": 1526473145,
            "isActive": true,
            "paymentMethods": [
                {
                    "paymentMethod": "pbl",
                    "paymentMethodCode": "mtransfer",
                    "isActive": true,
                    "isOnline": true,
                    "description": "mTransfer",
                    "currency": "PLN",
                    "transactionLimits": null,
                    "paymentMethodImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/pbl.png"
                        }
                    ],
                    "paymentMethodCodeImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/mbank.png"
                        }
                    ]
                },
                {
                    "paymentMethod": "ing",
                    "paymentMethodCode": "ing",
                    "isActive": true,
                    "isOnline": true,
                    "description": "Płać z ING",
                    "currency": "PLN",
                    "transactionLimits": {
                        "maxTransaction": {
                            "type": "number",
                            "value": 99999999
                        },
                        "minTransaction": {
                            "type": "number",
                            "value": 0
                        }
                    },
                    "paymentMethodImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/pbl.png"
                        }
                    ],
                    "paymentMethodCodeImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/ing.png"
                        }
                    ]
                },
                {
                    "paymentMethod": "blik",
                    "paymentMethodCode": "blik",
                    "isActive": true,
                    "isOnline": true,
                    "description": "BLIK",
                    "currency": "PLN",
                    "transactionLimits": {
                        "maxTransaction": {
                            "type": "number",
                            "value": 99999999
                        },
                        "minTransaction": {
                            "type": "number",
                            "value": 0
                        }
                    },
                    "paymentMethodImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/blik.png"
                        }
                    ],
                    "paymentMethodCodeImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/blik.png"
                        }
                    ]
                },
                {
                    "paymentMethod": "imoje_paylater",
                    "paymentMethodCode": "imoje_twisto",
                    "isActive": true,
                    "isOnline": true,
                    "description": "Płatność Twisto",
                    "currency": "PLN",
                    "transactionLimits": null,
                    "paymentMethodImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/imoje_paylater.png"
                        }
                    ],
                    "paymentMethodCodeImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/twisto.png"
                        }
                    ]
                },
                {
                    "paymentMethod": "imoje_paylater",
                    "paymentMethodCode": "paypo",
                    "isActive": true,
                    "isOnline": true,
                    "description": "PayPo",
                    "currency": "PLN",
                    "transactionLimits": null,
                    "paymentMethodImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/imoje_paylater.png"
                        }
                    ],
                    "paymentMethodCodeImage": [
                        {
                            "png": "https://data.imoje.pl/img/pay/paypo.png"
                        }
                    ]
                },
                 ...
            ]
        }
    },
    {
        "service": {
            ...
        }
    }
]

Dodatkowo: Powyższe dane umożliwiają również pobieranie po API logotypów dla wszystkich obsługiwanych przez sklep metod płatności. Aby tego dokonać należy skorzystać z adresów URL znajdujących się w parametrach paymentMethodImage oraz paymentMethodCodeImage. Zalecamy pobranie intaresujących logotypów, a następnie wyświetlanie ich po Państwa stronie. Weryfikacji aktualności logotypów można dokonywać przykładowo raz na dobę.

Sposob wyświetlania na Państwa stronie logotypow metod płatności, ktore w danej chwili posiadają flage "isOnline" o wartości "false" leży w gestii Państwa oprogramowania i przyjętej przez Państwa metodologii.

Pobieranie danych o sklepie akceptanta

Wysyłając żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/service/{serviceId} otrzymamy dokument JSON zawierający informacje o określonym przez serviceId sklepie akceptanta.

W odpowiedzi otrzymamy:

{
    "service": {
        "id": "eb751aad-c300-4d9a-b677-7efc31ef7cb4",
        "created": 1538492889,
        "isActive": true,
        "paymentMethods": [
            {
                "paymentMethod": "pbl",
                "paymentMethodCode": "pekao24",
                "isActive": true,
                "isOnline": true,
                "description": "Pekao24Przelew",
                "currency": "PLN",
                "transactionLimits": {
                    "maxTransaction": {
                        "type": "number",
                        "value": 99999999
                    },
                    "minTransaction": {
                        "type": "number",
                        "value": 0
                    }
                },
                "paymentMethodImage": [
                    {
                        "png": "https://data.imoje.pl/img/pay/pbl.png"
                    }
                ],
                "paymentMethodCodeImage": [
                    {
                        "png": "https://data.imoje.pl/img/pay/pekao24.png"
                    }
                ]
            },
            {
                "paymentMethod": "pbl",
                "paymentMethodCode": "ipko",
                "isActive": true,
                "isOnline": true,
                "description": "Płacę z iPKO",
                "currency": "PLN",
                "transactionLimits": {
                    "maxTransaction": {
                        "type": "number",
                        "value": 99999999
                    },
                    "minTransaction": {
                        "type": "number",
                        "value": 0
                    }
                },
                "paymentMethodImage": [
                    {
                        "png": "https://data.imoje.pl/img/pay/pbl.png"
                    }
                ],
                "paymentMethodCodeImage": [
                    {
                        "png": "https://data.imoje.pl/img/pay/ipko.png"
                    }
                ]
            },
            {
                "paymentMethod": "pbl",
                "paymentMethodCode": "alior",
                "isActive": true,
                "isOnline": true,
                "description": "Płacę z Alior Bankiem",
                "currency": "PLN",
                "transactionLimits": {
                    "maxTransaction": {
                        "type": "number",
                        "value": 99999999
                    },
                    "minTransaction": {
                        "type": "number",
                        "value": 0
                    }
                },
                "paymentMethodImage": [
                    {
                        "png": "https://data.imoje.pl/img/pay/pbl.png"
                    }
                ],
                "paymentMethodCodeImage": [
                    {
                        "png": "https://data.imoje.pl/img/pay/alior.png"
                    }
                ]
            },
            ...
        ]
    }
}

Pobieranie zaufanych adresów IP

System umożliwia konfigurację bezpiecznych adresów IP z których możliwa jest komunikacja z API imoje. Domyślnie lista jest pusta, co oznacza, że obsługiwane będą zapytania z każdego adresu IP.

Listę zaufanych adresów IP można otrzymać wysyłając żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/settings/ips.

W odpowiedzi otrzymamy dokument JSON:

{
    "trustedIps": ["127.0.0.1","10.10.10.10",...]
}

lub dla pustej listy:

{
    "trustedIps": null
}

Ustawianie zaufanych adresów IP

Wysyłając żądanie PUT na adres https://api.imoje.pl/v1/merchant/{merchantId}/settings/ips możemy skonfigurować listę zaufanych adresów IP.

Body zapytania powininno zawierać listę adresów w postaci:

{
    "trustedIps": ["127.0.0.1","10.10.10.10"]
}

Pobranie oryginalnych danych z banku płatnika

Metoda działa dla szybkich przelewów PayByLink, płatności kartowych oraz dla przelewu tradycyjnego (wire transfer). W środowisku sandbox nie jest możliwe pobranie danych z banku płatnika z przyczyn technicznych.

Jeżeli danych nie ma natychmiast po transakcji, API powinno ponawiać próby pobrania tych danych w kilkugodzinnych interwałach (w skrajnych sytuacjach dane mogą być dostępne nawet po 24h roboczych).

Aby pobrać dane z banku płatnika należy wysłać żądanie GET na adres https://api.imoje.pl/v1/merchant/{merchantId}/transaction/{transactionId}.

Na przykład:

https://api.imoje.pl/v1/merchant/6yt3gjtm9p7b8h9xsdqz/transaction/0a6fedc5-ca91-4538-88c0-07589a161500

W odpowiedzi otrzymamy:

{
    "transaction": {
        "id": "0a6fedc5-ca91-4538-88c0-07589a161500",
        "type": "sale",
        "status": "settled",
        "source": "web",
        "created": 1629091832,
        "modified": 1629194615,
        "notificationUrl": "https://NOTIFY.ADRESS/imoje/callback",
        "serviceId": "1953654a-ae7b-4000-876c-388c0f48a8n1",
        "amount": 5499,
        "currency": "PLN",
        "title": "transakcja nr 1",
        "orderId": "547369af",
        "paymentMethod": "pbl",
        "paymentMethodCode": "ipko",
        "payment": {
            "id": "8be12e16-42cd-46ab-98f9-c3bd0a50e958",
            "status": "settled"
        },
        "fee": {
            "merchant": 1,
            "surcharge": 0
            }
        "payerData": {
            "name": "JAN KOWALSKI ULICA AKACJOWA 123 M.123 12-234 KRAKÓW",
            "account": "12345678901234567890123456"
        }
    }
}

Masz pytanie? Zobacz nasze FAQ

Pobranie dostępnych metod płatności

Aby pobrać dane dotyczące dostępnych metod płatności dla danego sklepu należy wysłać żądanie POST na adres https://api.imoje.pl/v1/merchant/{merchantId}/service/{serviceId}/get-payment-methods

Na przykład:

https://api.imoje.pl/v1/merchant/6yt3gjtm9p7b8h9xsdqz/service/07938437-cae3-4d46-877d-e1b9d6e6c58f/get-payment-methods

Body zapytania:

{
    "amount": 1,
    "currency": "PLN",
    "device": "mobile"
}

gdzie:

Parametr Typ Parametr wymagany Opis
amount int TAK Kwota
currency string(3) TAK Waluta, dostępne wartości: PLN,EUR,USD,CHF,CZK,GBP,RON,HUF,SEK,BGN
device string NIE Urządzenie, dostępne wartości: desktop, mobile

Przykład odpowiedzi:

[
    {
        "label": "Portfel elektroniczny",
        "isOnline": true,
        "image": [
            {
                "png": "https://data.imoje.pl/img/pay/wallet.png"
            }
        ],
        "channels": [
            {
                "paymentMethod": "wallet",
                "paymentMethodCode": "applepay",
                "label": "Apple Pay",
                "priority": 1,
                "isOnline": true,
                "image": [
                    {
                        "png": "https://data.imoje.pl/img/pay/applepay.png"
                    }
                ]
            },
            {
                "paymentMethod": "wallet",
                "paymentMethodCode": "gpay",
                "label": "Google Pay",
                "priority": 2,
                "isOnline": true,
                "image": [
                    {
                        "png": "https://data.imoje.pl/img/pay/gpay.png"
                    }
                ]
            }
        ],
        "priority": 1
    },
    {
        "label": "Portfel elektroniczny",
        "isOnline": true,
        "image": [
            {
                "png": "https://data.imoje.pl/img/pay/wallet.png"
            }
        ],
        "channels": [
            {
                "paymentMethod": "wallet",
                "paymentMethodCode": "visa_mobile",
                "label": "Visa Mobile",
                "priority": 1,
                "isOnline": true,
                "image": [
                    {
                        "png": "https://data.imoje.pl/img/pay/visa_mobile.png"
                    }
                ]
            }
        ],
        "priority": 2
    },
    {
        "label": "Płatność BLIK",
        "isOnline": true,
        "image": [
            {
                "png": "https://data.imoje.pl/img/pay/blik.png"
            }
        ],
        "channels": [
            {
                "paymentMethod": "blik",
                "paymentMethodCode": "blik",
                "label": "Płatność BLIK",
                "priority": 1,
                "isOnline": true,
                "image": [
                    {
                        "png": "https://data.imoje.pl/img/pay/blik.png"
                    }
                ]
            }
        ],
        "priority": 3
    },
             ...

Sandbox

Imoje oferuje tryb testowy sandbox w ramach weryfikacji poprawności działania integracji.

Środowisko testowe sandbox można znaleźć przechodząc na stronę: https://sandbox.imoje.ing.pl/ Chcąc utworzyć nowe konto należy kliknąć Utwórz konto Akceptanta, a następnie podać adres e-mail, na który zostanie wysłany link do aktywacji konta. Po aktywacji konta wystarczy zalogować się wygenerowanym loginem oraz nadanym wcześniej hasłem. Do konta zostanie przypisany sklep testowy, który posiadać będzie swoje klucze integracyjne.

Masz pytanie? Zobacz nasze FAQ

Karty na środowisku sandbox

W celu przetestowania płatności kartą, należy użyć poniższych danych.

Wydawca karty Numer Miesiąc Rok CVV 3-D Secure Opis
Visa 4111111111111111 12 29 123 NIE Pozytywna autoryzacja - zrealizowana transakcja profilu
Visa 4485201817664006 12 29 123 NIE Pozytywna autoryzacja - odrzucona transakcja profilu, dcc odrzucona
Visa 4444333322221111 12 29 123 NIE Negatywna autoryzacja
Visa 4012001037141112 12 29 123 TAK Pozytywna autoryzacja - zrealizowana transakcja profilu
Visa 4749601201390567 12 29 123 TAK Pozytywna autoryzacja - odrzucona transakcja profilu
Visa 4934403892699132 12 29 123 TAK Negatywna autoryzacja
Visa 4012001007002005 12 29 123 NIE Błąd dostawcy
Visa 4282513338596268 12 29 123 NIE Pozytywna autoryzacja - błąd transakcji dostawcy profilu

Transakcje PBL, BLIK na środowisku sandbox

W celu przetestowania różnych scenariuszy dla transakcji poprzez PBL, BLIK, należy skorzystać z poniższych wartości w parametrze title:

Wartość Opis
TEST-100000 Standard - Zrealizowany zwrot, domyślna akcja
TEST-100010 Błąd dostawcy

Transakcje WT na środowisku sandbox

W celu przetestowania różnych scenariuszy dla transakcji poprzez przelew tradycyjny, należy skorzystać z poniższych wartości w parametrze title:

Wartość Opis
TEST-100000 Transakcja zrealizowana
TEST-100001 Transakcja zrealizowana, zwrot nadpłaty
TEST-100002 Transakcja odrzucona, zwrot niedopłaty
TEST-100003 Transakcja odrzucona, nieprawidłowy tytuł przelewu Split Payment

Minimalne i maksymalne wartości kwot transakcji

Dla każdej metody płatności obowiązują limity dokonania transakcji z dokładnością do kanału płatności. Bieżące wartości używanych limitów można uzyskać w metodzie services: 16.1. Pobieranie danych o sklepach akceptanta

transactionLimits: {

                    "maxTransaction": {

                            "type": "number",

                            "value": 99999999

                        },

                    "minTransaction": {

                            "type": "number",

                            "value": 0

                        }
}

Powody błędów w odpowiedzi do zapytania HTTP

Status 400

Przyczyny wystąpienia kodu odpowiedzi 400 oraz treść odpowiedzi może być następująca:

  • payload to niepoprawny JSON i nie mógł być przetworzony przez serwer:
{
    "apiErrorResponse": {
        "status": 400,
        "message": "Bad Request"
    }
}

Status 422

  • payload żądania zawiera poprawny string JSON jednak nie zawiera wszystkich wymaganych parametrów:
{
    "apiErrorResponse": {
        "message": "Incorrect Payload",
        "code": "TRX-ERROR-120001",
        "instance": {
            "type": "sale",
            "serviceId": "63f574ed-d4ad-407e-9981-39ed7584a7b7",
            "amount": 100,
            "currency": "PLN",
            "title": "",
            "orderId": "123123",
            "paymentMethod": "pbl",
            "paymentMethodCode": "ipko",
            "customer": {
                "firstName": "",
                "lastName": "",
                "cid": "",
                "company": null,
                "phone": "",
                "email": ""
            }
        },
        "errors": [
            {
                "property": "instance.customer.firstName",
                "message": "does not meet minimum length of 1"
            },
            {
                "property": "instance.customer.lastName",
                "message": "does not meet minimum length of 1"
            },
            {
                "property": "instance.customer.cid",
                "message": "does not match pattern "^[\\w\\s-#.\\\\/]{1,36}$""
            },
            {
                "property": "instance.customer.cid",
                "message": "does not meet minimum length of 1"
            }
        ],
    }
}

gdzie:

  • message - opis błędu,

  • code - kod błędu walidacji treści żądania,

  • instance - zawiera treść zapytania wysłana do serwera imoje,

  • errors - zawiera listę błędów, które wystąpiły podczas walidacji treści zapytania.

Masz pytanie? Zobacz nasze FAQ

Gotowe pliki - przykłady

PHP:

FAQ

Poniżej znajdziesz odpowiedzi na często zadawane pytania.

Kliknij w wybrane pytanie, by zobaczyć odpowiedź.

Nie ma odpowiedzi na Twoje pytanie? Skontaktuj się z nami.


Gdzie znajdę token autoryzacyjny?

Token autoryzacyjny można znaleźć w panelu administracyjnym imoje, w zakładce Ustawienia>Klucze API>Default>Szczegóły.

Jak uzupełnić adres notyfikacji?

Adres notyfikacji należy wprowadzić w panelu administracyjnym imoje, w zakładce Sklepy>nazwa sklepu>Szczegóły>Dane do integracji

W jaki sposób obsłużyć przekierowanie z obiektu "action"?

Przekierowanie należy wykonywać ZAWSZE metodą, jaka jest zwracana w parametrze "method". Jeśli w parametrze "contentBodyRaw" zostanie zwrócona jakaś wartość, to należy ją zdekodować procentowo i wykorzystać jako dodatkowe parametry przekierowania.

W jaki sposób automatycznie aktualizować status zamówienia w sklepie?

Dla każdej zmiany statusu transakcji w systemie imoje wysyłana jest notyfikacja na wskazany w panelu administracyjnym imoje adres notyfikacji.
Adres należy wprowadzić w zakładce Sklepy>nazwa sklepu>Szczegóły>Dane do integracji
Otrzymaną notyfikację należy obsłużyć zgodnie z tym opisem

Skąd pobrać logo danej metody płatności?

Aby pobrać logo do wybranej metody płatności skorzystaj z tego zapytania.
Logo znajdziesz w tablicy "paymentMethodImage" oraz "paymentMethodCodeImage".

Dostaję błąd "Cannot process transaction. Plain card data disabled.". Co on oznacza?

Błąd ten oznacza, że w Twoim sklepie wyłączona jest obsługa płatności kartami po API. W celu aktywowania płatności kartami po API prosimy o dostarczenie Twojego aktualnego certyfikatu PCI DSS na adres kontakt.tech@imoje.pl.

Czy dostępne jest środowisko testowe?

Tak, środowisko testowe znajdziesz pod adresem https://sandbox.imoje.ing.pl/.
Możesz założyć dowolną ilość kont na tym środowisku zupełnie za darmo.

Dostaję błąd w odpowiedzi po API. Dlaczego?

Najszczęstszymi powodami błędów są niepoprawnie skonstruowane zapytania HTTP lub problemy techniczne dostawcy metody płatności.
Po bardziej szczegółowe opisy konkretnych kodów błędów udaj się tutaj.

Jak sprawdzić dostępność metody płatności?

Dostepność danej metody płatności możesz sprawdzić za pomocą tego zapytania.

Parametr "isActive" definiuje czy dana metoda płatności jest włączona w Twoim sklepie.
Parametr "isOnline" definiuje czy dana metoda płatności jest globalnie aktywna w naszym systemie.

Nie dostaję notyfikacji. Dlaczego?

Upewnij się, że wprowadziłeś odpowiedni adres notyfikacji w panelu administracyjnym imoje w zakładce Sklepy>nazwa sklepu>Szczegóły>Dane do integracji.
Sprawdź również czy Twoj serwer nie blokuje notyfikacji z adresów IP z zakresów:
5.196.116.32/28,
51.195.95.0/28,
54.37.185.64/28,
54.37.185.80/28,
147.135.151.16/28

Multiwypłaty/ING Księgowość/ING Lease Now nie działają.

Multiwypłaty - do działania niezbędne jest aktywowanie dodatkowej opcji w Twoim sklepie w panelu administracyjnym imoje. W tym celu skontaktuj się z nami pod adresem kontakt@imoje.pl lub pod numerem +48 32 319 35 70.
ING Księgowość - do działania niezbędne jest posiadanie usługi ING Księgowość w ramach konta firmowego w banku ING, a także wprowadzenie danych do integracji zgodnie z tą instrukcją.

Dlaczego nie mogę utworzyć zwrotu do transakcji?

Zwroty są odrzucane jeśli saldo Twojego sklepu w profilu imoje jest niewystarczające w danym dniu na wykonanie zwrotu.
Również jeśli zwrot jest wykonywany bo zbyt długim okresie czasu, to dostawca metody płatności może go odrzucić i konieczne będzie wykonanie go inną drogą np. przelewem tradycyjnym.

Dane kontaktowe, wsparcie techniczne

Adres e-mail: kontakt.tech@imoje.pl
Telefon: +48 32 319 35 70
WWW: https://www.imoje.pl

alt text

Reference

Tworzenie transakcji

Tworzenie nowej transakcji

URI Parameters
merchantIdidentyfikator klienta
Request
object
  • type
    Typ transakcji.
    enum, required[string, fixed]
  • serviceId
    identyfikator sklepu jako UUID v4.
    string, required
  • amount
    Kwota transakcji w najmniejszej jednostce waluty np. grosze.
    number, required
    100
  • currency
    Waluta transakcji w standardzie ISO 4217.
    enum, required[string, fixed]
  • orderId

    Numer zamówienia akceptanta - dopuszczalne znaki: {znakiOrderId}.

    string, required
    123123123
  • title

    Tytuł zamówienia - dopuszczalne znaki: {znakiTitle}.

    string, optional
  • paymentMethod

    Metoda realizacji zamówienia.

    enum, required[string, fixed]
  • paymentMethodCode

    Oznaczenie kanału płatności.

    enum, required[string, fixed]
  • successReturnUrl

    Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku dokonania płatności zpowodzeniem

    string, required
    https://domain.com/success
  • failureReturnUrl

    Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku wystąpienia błędu płatności.

    string, required
    https://domain.com/failure
  • customer
    object, required
  • billing
    object, optional
  • shipping
    object, optional
  • card
    object, optional
Request
object
  • type
    Typ transakcji.
    enum, required[string, fixed]
  • serviceId
    identyfikator sklepu jako UUID v4.
    string, required
  • amount
    Kwota transakcji w najmniejszej jednostce waluty np. grosze.
    number, required
    100
  • currency
    Waluta transakcji w standardzie ISO 4217.
    enum, required[string, fixed]
  • orderId

    Numer zamówienia akceptanta - dopuszczalne znaki: {znakiOrderId}.

    string, required
    123123123
  • title

    Tytuł zamówienia - dopuszczalne znaki: {znakiTitle}.

    string, optional
  • paymentMethod

    Metoda realizacji zamówienia.

    enum, required[string, fixed]
  • paymentMethodCode

    Oznaczenie kanału płatności.

    enum, required[string, fixed]
  • successReturnUrl

    Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku dokonania płatności zpowodzeniem

    string, required
    https://domain.com/success
  • failureReturnUrl

    Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku wystąpienia błędu płatności.

    string, required
    https://domain.com/failure
  • customer
    object, required
  • billing
    object, optional
  • shipping
    object, optional
  • card
    object, optional
Request
object
  • type
    Typ transakcji.
    enum, required[string, fixed]
  • serviceId
    identyfikator sklepu jako UUID v4.
    string, required
  • amount
    Kwota transakcji w najmniejszej jednostce waluty np. grosze.
    number, required
    100
  • currency
    Waluta transakcji w standardzie ISO 4217.
    enum, required[string, fixed]
  • orderId

    Numer zamówienia akceptanta - dopuszczalne znaki: {znakiOrderId}.

    string, required
    123123123
  • title

    Tytuł zamówienia - dopuszczalne znaki: {znakiTitle}.

    string, optional
  • paymentMethod

    Metoda realizacji zamówienia.

    enum, required[string, fixed]
  • paymentMethodCode

    Oznaczenie kanału płatności.

    enum, required[string, fixed]
  • successReturnUrl

    Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku dokonania płatności zpowodzeniem

    string, required
    https://domain.com/success
  • failureReturnUrl

    Adres powrotu z zewnętrznej strony obsługującej płatność w przypadku wystąpienia błędu płatności.

    string, required
    https://domain.com/failure
  • customer
    object, required
  • billing
    object, optional
  • shipping
    object, optional
  • card
    object, optional

Pobieranie transakcji

Pobieranie danych istniejącej transakcji

URI Parameters
merchantIdidentyfikator klienta
transactionIdidentyfikator transakcji

Zwroty

Wykonanie zwrotu

URI Parameters
merchantIdidentyfikator klienta
transactionIdidentyfikator transakcji
Request
object
  • type
    enum, required[string, fixed]
  • serviceId
    string, required
  • amount
    number, required
    100

Tworzenie linku płatności

Tworzenie nowego linku płatności

URI Parameters
merchantIdidentyfikator klienta
Request
object
  • serviceId
    identyfikator sklepu jako UUID v4.
    string, required
  • amount
    Kwota transakcji w najmniejszej jednostce waluty np. grosze.
    number, required
    100
  • currency
    Waluta transakcji w standardzie ISO 4217.
    enum, required[string, fixed]
  • orderId

    Numer zamówienia akceptanta - dopuszczalne znaki: {znakiOrderId}.

    string, required
    123
  • title

    Tytuł zamówienia - dopuszczalne znaki: {znakiTitle}.

    string, optional
  • returnUrl

    Domyślny adres powrotu

    string, optional
    https://domain.com/return
  • successReturnUrl

    Adres powrotu dla płatności zakończonej powodzeniem

    string, optional
    https://domain.com/success
  • failureReturnUrl

    Adres powrotu dla płatności zakończonej błędem

    string, optional
    https://domain.com/failure
  • customer
    object, required
Request
object
  • serviceId
    identyfikator sklepu jako UUID v4.
    string, required
  • amount
    Kwota transakcji w najmniejszej jednostce waluty np. grosze.
    number, required
    100
  • currency
    Waluta transakcji w standardzie ISO 4217.
    enum, required[string, fixed]
  • orderId

    Numer zamówienia akceptanta - dopuszczalne znaki: {znakiOrderId}.

    string, required
    123
  • title

    Tytuł zamówienia - dopuszczalne znaki: {znakiTitle}.

    string, optional
  • returnUrl

    Domyślny adres powrotu

    string, optional
    https://domain.com/return
  • successReturnUrl

    Adres powrotu dla płatności zakończonej powodzeniem

    string, optional
    https://domain.com/success
  • failureReturnUrl

    Adres powrotu dla płatności zakończonej błędem

    string, optional
    https://domain.com/failure
  • customer
    object, required
Request
object
  • serviceId
    identyfikator sklepu jako UUID v4.
    string, required
  • amount
    Kwota transakcji w najmniejszej jednostce waluty np. grosze.
    number, required
    100
  • currency
    Waluta transakcji w standardzie ISO 4217.
    enum, required[string, fixed]
  • orderId

    Numer zamówienia akceptanta - dopuszczalne znaki: {znakiOrderId}.

    string, required
    123
  • title

    Tytuł zamówienia - dopuszczalne znaki: {znakiTitle}.

    string, optional
  • returnUrl

    Domyślny adres powrotu

    string, optional
    https://domain.com/return
  • successReturnUrl

    Adres powrotu dla płatności zakończonej powodzeniem

    string, optional
    https://domain.com/success
  • failureReturnUrl

    Adres powrotu dla płatności zakończonej błędem

    string, optional
    https://domain.com/failure
  • customer
    object, required

Pobieranie linku płatności

Pobieranie danych linku płatności

URI Parameters
merchantIdidentyfikator klienta
paymentId

identyfikator płatności

Obciążanie profilu kartowego

Obciązanie istniejącego profilu kartowego

URI Parameters
merchantId
Request
object
  • serviceId
    identyfikator sklepu jako UUID v4.
    string, required
  • paymentProfileId
    identyfikator profilu kartowego
    string, required
  • amount
    Kwota transakcji w najmniejszej jednostce waluty np. grosze.
    number, required
    100
  • currency
    Waluta transakcji w standardzie ISO 4217.
    enum, required[string, fixed]
  • orderId

    Numer zamówienia akceptanta - dopuszczalne znaki: {znakiOrderId}.

    string, required
    123
  • title

    Tytuł zamówienia - dopuszczalne znaki: {znakiTitle}.

    string, optional

Operacje na profilu

Pobieranie informacji o profilu kartowym na podstawie identyfikatora profilu

URI Parameters
merchantId
paymentProfileId

Usuwanie profilu kartowego

URI Parameters
merchantId
paymentProfileId

Pobieranie profilu kartowego - customerId

Pobieranie informacji o profilu na podstawie identyfikatora klienta

URI Parameters
merchantId
customerId

Dezaktywacja profilu

Dezaktywacja profilu kartowego na podstawie identyfikatora profilu

URI Parameters
merchantId
Request
object
  • paymentProfileId
    string, required

Zaufane adresy IP

Ustawianie zaufanych adresów IP

URI Parameters
merchantId
Request
object
  • trustedIps
    array, required[string]

Pobieranie zaufanych adresów IP

URI Parameters
merchantId

Pobieranie sklepów

Pobieranie informacji o sklepach akceptanta

URI Parameters
merchantId

Pobieranie informacji o sklepie

Pobieranie informacji o określonym sklepie

URI Parameters
merchantId
serviceId