# Zdarzenie: transaction_blik_level0:code_status_changed

Zdarzenie `transaction_blik_level0:code_status_changed` służy do monitorowania stanu samego 6-cyfrowego kodu BLIK. Jest
to szczególnie przydatne, gdy chcesz na żywo aktualizować interfejs użytkownika w swoim sklepie (np. wyświetlić
odpowiedni komunikat: w momencie, gdy status kod zostanie zmieniony).

## Kiedy wysyłany jest ten event?

Powiadomienie to jest wysyłane **wyłącznie** przy transakcjach inicjowanych kanałami wspierającymi przepisywanie kodu na
stronie sprzedawcy, czyli:

* BLIK Level 0 (`blik-level0`)
* BLIK Płatności Powtarzalne (`blik-recurrent`)


Zostanie ono wyzwolone, gdy zmieni się status podanego przez klienta kodu BLIK (np. kod zostanie uznany za poprawny –
`VALID`, lub odrzucony/nieważny).

## Struktura obiektu `data`

Gdy pole `type` w głównym obiekcie powiadomienia ma wartość `transaction_blik_level0:code_status_changed`, obiekt `data`
będzie zawierał następujące informacje:

| Pole | Typ | Opis | Przykładowa wartość |
|  --- | --- | --- | --- |
| `ticket_status` | `string` | [Status kodu BLIK](/payment/blik/level0) | `VALID` |
| `transaction` | `object` | Obiekt z informacjami o powiązanej transakcji |  |
| `transaction.id` | `UUID` | ID transakcji przesyłany po wygenerowaniu transakcji | `70bc5ab3-4973-4275-a0eb-08e3f2ab54f2` |
| `transaction.payer_transaction_id` | `char(8)` | ID transakcji przekazane płacącemu | `6PB8JKKN` |
| `transaction.service_id` | `char(8)` | Identyfikator usługi | `e65c7519` |
| `transaction.status` | `TransactionStatusEnum` | Aktualny [status powiązanej transakcji](/payment/statuses#statusGroup=Status+transakcji) | `transaction_paid` |
| `transaction.amount` | `object` | Obiekt informacji o kwocie |  |
| `transaction.amount.final_currency` | `ISO 4217` | Waluta, w której płacący dokonał płatności | `PLN` |
| `transaction.amount.final_value` | `string` (%.2f) | Finalna kwota, którą płacący zapłacił | `360.00` |
| `transaction.amount.original_currency` | `ISO 4217` | Waluta, która była zadeklarowana przy inicjacji płatności | `PLN` |
| `transaction.amount.original_value` | `string` (%.2f) | Zadeklarowana kwota przy inicjacji płatności | `360.00` |
| `transaction.amount.commission_system` | `string` (%.2f) lub `null` | Kwota prowizji pobrana przez SimPay | `5.36` |
| `transaction.amount.commission_partner` | `string` (%.2f) lub `null` | Kwota prowizji dla Partnera | `354.64` |
| `transaction.amount.commission_currency` | `ISO 4217` lub `null` | Waluta pobranej prowizji | `PLN` |
| `transaction.control` | `string` lub `null` | Wartość pola control z inicjacji płatności (jeśli brak - `null`) | `111122223333` |


Wskazówka
Pamiętaj, że to powiadomienie skupia się na statusie **kodu BLIK** (`ticket_status`). Choć zawiera ono również aktualny
status transakcji (`transaction.status`), to do finalnego wydawania towaru w sklepie rekomendujemy opieranie się na
głównym evencie `transaction:status_changed`, który pojawia się po ostatecznym zaksięgowaniu środków.

## Przykładowy Payload JSON

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

*(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": "transaction_blik_level0:code_status_changed",
  "notification_id": "019736c4-50c3-7108-944c-11a0f9c12b72",
  "date": "2025-06-03T19:08:44+02:00",
  "data": {
    "ticket_status": "VALID",
    "transaction": {
      "id": "70bc5ab3-4973-4275-a0eb-08e3f2ab54f2",
      "payer_transaction_id": "6PB8JKKN",
      "service_id": "e65c7519",
      "status": "transaction_paid",
      "amount": {
        "final_currency": "PLN",
        "final_value": "360.00",
        "original_currency": "PLN",
        "original_value": "360.00",
        "commission_system": "5.36",
        "commission_partner": "354.64",
        "commission_currency": "PLN"
      },
      "control": "111122223333"
    }
  },
  "signature": "236197b1a75a8e1c33b0feea94cab753f4b0d7f5ffd044abeea36ea8b89566cc"
}
```

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


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


```
transaction_blik_level0:code_status_changed|019736c4-50c3-7108-944c-11a0f9c12b72|2025-06-03T19:08:44+02:00|VALID|70bc5ab3-4973-4275-a0eb-08e3f2ab54f2|6PB8JKKN|e65c7519|transaction_paid|PLN|360.00|PLN|360.00|5.36|354.64|PLN|111122223333
```

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', 'transaction_blik_level0:code_status_changed|019736c4-50c3-7108-944c-11a0f9c12b72|2025-06-03T19:08:44+02:00|VALID|70bc5ab3-4973-4275-a0eb-08e3f2ab54f2|6PB8JKKN|e65c7519|transaction_paid|PLN|360.00|PLN|360.00|5.36|354.64|PLN|111122223333|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
`236197b1a75a8e1c33b0feea94cab753f4b0d7f5ffd044abeea36ea8b89566cc`.