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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions