Php requete Token Oauth2

Bonjour,

Je voudrais que les utilisateurs de mon site se connecte via leur compte Discord.
J'ai créer une application

Documentation discord Oauth2: https://discord.com/developers/docs/topics/oauth2

donc j'ai ma page 'http://monsite/index.php' avec le bouton login.
<a href="https://discordapp.com/api/oauth2/authorize?client_id=12316489832164315&redirect_uri=http://monsite/login.php&response_type=code&scope=identify+email">Login</a>

Le bouton login redirige vers la demande d'autorisation Discord qui renvoie à "http://monsite/login.php".
l'autorisation transmet '?code=frhzfkj5165ejhfzjehfe'.

La page 'http://monsite/login.php'
           $code = $_GET["code"];
            if (isset($_GET["error"])) {
                echo json_encode(array("message" => "Authorization Error"));
            } elseif (isset($code)) {
                $redirect_uri = "login.php";
                $token_request = "https://discordapp.com/api/oauth2/token";
                
                $token = curl_init();
                curl_setopt_array($token, array(
                    CURLOPT_URL => $token_request,
                    CURLOPT_POST => 1,
                    CURLOPT_POSTFIELDS => array(
                        "grant_type" => "authorization_code",
                        "client_id" => "12316489832164315",
                        "client_secret" => "KJejdemJHF2KJEJNFEMFJNFE-Hub",
                        "redirect_uri" => $redirect_uri,
                        "code" => $code,
                    )
                ));
                curl_setopt($token, CURLOPT_RETURNTRANSFER, true);
                $resp = json_decode(curl_exec($token));
                curl_close($token);
                if (isset($resp->access_token)) {
                    $access_token = $resp->access_token;
                    $info_request = "https://discordapp.com/api/users/@me";
                    $info = curl_init();
                    curl_setopt_array($info, array(
                        CURLOPT_URL => $info_request,
                        CURLOPT_HTTPHEADER => array(
                            "Authorization: Bearer {$access_token}"
                        ),
                        CURLOPT_RETURNTRANSFER => true
                    ));
                    $user = json_decode(curl_exec($info));
                    curl_close($info);
                    echo "<h1>Hello, {$user->username}#{$user->discriminator}.</h1><br><h2>{$user->id}</h2><br><img src='https://discordapp.com/api/v6/users/{$user->id}/avatars/{$user->avatar}.jpg' /><br><br>Dashboard Token: {$access_token}";
                } else {
                    echo json_encode(array("message" => "Authentication Error"));
                }
            } else {
                echo json_encode(array("message" => "No Code Provided"));
            }


le page affiche {"message":"Authentication Error"}.
Plein de recherche est rien trouvé pour m'aidé.
Sa bloque à l'envoie du code pour obtenir le token.

Merci de votre aide.

Bonne journée.

4 réponses

  1. Merci pour ton aide.

    Peux tu m’aidai a réalisé une demande 'PUT'.

    j'ai ma demande 'GET' qui fonctionne très bien:
    function fetchUser() {
            $access_token = $_SESSION['Auth']['access_token'];
            $token_type = $_SESSION['Auth']['token_type'];
            $info_request = "https://discordapp.com/api/v6/users/@me";
            $info = curl_init();
            curl_setopt_array($info, array(
                CURLOPT_URL => $info_request,
                CURLOPT_HTTPHEADER => array(
                    "Authorization: $token_type {$access_token}"
                ),
                CURLOPT_RETURNTRANSFER => true
            ));
            $user = json_decode(curl_exec($info));
            curl_close($info);
            return $user;
        }
    


    Je n'arrive pas a faire une demande 'PUT' correct.
        function joinGuild(){
            $info_request = "https://discordapp.com/api/v6/guilds/518723588589879297/members/515887327265030144";
            $access_token = $_SESSION['Auth']['access_token'];
            $token_type = $_SESSION['Auth']['token_type'];
            $data = array('access_token'=>$access_token);
            $info = curl_init();
            curl_setopt_array($info, array(
                CURLOPT_URL => $info_request,
                CURLOPT_HTTPHEADER => array(
                    "Authorization: $token_type {$access_token}"
                ),
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_CUSTOMREQUEST => "PUT",
                CURLOPT_PUT => true,
                CURLOPT_POSTFIELDS => $data
            ));
            
            $guilds = json_decode(curl_exec($info));
            $err = curl_error($info);
            curl_close($info);
            if ($err) {
                echo "cURL Error #:" . $err;
            } else {
                print_r($guilds);
            }
        }
    


    La page affiche:

    stdClass Object ( [code] => 0 [message] => 401: Unauthorized )


    Je pense que ma demande est incorrect. Car lors de la demande de token il y a l'autorisation 'guilds.join' qui sert pour "PUT /guilds/{guild.id}/members/{user.id}"

    documentation de la demande 'PUT': https://discord.com/developers/docs/resources/guild#add-guild-member