Staram się swoich sił w PHP i piszę na swoją stronę system płatności oparty o HotPay. Do tej pory udało mi się poprawnie wywołać płatność oraz notyfikację lecz mam problem z napisaniem odpowiedniego kodu do strony gdzie będzie wyświetlana wartość Premium czyli po dokonanej płatności.
Mam bazę z tabelą: pay_payer do której trafia cała notyfikacja z dokonanej płatności.
id | id_platnosci | id_zamowienia | status | hash | kwota | date_pay
1 | 5017d07eb1 | nm_10 | SUCCESS | 1d745... | 20 | 2023-03-05 15:55:26
Płatność wywołuję kodem:
<?php $FORMULARZ = [ "SEKRET" => "xxxxxxxxxx", "KWOTA" => "20", "NAZWA_USLUGI" => "Premium", "ADRES_WWW" => "https://moja-strona.pl/premium/sukces.php", "ID_ZAMOWIENIA" => "nm_10", "EMAIL" => "", "DANE_OSOBOWE" => "", ]; foreach ($FORMULARZ as $klucz=>$value){ } // 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">';
W w/w zmiennej gdzie jest ADRES_WWW to jest to adres powrotny na jaką użytkownik powraca po dokonaniu płatności.
I tutaj zaczynają się moje schody... potrzebuję aby użytkownik powracając na stronę https://moja-strona.pl/premium/sukces.php miał ukazaną wartość premium która dla zwykłego użytkownika jest niedostępna, od supportu HotPay dostałem tylko taką informację:
Cytat
Należy płatność powiązać z użytkownikiem, informacje o płatności są wysyłane kanałem niejawnym który nie jest dostępny dla zwykłego użytkownika, najłatwiejszym sposobem będzie dodać np. ID zamówienia -> podczas inicjalizacji ustawić np. sukces.php?=id_zamowienia=XXX -> użytkownik przeprowadza płatność i zostaje wysłana notyfikacja kanałem niejawnym -> powrót do sklepu to np. succes.php?=id_zamowienia=XXX -> należy sprawdzić czy zamówienie XXX zostało poprawnie opłacone, jeśli tak to można wyświetlić płatną zawartość.
I pytanie jak poprawnie skonstruować zapytanie/kod by połączyć te dane płatności z użytkownikiem oraz pokazywaie zawartości premium dla danego użytkownika... Niestety przykładowy skrypt notyfikacji dostępny w HoPay nie zwraca danych takich jak EMAIL czy DANE_OSOBOWE więc nie mam pomysłu jak mógłbym pod daną płatność przypisać jakiegoś użytkownika.
Poniżej przedstawiam przykładowy kod notyfikacji:
<?php /* $_POST["KWOTA"] - wartość płatności $_POST["ID_PLATNOSCI"] - unikalne id płatności $_POST["ID_ZAMOWIENIA"] - id zamówienia podane podczas inicjacji $_POST["STATUS"] - FAILURE / SUCCESS / PENDING $_POST["SEKRET"] - sekret danej usługi $_POST["SECURE"] - oznaczenie bezpiecznej transakcji $_POST["HASH"] - hash funkcji skrótu sha256, składającej się z hash("sha256","HASLOZUSTAWIEN;".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SECURE"].";".$_POST["SEKRET"]) */ ){ if(hash("sha256","HASLOZUSTAWIEN;".$_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 // Zmienna do bazy danych }else if($_POST["STATUS"]=="FAILURE"){ //odrzucone // Zmienna do bazy danych }else if($_POST["STATUS"]=="PENDING"){ //odrzucone // Zmienna do bazy danych } } }else{ } }