• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obsługa płatności hotpay

0 głosów
185 wizyt
pytanie zadane 13 września 2024 w PHP przez jorg123 Nowicjusz (160 p.)
edycja 13 września 2024 przez Arkadiusz Waluk

Cześć potrzebuje pomocy z platnosciami hotpay chce preslac jakos dane o id produktu i id uzytkownika co to kupił tylko jak to zrobic? w settings.php mam wszystkie dane potrzebne zeby dzilalo to na hostingu home.pl

moje kody

payment.php:

<?php

ini_set('display_errors', 1);

ini_set('display_startup_errors', 1);

error_reporting(E_ALL);

 

include 'settings.php';

session_start();

 

// Hasło do generowania hash z panelu HotPay

$HASH_Z_USTAWIEN = ".";

 

// Sprawdzenie, czy wszystkie wymagane dane zostały przesłane

if (!empty($_POST["KWOTA"]) &&

    !empty($_POST["ID_PLATNOSCI"]) &&

    !empty($_POST["ID_ZAMOWIENIA"]) &&

    !empty($_POST["USER_ID"]) &&  // STATUS jest tu używane jako ID użytkownika

    !empty($_POST["SEKRET"]) &&

    !empty($_POST["HASH"])) {

 

    // Generowanie hash dla weryfikacji

    $generated_hash = hash("sha256", $HASH_Z_USTAWIEN . ";" . $_POST["KWOTA"] . ";" . $_POST["ID_PLATNOSCI"] . ";" . $_POST["ID_ZAMOWIENIA"] . ";" . $_POST["STATUS"] . ";" . $_POST["SEKRET"]);

 

    // Porównanie wygenerowanego hash z otrzymanym

    if ($generated_hash === $_POST["HASH"]) {

        // Jeśli hash jest poprawny, sprawdź status płatności

        if ($_POST["STATUS"] === "SUCCESS") {

            // Płatność zaakceptowana, wykonaj odpowiednie akcje

            require_once "connect.php";

 

            // Połączenie z bazą danych

            $conn = new mysqli($host, $db_user, $db_password, $db_name);

 

            // Sprawdzenie połączenia

            if ($conn->connect_error) {

                die("Połączenie nieudane: " . $conn->connect_error);

            }

 

            // Walidacja `user_id`

            $user_id = (int)$_POST[USER_ID]

            $kurs_id = (int)$_POST["ID_PLATNOSCI"];  

 

            // Sprawdzenie, czy `user_id` istnieje w tabeli `uzytkownicy`

            $stmt_check = $conn->prepare("SELECT id FROM uzytkownicy WHERE id = ?");

            $stmt_check->bind_param("i", $user_id);

            $stmt_check->execute();

            $result = $stmt_check->get_result();

 

            if ($result->num_rows === 0) {

                // Jeśli `user_id` nie istnieje, zakończ skrypt z komunikatem o błędzie

                die("Błąd: Użytkownik o ID " . $user_id . " nie istnieje.");

            }

 

            $stmt_check->close();

 

            // Jeśli użytkownik istnieje, kontynuuj zapis zamówienia

            $zakup_date = date('Y-m-d H:i:s'); // Aktualna data i czas

 

            // Przygotowanie zapytania SQL do zapisania zakupu

            $stmt = $conn->prepare("INSERT INTO zakupy (user_id, kurs_id, zakup_date) VALUES (?, ?, ?)");

            if (!$stmt) {

                file_put_contents('payment_log.txt', "Błąd przygotowania zapytania: " . $conn->error . "\n", FILE_APPEND);

                die("Błąd przygotowania zapytania: " . $conn->error);

            }

 

            $stmt->bind_param("iis", $user_id, $kurs_id, $zakup_date);

 

            // Wykonanie zapytania

            if ($stmt->execute()) {

                echo "success ";  // Sukces - dane zostały zapisane

            } else {

                file_put_contents('payment_log.txt', "Błąd zapisu danych: " . $stmt->error . "\n", FILE_APPEND);

                echo "Wystąpił błąd podczas zapisywania danych.";

            }

 

            // Zamknięcie połączenia

            $stmt->close();

            $conn->close();

 

            file_put_contents('payment_log.txt', "Płatność zaakceptowana: Zamówienie ID " . $_POST["ID_ZAMOWIENIA"] . " User id: " . $user_id . "\n", FILE_APPEND);

        } elseif ($_POST["STATUS"] === "FAILURE") {

            // Płatność odrzucona

            file_put_contents('payment_log.txt', "Płatność odrzucona: Zamówienie ID " . $_POST["ID_ZAMOWIENIA"] . "\n", FILE_APPEND);

        }

    } else {

        // Błędny hash

        file_put_contents('payment_log.txt', "Błędny hash: Zamówienie ID " . $_POST["ID_ZAMOWIENIA"] . "\n", FILE_APPEND);

    }

} else {

    // Brak wymaganych danych

    file_put_contents('payment_log.txt', "Brak wymaganych danych dla zamówienia\n", FILE_APPEND);

}

?>



formularz z strony zamowienia:

<form id="order" action="https://platnosc.hotpay.pl/" method="post">

     <!-- Sekret usługi z panelu HotPay -->

     <input required name="SEKRET" value="," type="hidden">

 

    <!-- Kwota do zapłaty -->

    <!-- Kwota do zapłaty -->

    <input required name="KWOTA" id="kwota-do-zaplaty" value="<?php echo number_format((float)$cena, 2, '.', ''); ?>" type="hidden">

 

    <!-- Nazwa usługi/produktu -->

    <input required name="NAZWA_USLUGI" id="nazwa-uslugi" value="<?php echo htmlspecialchars($nazwa); ?>" type="hidden">

 

    <!-- Identyfikator zamówienia (ID produktu) -->

    <input required name="ID_ZAMOWIENIA" value="<?php echo (int)$product_id; ?>" type="hidden">

 

    <!-- ID użytkownika -->

    <input required name="USER_ID" value="<?php echo (int)$user_id; ?>" type="hidden">

 

    <!-- Opcjonalnie: Email klienta -->

    <input name="EMAIL" id="klient-email" value="klient@example.com" type="hidden">

 

    <!-- Przycisk do zatwierdzenia płatności -->

    <button type="submit" class="pay-btn" id="pay-button">ZAPŁAĆ</button>

</form>

2 odpowiedzi

0 głosów
odpowiedź 13 września 2024 przez AnimaVillis Stary wyjadacz (13,410 p.)
Sprawdzałeś może w oficjalnej dokumentacji od hotpay?
https://dokumentacja.hotpay.pl/
0 głosów
odpowiedź 13 września 2024 przez Wiciorny Ekspert (281,250 p.)

Masz błąd w lini 77 w odwołaniu 
 

        $user_id = (int)$_POST[USER_ID]
zamiast 
        $user_id = (int)$_POST["USER_ID"]

sprawdź co zwracane jest jako HASH, i w którym momencie program się gubi, najlepiej przedebuguj, byc może odwołanie do tworzenia hashu i porównanie go do aktualnego jest nieprawdiłowe ? 
 

Podobne pytania

0 głosów
1 odpowiedź 754 wizyt
pytanie zadane 15 listopada 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
+1 głos
1 odpowiedź 424 wizyt
+1 głos
1 odpowiedź 3,263 wizyt
pytanie zadane 22 maja 2021 w PHP przez Kamil423 Początkujący (350 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...