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.

Metoda: POST
Content-Type: application/json

Endpointy

ŚcieżkaOpisKod odpowiedzi
https://api.remsopay.eu/pay/generateGeneruje żą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

Troubleshooting

Problem: HMAC nie pasuje

Możliwe przyczyny:

  1. Inny sekret po stronie nadawcy vs. twojego serwera (najczęstsze).
  2. Inny porządek/składanie pól — upewnij się, że łańcuch danych jest dokładnie taki sam jak po stronie nadawcy.
  3. 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.