Przegląd
Ta strona dokumentuje dokładnie API i przykładowy kod PHP, który otrzymałeś. Opisuje endpoint do wygenerowania płatności oraz webhook/handler, który weryfikuje HMAC.
Endpointy
| Ścieżka | Opis | Kod odpowiedzi |
|---|---|---|
https://api.remsopay.eu/pay/generate | Generuje żądanie do API (przykład: curl wysyłający JSON).Przykładowa odpowiedź API: {
"status": "success",
"redirect": "https://tipply.pl/payment/capture/..."
} | 201 (Location header z linkiem) |
webhook (handler) | Twój lokalny/skryptowy endpoint który odbiera POST z tip alertami i weryfikuje HMAC. Przykładowy POST dostarczany do endpointu: {
"id": "nickname",
"email": "test@example.com",
"message": "tekst podane podczas generowania płatności",
"amount": 1.00,
"method": "psc", (psc, paypal, cashbill_blik lub cashbill)
"code": "hmacCode"
} | 200/400/405 |
Payload / Parametry
Przykładowy JSON wysyłany przy generowaniu płatności:
{
"email": "test@test.com",
"message": "test",
"amount": 100, (1 PLN)
"method": "psc", (psc, paypal, cashbill_blik lub cashbill)
"accepted": "http://localhost/submit_form.php",
"link": "remsooo",
"cel_tipply": "https://widgets.tipply.pl/TIPS_GOAL/",
"alert_tipply": "https://widgets.tipply.pl/TIP_ALERT/"
}
Odpowiedź API
Po wysłaniu poprawnego żądania do api.remsopay.eu/pay/generate otrzymasz odpowiedź JSON:
{
"status": "success",
"redirect": "https://tipply.pl/payment/capture/..."
}
Dodatkowo serwer zwraca nagłówek Location z tym samym linkiem do przekierowania użytkownika.
Weryfikacja HMAC
W webhooku przykład pokazuje generowanie HMAC w PHP:
$data = $numerzamowienia.$meil.$cokupil.$kwota;
$secretKey = 'https://widgets.tipply.pl/TIP_ALERT/';
$generatedHMAC = hash_hmac('sha256', $data, $secretKey);
if (hash_equals($code, $generatedHMAC)) { /* OK */ }
Handler PHP — omówienie krok po kroku
Poniżej znajduje się dokładny kod.
// -- START pełny kod (bez zmian) --
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$jsonData = file_get_contents('php://input');
$data = json_decode($jsonData, true);
if (json_last_error() === JSON_ERROR_NONE) {
$numerzamowienia = $data['id'] ?? null;
$meil = $data['email'] ?? null;
$cokupil = $data['message'] ?? null;
$kwota = $data['amount'] ?? null;
$code = $data['code'] ?? null;
$method = $data['method'] ?? null;
$data = $numerzamowienia.$meil.$cokupil.$kwota;
$secretKey = 'https://widgets.tipply.pl/TIP_ALERT/';
$generatedHMAC = hash_hmac('sha256', $data, $secretKey);
if (hash_equals($code, $generatedHMAC)) {
http_response_code(200);
echo 'HMAC jest poprawny!';
} else {
http_response_code(400);
echo 'HMAC jest niepoprawny!';
}
} else {
http_response_code(400);
echo "Błąd: Nieprawidłowy format JSON.";
}
exit;
} else {
http_response_code(405);
echo "Błąd: Dozwolone tylko żądania POST.";
}
// (reszta pliku z danymi i wysyłką cURL, używany do generowania requestu do https://api.remsopay.eu/pay/generate)
?>
// -- KONIEC pełnego kodu --
Przykłady
1) Wysłanie żądania (curl)
curl -X POST https://api.remsopay.eu/pay/generate \
-H "Content-Type: application/json" \
-d '{"email":"test@test.com","message":"test","amount":100,"method":"psc","accepted":"https://example.com/script","link":"remsooo","cel_tipply":"https://widgets.tipply.pl/TIPS_GOAL/",
"alert_tipply":"https://widgets.tipply.pl/TIP_ALERT/"}' -i
2) Odpowiedź 201 + nagłówek Location
Jeżeli API zwróci HTTP/1.1 201 Created, to w nagłówku Location powinna znajdować się gotowa do otwarcia strona płatności. Przykład w twoim skrypcie PHP pokazuje jak wyciągnąć header i otworzyć w nowej karcie.
Zalecenia bezpieczeństwa
- Używaj
hash_equals()do porównania HMAC (kod to robi — dobrze!). - Waliduj i sanitizuj otrzymane dane (typy i zakresy), aby uniknąć nieoczekiwanych wartości.
- Loguj nieudane próby weryfikacji i rozważ rate-limiting dla webhooków.
- Użyj TLS (HTTPS) wszędzie; nigdy nie akceptuj webhooków przez HTTP w produkcji.
Troubleshooting
Możliwe przyczyny:
- Inny sekret po stronie nadawcy vs. twojego serwera (najczęstsze).
- Inny porządek/składanie pól — upewnij się, że łańcuch danych jest dokładnie taki sam jak po stronie nadawcy.
- Zmiana encodingu (np. whitespace, newline). Normalizuj wartości przed hashowaniem.
Ważna uwaga
Ten kod jest projektem hobbystycznym i ma charakter demonstracyjny. Nie jest to oficjalna integracja Tipply ani RemsoPay. Przed użyciem w środowisku produkcyjnym zaleca się dokładne przetestowanie, audyt bezpieczeństwa oraz zapoznanie się z oficjalną dokumentacją Tipply i usług, z których korzystasz. Autorzy nie ponoszą odpowiedzialności za wszelkie szkody wynikające z użytkowania tego kodu.