Przejdź do treści

Przelewy

Wprowadzenie

Niniejsza dokumentacja dotyczy implementacji systemu pay by link (PBL) na zewnętrznej stronie sprzedawcy. PBL umożliwia płatność za pośrednictwem linku. Płatność odbywa się według poniższego schematu:

  • Wybór produktu, który interesuje klienta.
  • Dodanie produktu do koszyka.
  • Przejście na stronę płatności za pośrednictwem linku wyposażonego w odpowiednie zmienne przesyłane kanałem niejawnym do formularza płatności HotPay.
  • Uzupełnienie podstawowych danych oraz wybór banku.
  • Przeniesienie klienta na stronę banku.
  • Zlecenie płatności w banku klienta.
  • Zakończenie procesu płatności oraz przekierowanie klienta na stronę sklepu.

Implementacja systemu płatności będzie się zatem odbywała na zasadzie przygotowania odpowiedniego łącza i wyposażenie go w odpowiednie zmienne, które zostaną przekazane do formularza płatności HotPay

Rejestracja konta w HotPay

W celu zgłoszenia serwisu lub sklepu, w ramach którego przyjmowane będą płatności, konieczne jest posiadanie konta w systemie HotPay.pl. W celu założenia konta należy kolejno:

  • Otworzyć podstronę: https://hotpay.pl/rejestracja/.
  • Wypełnić dane rejestracyjne, tj.: adres e-mail, hasło, typ konta (prywatne, firmowe, charytatywne).
  • Uzupełnić dane osobowe i adresowe (poprawność danych będzie weryfikowana w późniejszym etapie).
  • Aktywować konto przelewem w wysokości 10 PLN, dokonanym z konta bankowego zarejestrowanego na dane podane w formularzu rejestracyjnym. Aktywacja konta trwa około 24 godzin ze względu na godziny graniczne księgowania przelewów w różnych bankach.

Rejestracja serwisu

Serwis jest miejscem, w którym wykorzystywany będzie system PBL. Przed uzyskaniem dostępu do systemu każdy serwis musi zostać zaakceptowany przez HotPay. Zgłoszenie serwisu odbywa się przy uczestnictwie prostego formularza zlokalizowanego na tej podstronie: https://hotpay.pl/przelewy_sklep_nowy/. Pola, które należy wypełnić to:

  • Nazwa serwisu – wewnętrzna nazwa używana w identyfikacji serwisu w HotPay oraz komunikowana klientowi podczas dokonywania płatności;
  • Opis – opis usługi na potrzeby weryfikacji serwisu;
  • Adres URL serwisu – w ramach którego będzie wykorzystywany system PBL;
  • Regulamin serwisu – link do regulaminu sklepu przeznaczony dla konsumentów korzystających z usług sprzedawcy;
  • Obsługa klienta – email – adres poczty elektronicznej, gdzie klienci mogą się kontaktować z podmiotem odpowiedzialnym za świadczoną usługę;
  • Obsługa klienta – telefon – numer telefonu, pod którym klienci mogą kontaktować się z podmiotem odpowiedzialnym za świadczoną usługę. Po wysłaniu tego formularza system HotPay prześle na adres zarejestrowany przy zakładaniu konta email z linkiem potwierdzającym chęć zawarcia umowy na obsługę przelewów w serwisie. Po potwierdzeniu woli zawarcia umowy – serwis trafi do akceptacji po stronie HotPay.

Lista aktualnych serwisów oraz ich statusy znajdują się na poniżej zalinkowanej podstronie: https://hotpay.pl/przelewy_sklep_lista/.

Konfiguracja serwisu

Przed przystąpieniem do wdrażania systemu w ramach serwisu należy go najpierw skonfigurować. Jeśli serwis został zaakceptowany przez HotPay na podstronie z listą serwisów pojawi się jego pozycja. W celu konfiguracji należy kliknąć znaczek plusa w pierwszej kolumnie tabeli. Ukaże się sekret usługi używany do uwierzytelniania komunikacji oraz łącze „Pokaż więcej”, w które należy kliknąć. W ramach widoku, który ukaże się po kliknięciu na w/w przycisk będą dostępne następujące karty:

  • lista transakcji;
  • ustawienia:
  • adres notyfikacji – adres URL, na który zostaną przesłane notyfikacje o nowych transakcjach;
  • hasło notyfikacji – tajne hasło wykorzystane w generowaniu ID uwierzytelniającego pochodzenie notyfikacji oraz samą transakcję;
  • API – czysty kod – przykładowy kod implementujący płatność w systemie PBL.

API

API z walidacją parametrów

sequenceDiagram
  autonumber
  Klient->>Sprzedawca: Zamówienie
  Sprzedawca->>HotPay: Jawna inicjalizacja płatności
  loop Procesowanie płatności
      HotPay->>HotPay: Klient przeprowadza płatność
  end
  HotPay-->>Sprzedawca: Wysłanie notyfikacji
  Note over Sprzedawca: Weryfikacja płatności
  HotPay->>Sprzedawca: Powrót klienta do sklepu

Inicjalizacja płatności

Przekierowanie do panelu transakcyjnego

Adres URL: https://platnosc.hotpay.pl/
Content-Type: multipart/form-data
Dostępne metody: POST/GET

Opis użycia

Zmienna Wymagane Opis zmiennej
SEKRET TAK Kod sekret do pobrania z panelu HotPay generowany dla każdego serwisu.
KWOTA TAK Kwota wywoływanej płatności.
NAZWA_USLUGI TAK Nazwa usługi/towaru
ADRES_WWW NIE Adres URL powrotu
ID_ZAMOWIENIA TAK Identyfikator zamówienia po stronie serwisu – nadawany przez właściciela serwisu. Ciąg znaków przesyłany w tej zmiennej nie może być dłuższy niż 64 znaki.
EMAIL NIE Email klienta
DANE_OSOBOWE NIE Dane osobowe klienta
HASH TAK HASH funkcji skrótu sha256, składającej się z elementów: "HASLOZUSTAWIEN".";" . $FORMULARZ["KWOTA"] . ";" . $FORMULARZ["NAZWA_USLUGI"] . ";" . $FORMULARZ["ADRES_WWW"] . ";" . $FORMULARZ["ID_ZAMOWIENIA"] . ";" . $FORMULARZ["SEKRET"]
<?php
$FORMULARZ = [
"SEKRET" => "XXX,",
"KWOTA" => "1",
"NAZWA_USLUGI" => "XXX",
"ADRES_WWW" => "https://hotpay.pl",
"ID_ZAMOWIENIA" => "XXX",
"EMAIL" => "",
"DANE_OSOBOWE" => "",
];

echo '<form id="order" action="https://platnosc.hotpay.pl/" method="post">';
foreach ($FORMULARZ as $klucz=>$value){
    echo '<input name="'.$klucz.'" value="'.$value.'" type="hidden">';
}
// HASH funkcji skrótu sha256, składającej się z hash("sha256","HASLOZUSTAWIEN".";" . $FORMULARZ["KWOTA"] . ";" . $FORMULARZ["NAZWA_USLUGI"] . ";" . $FORMULARZ["ADRES_WWW"] . ";" . $FORMULARZ["ID_ZAMOWIENIA"] . ";" . $FORMULARZ["SEKRET"])

echo '<input name="HASH" required value="'.hash("sha256", "HASLOZUSTAWIEN".";" . $FORMULARZ["KWOTA"] . ";" . $FORMULARZ["NAZWA_USLUGI"] . ";" . $FORMULARZ["ADRES_WWW"] . ";" . $FORMULARZ["ID_ZAMOWIENIA"] . ";" . $FORMULARZ["SEKRET"]).'" type="hidden">';
echo '<button type="submit">DALEJ</button></form>';                        

Odbiór notyfikacji

Notyfikacje są wysyłane metodą POST typu form-data na adres WWW podany w ustawieniach usługi.

Uwaga

Pamiętaj o weryfikacji danych przychodzących.

Uwaga

Notyfikacje są wysyłane z góry ustalonych adresów IP, prosimy dodać je do whitelisty:

  • 18.197.55.26
  • 3.126.108.86
  • 3.64.128.101
  • 18.184.99.42
  • 3.72.152.155
  • 35.159.7.168

Opis użycia

Zmienna Opis zmiennej
SEKRET Kod sekret do pobrania z panelu HotPay generowany dla każdego serwisu.
KWOTA Kwota wywoływanej płatności.
STATUS Status płatności: SUCCESS – płatność zaakceptowana; PENDING – płatność oczekująca; FAILURE – płatność odrzucona.
ID_ZAMOWIENIA Identyfikator zamówienia po stronie serwisu – nadawany przez właściciela serwisu. Ciąg znaków przesyłany w tej zmiennej nie może być dłuższy niż 64 znaki.
ID_PLATNOSCI Unikalny identyfikator płatności
SECURE Identyfikator bezpiecznej transakcji
HASH HASH funkcji skrótu sha256, składającej się z elementów: HASLO_Z_USTAWIEN.";".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SECURE"].";".$_POST["SEKRET"]
<?php
    $HASLO_Z_USTAWIEN="XXX";
    if(!empty($_POST["KWOTA"]) &&
    !empty($_POST["ID_PLATNOSCI"]) &&
    !empty($_POST["ID_ZAMOWIENIA"]) &&
    !empty($_POST["STATUS"]) &&
    !empty($_POST["SEKRET"]) &&
    !empty($_POST["SECURE"]) &&
    !empty($_POST["HASH"])
    ){
    if(hash("sha256",$HASLO_Z_USTAWIEN.";".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SECURE"].";".$_POST["SEKRET"]) == $_POST["HASH"]){
    //komunikacja poprawna
        if($_POST["STATUS"]=="SUCCESS"){
            //płatność zaakceptowana
            }else if($_POST["STATUS"]=="FAILURE"){
                //odrzucone
         }
        }
    } 

API zaawansowane z walidacją parametrów

sequenceDiagram
  autonumber
  Klient->>Sprzedawca: Zamówienie
  Sprzedawca->>HotPay: Rejestracja transakcji
  HotPay->>Sprzedawca: Otrzymanie odpowiedzi
  Sprzedawca->>HotPay: Przekierowanie klienta
  loop Procesowanie płatności
      HotPay->>HotPay: Klient przeprowadza płatność
  end
  HotPay-->>Sprzedawca: Wysłanie notyfikacji
  Note over Sprzedawca: Weryfikacja płatności
  HotPay->>Sprzedawca: Powrót klienta do sklepu

Inicjalizacja płatności

Przekierowanie do panelu transakcyjnego

Adres URL: https://platnosc.hotpay.pl/
Content-Type: multipart/form-data
Dostępne metody: POST/GET

Opis użycia

Zmienna Wymagane Opis zmiennej
SEKRET TAK Kod sekret do pobrania z panelu HotPay generowany dla każdego serwisu.
KWOTA TAK Kwota wywoływanej płatności.
NAZWA_USLUGI TAK Nazwa usługi/towaru
ADRES_WWW NIE Adres URL powrotu
ID_ZAMOWIENIA TAK Identyfikator zamówienia po stronie serwisu – nadawany przez właściciela serwisu. Ciąg znaków przesyłany w tej zmiennej nie może być dłuższy niż 64 znaki.
TYP TAK Wartość: INIT
EMAIL NIE Email klienta
DANE_OSOBOWE NIE Dane osobowe klienta
HASH TAK HASH funkcji skrótu sha256, składającej się z elementów: "HASLOZUSTAWIEN".";" . $FORMULARZ["KWOTA"] . ";" . $FORMULARZ["NAZWA_USLUGI"] . ";" . $FORMULARZ["ADRES_WWW"] . ";" . $FORMULARZ["ID_ZAMOWIENIA"] . ";" . $FORMULARZ["SEKRET"]
<?php  
$HASLO_Z_USTAWIEN="XXX";

$FORMULARZ = [
"SEKRET" => "XXX,",
"KWOTA" => "1",
"NAZWA_USLUGI" => "XXX",
"ADRES_WWW" => "https://hotpay.pl",
"ID_ZAMOWIENIA" => "XXX",
"EMAIL" => "",
"DANE_OSOBOWE" => "",
"TYP" => "INIT",
];

$FORMULARZ["HASH"]=hash("sha256", $HASLO_Z_USTAWIEN . ";" . $FORMULARZ["KWOTA"] . ";" . $FORMULARZ["NAZWA_USLUGI"] . ";" . $FORMULARZ["ADRES_WWW"] . ";" . $FORMULARZ["ID_ZAMOWIENIA"] . ";" . $FORMULARZ["SEKRET"]);
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"https://platnosc.hotpay.pl/");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$FORMULARZ);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
if(!empty($server_output)){
    $JSON=json_decode($server_output,true);
    if(!empty($JSON["STATUS"])){
    if($JSON["STATUS"] == true){
        echo '<a href="'.$JSON["URL"].'">Zapłać</a>';
    }else{
        // BŁĄD
        echo $JSON["WIADOMOSC"];
    }
    }
}      
import axios from "axios";
import { createHash } from 'node:crypto'

let FORMULARZ = {
    "SEKRET" : "XXX,",
    "KWOTA" : "1",
    "NAZWA_USLUGI" : "XXX",
    "ADRES_WWW" : "https://hotpay.pl",
    "ID_ZAMOWIENIA" : "XXX",
    "EMAIL" : "",
    "DANE_OSOBOWE" : "",
    "TYP" : "INIT"
};

const form = new FormData();
form.append("KWOTA", FORMULARZ.KWOTA);
form.append("NAZWA_USLUGI", FORMULARZ.NAZWA_USLUGI);
form.append("ADRES_WWW", FORMULARZ.ADRES_WWW);
form.append("ID_ZAMOWIENIA", FORMULARZ.ID_ZAMOWIENIA);
form.append("SEKRET", FORMULARZ.SEKRET);
form.append("TYP", "INIT");
form.append("HASH", createHash('sha3-256').update("HASLO_Z_USTAWIEN"+";"+FORMULARZ.KWOTA+";"+FORMULARZ.NAZWA_USLUGI+";"+FORMULARZ.ADRES_WWW+";"+FORMULARZ.ID_ZAMOWIENIA+";"+FORMULARZ.SEKRET).digest('hex'));
const options = {
method: 'POST',
url: 'https://platnosc.hotpay.pl/',
headers: {'Content-Type': 'multipart/form-data;'},
data: '[form]'
};
axios.request(options).then(function (response) {
    try {
    var ob = JSON.parse(response.data);
        if (ob && typeof ob === "object") {
           if(ob.STATUS){
            console.log("ADRES PLATNOSCI: "+ob.URL);
           }
        }
    }
    catch (e) {
        console.log(response.data);
        console.log(e);
    }


}).catch(function (error) {
console.error(error);
});

Odbiór notyfikacji

Notyfikacje są wysyłane metodą POST typu form-data na adres WWW podany w ustawieniach usługi.

Uwaga

Pamiętaj o weryfikacji danych przychodzących.

Uwaga

Notyfikacje są wysyłane z góry ustalonych adresów IP, prosimy dodać je do whitelisty:

  • 18.197.55.26
  • 3.126.108.86
  • 3.64.128.101
  • 18.184.99.42
  • 3.72.152.155
  • 35.159.7.168

Opis użycia

Zmienna Opis zmiennej
SEKRET Kod sekret do pobrania z panelu HotPay generowany dla każdego serwisu.
KWOTA Kwota wywoływanej płatności.
STATUS Status płatności: SUCCESS – płatność zaakceptowana; PENDING – płatność oczekująca; FAILURE – płatność odrzucona.
ID_ZAMOWIENIA Identyfikator zamówienia po stronie serwisu – nadawany przez właściciela serwisu. Ciąg znaków przesyłany w tej zmiennej nie może być dłuższy niż 64 znaki.
ID_PLATNOSCI Unikalny identyfikator płatności
SECURE Identyfikator bezpiecznej transakcji
HASH HASH funkcji skrótu sha256, składającej się z elementów: HASLO_Z_USTAWIEN.";".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SECURE"].";".$_POST["SEKRET"]
<?php
    $HASLO_Z_USTAWIEN="XXX";
    if(!empty($_POST["KWOTA"]) &&
    !empty($_POST["ID_PLATNOSCI"]) &&
    !empty($_POST["ID_ZAMOWIENIA"]) &&
    !empty($_POST["STATUS"]) &&
    !empty($_POST["SEKRET"]) &&
    !empty($_POST["SECURE"]) &&
    !empty($_POST["HASH"])
    ){
    if(hash("sha256",$HASLO_Z_USTAWIEN.";".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SECURE"].";".$_POST["SEKRET"]) == $_POST["HASH"]){
    //komunikacja poprawna
        if($_POST["STATUS"]=="SUCCESS"){
            //płatność zaakceptowana
            }else if($_POST["STATUS"]=="FAILURE"){
                //odrzucone
         }
        }
    } 

API bez walidacji

sequenceDiagram
  autonumber
  Klient->>Sprzedawca: Zamówienie
  Sprzedawca->>HotPay: Jawna inicjalizacja płatności
  loop Procesowanie płatności
      HotPay->>HotPay: Klient przeprowadza płatność
  end
  HotPay-->>Sprzedawca: Wysłanie notyfikacji
  Note over Sprzedawca: Weryfikacja płatności
  HotPay->>Sprzedawca: Powrót klienta do sklepu

Inicjalizacja płatności

Przekierowanie do panelu transakcyjnego

Adres URL: https://platnosc.hotpay.pl/
Content-Type: multipart/form-data
Dostępne metody: POST/GET

Opis użycia

Zmienna Wymagane Opis zmiennej
SEKRET TAK Kod sekret do pobrania z panelu HotPay generowany dla każdego serwisu.
KWOTA TAK Kwota wywoływanej płatności.
NAZWA_USLUGI TAK Nazwa usługi/towaru
ADRES_WWW NIE Adres URL powrotu
ID_ZAMOWIENIA TAK Identyfikator zamówienia po stronie serwisu – nadawany przez właściciela serwisu. Ciąg znaków przesyłany w tej zmiennej nie może być dłuższy niż 64 znaki.
EMAIL NIE Email klienta
DANE_OSOBOWE NIE Dane osobowe klienta
<form id="order" action="https://platnosc.hotpay.pl/" method="post">
<input required name="SEKRET" value="SEKRET_USLUGI"
type="hidden">
<input required name="KWOTA" value="1" type="hidden">
<input required name="NAZWA_USLUGI" value="XXX"
type="hidden">
<input required name="ADRES_WWW" value="XXX" type="hidden">
<input required name="ID_ZAMOWIENIA" value="XXX"
type="hidden">
<input name="EMAIL" value="" type="hidden">
<input name="DANE_OSOBOWE" value="" type="hidden">
<button type="submit">DALEJ</button>
</form> 

Odbiór notyfikacji

Notyfikacje są wysyłane metodą POST typu form-data na adres WWW podany w ustawieniach usługi.

Uwaga

Pamiętaj o weryfikacji danych przychodzących.

Uwaga

Notyfikacje są wysyłane z góry ustalonych adresów IP, prosimy dodać je do whitelisty:

  • 18.197.55.26
  • 3.126.108.86
  • 3.64.128.101
  • 18.184.99.42
  • 3.72.152.155
  • 35.159.7.168

Opis użycia

Zmienna Opis zmiennej
SEKRET Kod sekret do pobrania z panelu HotPay generowany dla każdego serwisu.
KWOTA Kwota wywoływanej płatności.
STATUS Status płatności: SUCCESS – płatność zaakceptowana; PENDING – płatność oczekująca; FAILURE – płatność odrzucona.
ID_ZAMOWIENIA Identyfikator zamówienia po stronie serwisu – nadawany przez właściciela serwisu. Ciąg znaków przesyłany w tej zmiennej nie może być dłuższy niż 64 znaki.
ID_PLATNOSCI Unikalny identyfikator płatności
HASH HASH funkcji skrótu sha256, składającej się z elementów: HASLO_Z_USTAWIEN.";".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SEKRET"]
<?php
    $HASLO_Z_USTAWIEN="XXX";
    if(!empty($_POST["KWOTA"]) &&
    !empty($_POST["ID_PLATNOSCI"]) &&
    !empty($_POST["ID_ZAMOWIENIA"]) &&
    !empty($_POST["STATUS"]) &&
    !empty($_POST["SEKRET"]) &&
    !empty($_POST["HASH"])
    ){
    if(hash("sha256",$HASLO_Z_USTAWIEN.";".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SEKRET"]) == $_POST["HASH"]){
    //komunikacja poprawna
        if($_POST["STATUS"]=="SUCCESS"){
            //płatność zaakceptowana
            }else if($_POST["STATUS"]=="FAILURE"){
                //odrzucone
         }
        }
    }