# Środowisko testowe Paynow — instrukcja

**Wersja 1.0 · 11.09.2026 · dariuszmalojlo.pl**

Wszystko działa w sandboxie Paynow. Żadne prawdziwe pieniądze nie są pobierane, a klucze w konfiguracji to publiczne klucze testowe z dokumentacji.

---

## 1. Pliki

| Plik | Rola |
|---|---|
| `paynow-test-config.php` | Konfiguracja: klucze, adresy, definicja wydarzenia |
| `paynow-test-lib.php` | Podpis v3 i wywołanie API |
| `paynow-test-formularz.html` | Strona z formularzem — punkt wejścia |
| `paynow-test-start.php` | Odbiera formularz, tworzy płatność, przekierowuje |
| `paynow-test-powrot.php` | Strona powrotu po płatności |
| `paynow-test-notyfikacja.php` | Odbiornik notyfikacji, weryfikuje podpis |
| `paynow-test-podpis.php` | Autotest — uruchom przed pierwszą płatnością |
| `paynow-test-log-podglad.php` | Podgląd logu w przeglądarce |
| `paynow-test-htaccess.txt` | Wgraj jako `.htaccess` |

---

## 2. Wgranie na serwer

1. Utwórz katalog `/test-platnosci/` w katalogu publicznym (`www`)
2. Wgraj wszystkie pliki
3. Zmień nazwę `paynow-test-htaccess.txt` na `.htaccess`

Katalog stoi obok reszty strony i nie dotyka żadnego istniejącego pliku.

---

## 3. Autotest przed pierwszą płatnością

Otwórz:

```
https://dariuszmalojlo.pl/test-platnosci/paynow-test-podpis.php
```

Musi pokazać **ZGODNY**. Jeśli pokaże NIEZGODNY — zatrzymaj się i napisz, co wypisało.

Sprawdź też trzy rzeczy z sekcji ŚRODOWISKO: cURL dostępny, `getallheaders` dostępny, katalog zapisywalny. Jeśli czegoś brakuje, powiedz — jest obejście dla każdego przypadku.

---

## 4. Adresy w panelu sandbox

Zarejestruj konto na `panel.sandbox.paynow.pl`, potem **Ustawienia → Sklepy i punkty płatności**:

- **Adres powrotu:** `https://dariuszmalojlo.pl/test-platnosci/paynow-test-powrot.php`
- **Adres powiadomień:** `https://dariuszmalojlo.pl/test-platnosci/paynow-test-notyfikacja.php`

Bez adresu powiadomień notyfikacje nie przyjdą i nie sprawdzimy najważniejszej części.

---

## 5. Scenariusze do przejścia

### Ścieżka udana
Formularz → BLIK → kod **111111** → powrót ze statusem `CONFIRMED`.
W logu: `utworzenie_platnosci` (ok), `powrot_klienta`, `notyfikacja` z `podpis_ok: tak`.

### Ścieżka odrzucona
To samo, kod **333333** → status `REJECTED`.

### Karta
Numer `4444 4444 4444 4000`, CVC `111`, dowolna data w przyszłości.

### Walidacja
Wyślij formularz bez zgody, z błędnym e-mailem, z pustym imieniem — każdy przypadek ma zatrzymać się na stronie błędu, bez wywołania API.

### Powtórka
Zapłać dwa razy tym samym adresem e-mail. Każda płatność ma dostać osobny `paymentId` i osobny `externalId`.

Log: `https://dariuszmalojlo.pl/test-platnosci/paynow-test-log-podglad.php`

---

## 6. Co sprawdzamy

| Pytanie | Gdzie zobaczysz |
|---|---|
| Czy podpis v3 jest liczony poprawnie | autotest + brak błędu 401 przy tworzeniu płatności |
| Czy dane płatnika docierają do Paynow | panel sandbox, szczegóły transakcji |
| Czy notyfikacja przychodzi i ma poprawny podpis | log, wpis `notyfikacja`, pole `podpis_ok` |
| Czy powrót na stronę działa | strona powrotu ze statusem |
| Czy `externalId` pozwala powiązać wpłatę z zapisem | log, pole `externalId` |

---

## 7. Czego tu celowo nie ma

- **Wysyłki maili** — dopiero po potwierdzeniu, że notyfikacje działają
- **Zapisu do bazy ani do Airtable** — log w pliku wystarczy do testów
- **Kluczy produkcyjnych** — produkcja dostanie osobną konfigurację poza katalogiem publicznym
- **Integracji z generatorem wydarzeń** — dopiero gdy mechanizm się potwierdzi

---

## 8. Przed przejściem na produkcję

- [ ] Klucze produkcyjne w pliku poza katalogiem publicznym
- [ ] `paynow-test-log-podglad.php` usunięty albo za hasłem
- [ ] Adresy powrotu i powiadomień przestawione na produkcyjne
- [ ] Obsługa statusu `CONFIRMED` idempotentna — ta sama notyfikacja przyjdzie kilka razy
- [ ] Log rotowany albo przeniesiony do bazy
