Php requete Token Oauth2

florire Messages postés 151 Date d'inscription   Statut Membre Dernière intervention   -  
florire Messages postés 151 Date d'inscription   Statut Membre Dernière intervention   -
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

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,
C'est donc que ton if ne retourne pas le résultat attendu
 if (isset($resp->access_token)) {

Fais donc, avant ton IF, un
print_r($resp);
et regarde ce que ça retourne.
Tu peux aussi vérifier si ton CURL ne retourne pas d'erreur via
 echo 'Erreur Curl : ' . curl_error($ch);

0