Problem z skryptem płatności php

ArcherQ | 2021-02-17 10:25:39 UTC | #1

Witam,
mam problem bo skrypt od płatności nie wykonuję się po operacji

W sensie płatność normalnie dokonuje ale już po wykonaniu płatności nic się nie dzieje,biała strona, nie daje wpisu do mysqla ze ktoś zakupił cokolwiek

tak jak by się zacinał w jakimś momencie

ktoś coś?
tutaj daje skrypt:

<?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["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["SEKRET"])
*/                      
if(!empty($_POST["KWOTA"]) &&
    !empty($_POST["ID_PLATNOSCI"]) &&
    !empty($_POST["ID_ZAMOWIENIA"]) &&
    !empty($_POST["STATUS"]) &&
    !empty($_POST["SEKRET"]) &&
    !empty($_POST["HASH"])
    ){
    if(hash("sha256","xxx;".$_POST["KWOTA"].";".$_POST["ID_PLATNOSCI"].";".$_POST["ID_ZAMOWIENIA"].";".$_POST["STATUS"].";".$_POST["SEKRET"]) == $_POST["HASH"]){
        //komunikacja poprawna
         if($_POST["STATUS"]=="SUCCESS"){
            $servername = "xxx";
            $username = "xxx";
            $password = "xxx";
            $dbname = "xxx";
            $illegal = "#$%^&*()+=-[]'`;,./{}|:<>?~";
            if(false !== strpbrk($_POST["ID_ZAMOWIENIA"], $illegal)) {
                header('Location: https://firecore.eu/sklep/false');
                exit();
                return;
            }

            try {
                $milliseconds = round(microtime(true) * 1000);
                $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
                // set the PDO error mode to exception
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $diamonds = $_POST['KWOTA']*10;
                $diamonds = $diamonds+intval($diamonds*0.5);
                $sql = "INSERT INTO `payments` (`name`, `value`, `buy_time`)
                VALUES ('".$_POST['ID_ZAMOWIENIA']."', '".$diamonds."', '".$milliseconds."')";
                // use exec() because no results are returned
                $conn->exec($sql);
                header('Location: https://firecore.eu/sklep/true');
                exit();
                }
            catch(PDOException $e)
                {
                    header('Location: https://firecore.eu/sklep/false');
                    exit();
                }

            $conn = null;
        }else if($_POST["STATUS"]=="FAILURE"){
            header('Location: https://firecore.eu/sklep/false');
            exit();
        }
    }
    }

psycho | 2019-11-05 22:53:52 UTC | #2

Nie wiem, może jestem ślepy, ale nie widzę tu w ogóle jakiegoś odwołania do serwisu płatności czy czegoś co ma te płatności obsługiwać. Nie rozumiem też dawania return; po exit();. Sam skrypt też jest napisany bardzo słabo i zalecałbym jego poprawę. Na początek zacznij od usunięcia w success ten return; po exit();.

//EDIT:

Jako, że link do strony jest podany w poście pozwoliłem sobie sprawdzić to ,,na własnej skórze” (oczywiście bez płatności) i odkryłem kilka rzeczy, które nie powinny mieć miejsca. Dla bezpieczeństwa całego serwisu nie będę podawał ich do wiadomości publicznej. Autor może dowiedzieć się w ramach potrzeby po napisaniu do mnie prywatnie.


ArcherQ | 2019-11-08 15:05:26 UTC | #3

no już napisałem na pv


system | 2021-02-17 10:25:43 UTC | #5

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.