# Zdarzenie: ipn:test

Zdarzenie `ipn:test` to specjalny, pomocniczy typ powiadomienia. Służy ono wyłącznie do weryfikacji połączenia pomiędzy
systemem SimPay a Twoim serwerem (Endpointem IPN) oraz do sprawdzenia poprawności zaimplementowanego przez Ciebie
algorytmu wyliczania sygnatury kryptograficznej.

Dzięki niemu możesz przetestować odbieranie webhooków bez konieczności inicjowania i opłacania rzeczywistych, testowych
transakcji na bramce płatniczej.

## Kiedy wysyłany jest ten event?

Powiadomienie to nie jest generowane automatycznie przez ruch klientów. Jest wysyłane **tylko na Twoje wyraźne żądanie
**, po kliknięciu odpowiedniego przycisku testowego w Panelu Klienta SimPay (w ustawieniach danej usługi).

## Struktura obiektu `data`

Gdy pole `type` w głównym obiekcie powiadomienia ma wartość `ipn:test`, obiekt `data` jest bardzo uproszczony i zawiera
następujące informacje:

| Pole | Typ | Opis | Przykładowa wartość |
|  --- | --- | --- | --- |
| `service_id` | `char(8)` | Identyfikator usługi, dla której wyzwolono test | `e65c7519` |
| `nonce` | `string` | Losowy ciąg znaków gwarantujący unikalność żądania | `01JVZCXGZ77DJTM08WMSX34ETQ` |


Wskazówka
Pole `nonce` to losowy ciąg znaków generowany przy każdym kliknięciu testu w panelu. Sprawia on, że mimo niezmiennych
innych parametrów usługi, **sygnatura powiadomienia za każdym razem będzie inna**. Dzięki temu masz pewność, że Twój
serwer faktycznie liczy hash na żywo, a nie podaje zbuforowanej (zapisanej w cache) poprawnej odpowiedzi z poprzedniego
testu.

## Przykładowy Payload JSON

Poniżej znajduje się kompletny zrzut (payload) powiadomienia wysyłanego dla zdarzenia `ipn:test`.

*(Przykładowa sygnatura została wygenerowana przy użyciu klucza IPN: **`UwSkKiIwlxIeOMF8MIq9iDkQWBTtjoJQ`**. Możesz użyć
tego klucza i poniższych danych do przetestowania swojego algorytmu walidacji).*


```json
{
  "type": "ipn:test",
  "notification_id": "0196fece-c3e7-71ba-ac8a-ac64056d7d6b",
  "date": "2025-05-23T22:21:25+02:00",
  "data": {
    "service_id": "e65c7519",
    "nonce": "01JVZCXGZ77DJTM08WMSX34ETQ"
  },
  "signature": "02df1a420def7e5de9b316d2bd1ef70796f50abc461561a85bb1243f0a08984d"
}
```

details
summary
Zobacz wyliczenie sygnatury
1. Flatten wszystkich elementów po kolei + separacja `|`:


Nasz ciąg będzie wyglądać tak:


```
ipn:test|0196fece-c3e7-71ba-ac8a-ac64056d7d6b|2025-05-23T22:21:25+02:00|e65c7519|01JVZCXGZ77DJTM08WMSX34ETQ
```

1. Dodaj klucz IPN na końcu ciągu:
`...|UwSkKiIwlxIeOMF8MIq9iDkQWBTtjoJQ`
2. Oblicz SHA256 z powyższego ciągu i zakoduj go w hex:



```php
<?php

$signature = hash('sha256', 'ipn:test|0196fece-c3e7-71ba-ac8a-ac64056d7d6b|2025-05-23T22:21:25+02:00|e65c7519|01JVZCXGZ77DJTM08WMSX34ETQ|UwSkKiIwlxIeOMF8MIq9iDkQWBTtjoJQ');
```

1. Porównaj bezpieczną funkcją porównującą (np. `hash_equals` w PHP) obliczoną sygnaturę z tą przesłaną w polu
`signature` powiadomienia. W tym przypadku wynikiem hashowania będzie
`02df1a420def7e5de9b316d2bd1ef70796f50abc461561a85bb1243f0a08984d`.