# BLIK Level 0 + OneClick (Płatności bez kodu)

Połączenie usług **BLIK Level 0** oraz **OneClick** pozwala na stworzenie najszybszego procesu zakupowego (checkoutu) na polskim rynku. W tym modelu klient wpisuje 6-cyfrowy kod BLIK bezpośrednio na stronie Twojego sklepu (Level 0), a przy okazji pierwszej płatności może zapisać Twój sklep jako zaufany. Każda kolejna płatność w Twoim serwisie będzie wymagała od niego już tylko jednego kliknięcia i potwierdzenia w aplikacji bankowej – **całkowicie bez przepisywania kodu BLIK**.

## Wymagania formalne i rejestracja usługi

Uruchomienie płatności bez kodu wiąże się z restrykcyjnymi procedurami bezpieczeństwa narzuconymi przez Polski Standard Płatności (PSP - operatora BLIK).

Wymóg prowadzenia działalności
Zgłoszenie do usług BLIK Level 0 oraz OneClick jest dostępne **wyłącznie dla podmiotów posiadających zarejestrowaną działalność gospodarczą ("z firmą")**. SimPay nie oferuje wsparcia w tym zakresie dla osób prowadzących działalność nierejestrowaną.

### Proces aktywacji krok po kroku:

1. Zaloguj się do Panelu Partnera SimPay.
2. Przejdź do zakładki **Szczegóły usługi > Kanały płatności**.
3. **Włącz najpierw kanał BLIK Level 0** – jest on fundamentem technicznym.
4. Dopiero po aktywacji Level 0, możesz wysłać zgłoszenie o rejestrację modułu **OneClick**.


Twój sklep przed produkcyjnym uruchomieniem OneClick musi bezwzględnie spełniać oficjalne wytyczne i wymagania wizerunkowe. Zapoznaj się z nimi i dostosuj swój serwis:
👉 **[Oficjalna Checklista BLIK - Payment without code](https://www.blik.com/lp/payment-without-code/Level-0-Oneclick-Checklist.141951240.html#Level0OneclickChecklist-Level0zOneClickUID-anextensionoftheguidelinesforPaymentswithoutaBLIKcode)**

## Krok 1: Pierwsza płatność i rejestracja aliasu

Aby klient mógł płacić w przyszłości bez kodu, podczas jego pierwszej płatności musisz utworzyć tzw. **alias** (powiązanie Twojego konta użytkownika z systemem BLIK).

W tym celu wysyłasz standardowe żądanie do BLIK Level 0, przekazując 6-cyfrowy kod w obiekcie `ticket.T6`, a dodatkowo dołączasz obiekt `alias`.

👉 **[Zobacz dokładną specyfikację endpointu w API Reference](/apis/payment/paymentbliklevel0)**

### Fragment żądania (Request)


```json
{
  "ticket": {
    "T6": "123456"
  },
  "alias": {
    "label": "Label zgodny z certyfikacją BLIK",
    "value": "unikalne_id_playera_lub_klienta_w_twoim_systemie",
    "type": "UID"
  }
}
```

* **`label`** – Etykieta, która wyświetli się klientowi w jego aplikacji bankowej podczas potwierdzania zapytania o dodanie sklepu do zaufanych. Musi być zgodna z certyfikacją BLIK.
* **`value`** – Twój wewnętrzny, unikalny identyfikator klienta (np. ID użytkownika z bazy danych).
* **`type`** – Typ aliasu, dla integracji handlowych zawsze używaj wartości `UID`.


## Krok 2: Oczekiwanie na aktywację (IPN)

Po udanej płatności z kodem, aplikacja mobilna banku wyświetla komunikat podobny do: *"Czy chcesz zapisać ten sklep jako zaufany?"*. Proces ten odbywa się asynchronicznie.

Twój system musi teraz nasłuchiwać dedykowanego powiadomienia IPN dotyczącego zmiany statusu aliasu: **`blik:alias_status_changed`**.

W odpowiedzi webhooka otrzymasz m.in. pole `data.id` zawierające unikalny identyfikator tego powiązania. Gdy status zmieni się na **`alias_active`**, możesz zapisać identyfikator aliasu SimPay w swojej bazie danych przy koncie użytkownika.

👉 **[Sprawdź strukturę powiadomienia blik:alias_status_changed](/notifications/payment/events/blik_alias_status_changed)**

## Krok 3: Kolejne płatności (Prawdziwy OneClick)

Gdy alias jest aktywny, kolejna płatność nie wymaga już od klienta podawania kodu. Inicjując nową transakcję, całkowicie pomijasz obiekt `ticket`.

Nasze API oferuje **dwie metody** na zidentyfikowanie powracającego klienta.

👉 **[Zobacz endpoint płatności OneClick w API Reference](/apis/payment/paymentbliklevel0)**

### Metoda A: Identyfikacja za pomocą `uuid`

Przekazujesz indywidualny identyfikator aliasu zarejestrowany w SimPay, który otrzymałeś wcześniej w powiadomieniu IPN. Ponieważ wskazuje on na jedną konkretną aplikację bankową, transakcja zawsze przejdzie bezbłędnie.


```json
{
  "alias": {
    "uuid": "019972b1-e4c0-714f-a10b-f88a158bee50",
    "label": "Label zgodny z certyfikacją BLIK"
  }
}
```

### Metoda B: Identyfikacja za pomocą pary `value` i `type`

Przekazujesz swoje własne ID użytkownika z bazy danych. Jeśli użytkownik ma podpiętych kilka banków pod to ID, ta metoda może wymagać dodatkowej obsługi (zobacz sekcję błędu poniżej).


```json
{
  "alias": {
    "value": "unikalne_id_playera_lub_klienta_w_twoim_systemie",
    "type": "UID",
    "label": "Label zgodny z certyfikacją BLIK"
  }
}
```

W obu przypadkach, po udanym żądaniu, aplikacja mobilna banku wyśle powiadomienie push bezpośrednio na telefon klienta z prośbą o autoryzację transakcji. Nasze API odpowie statusem **`HTTP 204 No Content`**.

## Obsługa błędu: Wiele aplikacji bankowych (`ALIAS_NOT_UNIQUE`)

*(Uwaga: Ten błąd może wystąpić **wyłącznie wtedy, gdy do autoryzacji używasz Metody B** – czyli własnego `value` + `type`).*

Bardzo częstym scenariuszem jest sytuacja, w której klient posiada ten sam unikalny identyfikator aliasu (np. ten sam login/e-mail w Twoim sklepie) zarejestrowany w **kilku różnych aplikacjach bankowych** jednocześnie (np. aplikacja VeloBanku oraz PKO BP na jednym telefonie).

W takim wypadku system BLIK nie wie, do którego banku wysłać prośbę o płatność, a API SimPay zwróci błąd **`HTTP 400 Bad Request`** o kodzie `ALIAS_NOT_UNIQUE`.

### Odpowiedź API (Błąd jednoznaczności aliasu)


```json
{
  "success": false,
  "message": "Alias is not unique. Select interested alias by providing alias.blik_id alongside with alias.value and alias.type.",
  "data": {
    "alternatives": [
      {
        "value": "SIMSIM",
        "type": "UID",
        "label": "TEST APP 222",
        "blik_id": 953824
      },
      {
        "value": "SIMSIM",
        "type": "UID",
        "label": "TEST APP 111",
        "blik_id": 953793
      }
    ]
  },
  "errorCode": "ALIAS_NOT_UNIQUE"
}
```

### Jak to rozwiązać w kodzie?

Gdy Twój backend otrzyma taki błąd, musisz wyświetlić użytkownikowi na stronie okienko z wyborem banku (wykorzystując nazwy przesłane w polach `label`, np. *"Wybierz aplikację bankową: TEST APP 222 czy TEST APP 111"*).

Gdy użytkownik kliknie w odpowiedni bank, ponawiasz żądanie płatności OneClick, dopisując do obiektu `alias` otrzymany identyfikator **`blik_id`**:


```json
{
  "alias": {
    "value": "SIMSIM",
    "type": "UID",
    "label": "TEST APP 222",
    "blik_id": 953824
  }
}
```

## Powiadomienia IPN o statusie transakcji

Oprócz opisanego w Kroku 2 powiadomienia o statusie rejestracji samego aliasu (`blik:alias_status_changed`), **przy każdej realizowanej transakcji** (zarówno pierwszej autoryzowanej kodem, jak i każdej kolejnej OneClick) Twój system otrzyma standardowe powiadomienia IPN informujące o przepływie pieniędzy.

W momencie, gdy klient autoryzuje (lub odrzuci) płatność na swoim telefonie, SimPay wyśle do Twojej aplikacji **dwa równoległe eventy**:

1. **`transaction:status_changed`** – Ogólne powiadomienie systemowe o zmianie statusu transakcji w SimPay (np. przejście ze statusu nowej na opłaconą `transaction_paid` lub odrzuconą). To na jego podstawie powinieneś finalizować zamówienie i wydawać towar.
2. **`transaction_blik_level0:code_status_changed`** – Dedykowane powiadomienie specyficzne dla modułu BLIK Level 0. Zawiera ono szczegółowe, niskopoziomowe informacje techniczne bezpośrednio z Polskiego Standardu Płatności (PSP) dotyczące statusu samej próby autoryzacji kodu lub aliasu.


👉 **[Zobacz event transaction:status_changed](/notifications/payment/events/transaction_status_changed)**

👉 **[Zobacz event transaction_blik_level0:code_status_changed](/notifications/payment/events/transaction_blik_level0_code_status_changed)**