Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Treść Premium po dokonaniu Płatności
Forum PHP.pl > Forum > Przedszkole
Skorpion96
Witam,
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:
  1. <?php
  2. $FORMULARZ = [
  3. "SEKRET" => "xxxxxxxxxx",
  4. "KWOTA" => "20",
  5. "NAZWA_USLUGI" => "Premium",
  6. "ADRES_WWW" => "https://moja-strona.pl/premium/sukces.php",
  7. "ID_ZAMOWIENIA" => "nm_10",
  8. "EMAIL" => "",
  9. "DANE_OSOBOWE" => "",
  10. ];
  11.  
  12. echo '<form id="order" action="https://platnosc.hotpay.pl/" method="post">';
  13. foreach ($FORMULARZ as $klucz=>$value){
  14. echo '<input name="'.$klucz.'" value="'.$value.'" type="hidden">';
  15. }
  16. // 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"])
  17.  
  18. echo '<input name="HASH" required value="'.hash("sha256", "HASLOZUSTAWIEN".";" . $FORMULARZ["KWOTA"] . ";" . $FORMULARZ["NAZWA_USLUGI"] . ";" . $FORMULARZ["ADRES_WWW"] . ";" . $FORMULARZ["ID_ZAMOWIENIA"] . ";" . $FORMULARZ["SEKRET"]).'" type="hidden">';
  19. echo '<button type="submit">DALEJ</button></form>';


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:
  1. <?php
  2. /*
  3. $_POST["KWOTA"] - wartość płatności
  4. $_POST["ID_PLATNOSCI"] - unikalne id płatności
  5. $_POST["ID_ZAMOWIENIA"] - id zamówienia podane podczas inicjacji
  6. $_POST["STATUS"] - FAILURE / SUCCESS / PENDING
  7. $_POST["SEKRET"] - sekret danej usługi
  8. $_POST["SECURE"] - oznaczenie bezpiecznej transakcji
  9. $_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"])
  10. */
  11. if(!empty($_POST)){
  12. if(!empty($_POST["KWOTA"]) &&
  13. !empty($_POST["ID_PLATNOSCI"]) &&
  14. !empty($_POST["ID_ZAMOWIENIA"]) &&
  15. !empty($_POST["STATUS"]) &&
  16. !empty($_POST["SEKRET"]) &&
  17. !empty($_POST["SECURE"]) &&
  18. !empty($_POST["HASH"])
  19. ){
  20. if(hash("sha256","HASLOZUSTAWIEN;".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SECURE"].";".$_POST["SEKRET"]) == $_POST["HASH"]){
  21. //komunikacja poprawna
  22. if($_POST["STATUS"]=="SUCCESS"){
  23. //płatność zaakceptowana
  24. echo "Płatność została poprawnie opłacona";
  25. // Zmienna do bazy danych
  26. }else if($_POST["STATUS"]=="FAILURE"){
  27. //odrzucone
  28. echo "Płatność zakończyła się błędem";
  29. // Zmienna do bazy danych
  30. }else if($_POST["STATUS"]=="PENDING"){
  31. //odrzucone
  32. echo "Płatność oczekuje na realizacje";
  33. // Zmienna do bazy danych
  34. }
  35. }
  36. }else{
  37. echo "BRAK WYMAGANYCH DANYCH";
  38. }
  39. }
mortus
Skoro zamówienie ma swoje ID, to pewnie trzeba sprawdzić, który użytkownik to zamówienie złożył.
uziom
możesz napisać kod PHP, który pobiera informacje z tabeli "pay_payer" na podstawie hash'a płatności i wyświetla odpowiednie dane na stronie.

  1. <?php
  2. // Pobierz hash płatności z URL-a lub z formularza
  3. $hash = $_REQUEST['hash'];
  4.  
  5. // Wykonaj zapytanie do bazy danych, aby pobrać informacje o płatności na podstawie hash'a
  6. $result = dbquery("SELECT * FROM pay_payer WHERE hash='$hash'");
  7.  
  8. // Sprawdź, czy zapytanie zostało wykonane poprawnie
  9. if (dbrows($result)) {
  10. // Pobierz dane płatności z wyniku zapytania
  11. $payment = dbarray($result);
  12.  
  13. // Sprawdź, czy status płatności to SUCCESS
  14. if ($payment['status'] == 'SUCCESS') {
  15. // Wyświetl informacje o płatności
  16. echo "<p>Płatność o wartości {$payment['kwota']} PLN została zakończona pomyślnie dnia {$payment['date_pay']}.</p>";
  17. } else {
  18. // Wyświetl informację o nieudanej płatności
  19. echo "<p>Płatność nie została zakończona pomyślnie.</p>";
  20. }
  21. } else {
  22. // Wyświetl informację o nieznalezieniu płatności
  23. echo "<p>Nie znaleziono płatności o podanym hash'u.</p>";
  24. }
  25. ?>


Kod ten pobiera hash płatności z URL-a lub z formularza, a następnie wykonuje zapytanie do bazy danych, aby pobrać informacje o płatności na podstawie hash'a. Jeśli zapytanie zostanie wykonane poprawnie, to pobierane są dane płatności i wyświetlane są na stronie w zależności od statusu płatności. Jeśli zapytanie zwróci błąd lub nie znajdzie płatności o podanym hash'u, wyświetlana jest odpowiednia informacja.

Pamiętaj, aby zmodyfikować kod w taki sposób, aby działał z twoją konkretną bazą danych oraz aby uwzględnić zabezpieczenia przed atakami typu SQL injection.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.