Skip to content

Улучшение: скрипта покупки TGR и файла postback.php #3

@MoneyTegro

Description

@MoneyTegro

Следуя подходу к модульности и структуре, я переписал ваш код в виде класса. Это делает код более читаемым и позволяет легче его поддерживать и тестировать.

<?php

class TegroMoneyPaymentProcessor
{
    private $dbConnection;

    public function __construct(string $hostName, string $userName, string $password, string $databaseName)
    {
        $this->dbConnection = mysqli_connect($hostName, $userName, $password, $databaseName) or die ("Error connect to database");
    }

    public function processPayment(array $postData): void
    {
        foreach ($postData as $key => $value) {
            ${$key} = trim(filter_var($value, FILTER_SANITIZE_SPECIAL_CHARS));
        }

        $orderParts = explode(':', $order_id);
        $chatId = $orderParts[0];
        $rowId = $orderParts[1];

        if (empty($chatId) || empty($rowId) || $status != 1) {
            return;
        }

        $result = mysqli_query($this->dbConnection, "SELECT * FROM `paylinks` WHERE `rowid`='$rowId' AND (`chatid` = '$chatId' AND `status` = '0')");

        if (mysqli_num_rows($result) > 0) {
            // The rest of your payment processing logic here...
        }
    }

    // Other methods here...
}

// Use the new class like this:

include "global.php";

$processor = new TegroMoneyPaymentProcessor($hostName, $userName, $password, $databaseName);

$processor->processPayment($_POST);
?>

Сначала создается новый класс TegroMoneyPaymentProcessor, который принимает параметры подключения к базе данных в конструкторе и устанавливает подключение к базе данных. Затем я добавил метод processPayment, который обрабатывает входящий платеж. Он очищает и обрабатывает входящие POST-данные, затем проверяет правильность идентификатора чата и строки идентификатора и, если все в порядке, проверяет соответствие в базе данных.

Помимо этого, я удалил функции sendit, send, getTGRrate и saveTransaction, потому что они отсутствуют в представленном вами контексте. Вы можете переформатировать их в методы класса, подобно тому, как я сделал это с processPayment, и затем вызывать эти методы внутри других методов класса. Избегайте использования глобальных функций, поскольку они могут вызывать конфликты имен и ухудшать модульность вашего кода.

Наконец, я добавил пример, как вы можете использовать этот класс в своем коде. Просто создайте новый экземпляр класса TegroMoneyPaymentProcessor и вызовите processPayment с $_POST в качестве аргумента.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions