Как использовать HTTP:PostAsync () для отправки JSON данных на мой сервер? (Roblox) - PullRequest
0 голосов
/ 03 апреля 2020

Итак, я понимаю, как работает GetAsyn c, и на моем сервере есть сценарии, которые работают с тем, что я пытаюсь выполнить sh. Но с точки зрения получения данных на сервер вместо чтения с json, как бы я это сделал? На стороне сервера мой сценарий PHP, который получает все данные поста из отправленного JSON и проверяет базу данных со всей информацией, а если ее нет, он вставляет ее. (Это система запретов. Но я не уверен, правильно ли я настроил сторону роблокса или правильно ли настроен сервер. Вот мой код:

Это работает в Custom Adonis Admin System

SendWebBan = function(plr,UserID,Username,Agent,Comment)
            local http = game:GetService("HttpService")
            local Reason = "Banned in game by AAC Admin."
            local url = "URL HERE/gamebanlistener.php"
            local data = {
                ["UserID"] = UserID,
                ["Username"] = Username,
                ["Agent"] = Agent,
                ["Reason"] = Reason,
                ["Comment"] = Comment
            }

            local encode = http:JSONEncode(data)


            local reponse,err = pcall(function()
                http:PostAsync(url,encode)
            end)

            print(reponse)

            if reponse == "false" then
                Remote.MakeGui(plr,"Notification",{
                    Title = "Failed";
                    Message = "Ban Failed";
                    Duration = 10;
                })
            elseif reponse == "true" then
                Remote.MakeGui(plr,"Notification",{
                    Title = "Success";
                    Message = "Ban Successful";
                    Duration = 10;
                })
            else
                Remote.MakeGui(plr,"Notification",{
                    Title = "Failed";
                    Message = "Ban Failed";
                    Duration = 10;
                })
            end
        end;
<?php
    $ServerKey = "key here";
    $APIKey = $_POST["key"];
    $Data = json_decode($_POST['data']);
    $UserID = $Data.UserID;
    $Username = $Data.Username;
    $Agent = $Data.Agent;
    $Reason = $Data.Reason;
    $Comment = $Data.Comment;

    $Date = date("d/m/Y");
    if($APIKey == $ServerKey){
       //$conn = mysqli_connect($host,$dbuser,$dbpassword,$db);
        $Connection = mysqli_connect(sql credentials here);

    if($Connection->connect_errno)
    {
        echo('{"Status":"'. $Connection->connect_errno . '"}');
    }else {
        $BlacklResult = $Connection->query("SELECT * FROM bans"); //Blacklist is the name of my Bans database

        if($BlacklResult->num_rows > 0)
        {
            while($Row = $BlacklResult->fetch_assoc()){
                if($Row != null){
                    if($Row["UserID"] == $UserID){
                     echo 'Status:false';
                     return;
                    }else{
                     $Connection->query("INSERT INTO bans(UserID, Username, Agent, BanReason, BanComment,DateOfBan) VALUES(".$UserID.",".$Username.",".$Agent.",".$Reason.",".$Comment.",".$Date.");");
                     echo 'Status:true';
                    }
                };
            };
        };

        };
    }else {
        echo('{"Status":"API KEY"}');
    };
?>

1 Ответ

0 голосов
/ 03 апреля 2020

Когда вы вызываете функцию, возвращается кортеж bool, за которым следует результат функции. Если функция выдает ошибку, результат заменяется строкой ошибки. Попробуйте сделать это изменение:

local success, result = pcall(function()
    return http:PostAsync(url,encode)
end)

print(success, result)

if success then
    -- request went through, parse the response from your endpoint
else
    -- parse the http error
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...