Dla poprawnej konfiguracji wysyłki notyfikacji, należy wprowadzić odpowiedni adres url notyfikacji w panelu administracyjnym imoje lub w zapytaniu w ramach opcjonalnego parametru notificationUrl.
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 poniższych zakresów CIDR: 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 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 sekund, 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ć.
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łatnikapayment- zawiera informacje o utworzonym linku płatnościaction- zawiera informacje na temat danych użytych do przekierowania na zewnętrzną stronę bankupaymentProfile- zawiera informacje na temat utworzonego profilu kartowego Oneclick/Recurring
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, authorized, 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. |
paymentMethodCode |
string | Oznaczenie kanału płatnoś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 |
ipksef |
string | Identyfikator płatności KSeF |
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 |
Przykładowa zawartość BODY notyfikacji
{
"transaction": {
"id": "07938437-cae3-4d46-877d-e1b9d6e6c58f",
"type": "sale",
"status": "pending",
"source": "api",
"created": 1666339083,
"modified": 1666339083,
"notificationUrl": "https://yourshopdomain.com/notification",
"serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
"amount": 1000,
"currency": "PLN",
"title": "yourTitle",
"orderId": "yourOrderId",
"paymentMethod": "blik",
"paymentMethodCode": "blik"
},
"payment": {
"id": "07980a69-a884-46f7-ad16-216c88a13b98",
"title": "yourTitle",
"amount": 1000,
"status": "pending",
"created": 1666339083,
"orderId": "yourOrderId",
"currency": "PLN",
"modified": 1666339083,
"serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
"notificationUrl": "https://yourshopdomain.com/notification"
},
"action": {
"type": "redirect",
"url": "https://paywall.imoje.pl/07980a69-a884-46f7-ad16-216c88a13b98",
"method": "GET",
"contentType": "",
"contentBodyRaw": ""
}
}
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={alg}"
gdzie:
merchantid- identyfikator klientaserviceid- identyfikator sklepusignature- podpis notyfikacjialg- algorytm funkcji skrótu, dopuszczalne wartości:sha224,sha256,sha384,sha512
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:
- Z nagłówków pakietu przychodzącego na adres notyfikacji należy pobrać zawartość
X-IMoje-Signature, - Następnie należy pobrać wartość parametru
signatureorazalg, W zależności od algorytmu funkcji skrótu określonego w parametrze
algnależ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)Obliczoną wartość
own_signaturenależy porównać z wartościąincoming_signature, która została pobrana z nagłówka,Jeżeli wartości
own_signatureiincoming_signaturesą 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
W nagłówku otrzymujemy sygnaturę imoje:
X-Imoje-Signature: merchantid=mdy7zxvxudgarxbsou9n;serviceid=a33f331b-23fc-42b0-9fd1-67f310028b46;signature=b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23;alg=sha256W 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://yourshopdomain.com/notification",
"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://yourshopdomain.com/notification"
},
"action": {
"type": "redirect",
"url": "https://paywall.imoje.pl/07980a69-a884-46f7-ad16-216c88a13b98",
"method": "GET",
"contentType": "",
"contentBodyRaw": ""
}
}
Obliczamy sygnaturę:
service_key: PIcMy86ssE5wuNHAuQn5zPKf6hCAwX3Oxvjwown_signature = sha256(body + service_key)own_signature: b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23Poró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.