Menu

Php requete Token Oauth2

Messages postés
146
Date d'inscription
lundi 15 juillet 2013
Dernière intervention
9 décembre 2018
-
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://discordapp.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.
Afficher la suite 

Votre réponse

4 réponses

Messages postés
23610
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2018
0
Merci
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);

Commenter la réponse de jordane45
Messages postés
146
Date d'inscription
lundi 15 juillet 2013
Dernière intervention
9 décembre 2018
0
Merci
Merci de ta réponse.

Alors j''ai mis
echo 'Erreur Curl : ' . curl_error($token);

juste après
$resp = json_decode(curl_exec($token));

Et le
print_r($resp);
juste avant
if (isset($resp->access_token)) {
.

Et voilà le resultat de la page
Erreur Curl :
stdClass Object ( [redirect_uri] => Array ( [0] => Not a well formed URL. ) )
{"message":"Authentication Error"} 
florire
Messages postés
146
Date d'inscription
lundi 15 juillet 2013
Dernière intervention
9 décembre 2018
-
j'ai changer
$redirect_uri = "login.php";

Par
$redirect_uri = "http://monsite/login.php";

et le résultat est
Erreur Curl :
stdClass Object ( [error] => invalid_client )
{"message":"Authentication Error"} 
Commenter la réponse de florire
Messages postés
146
Date d'inscription
lundi 15 juillet 2013
Dernière intervention
9 décembre 2018
0
Merci
up
jordane45
Messages postés
23610
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2018
-
Pourquoi un UP ?
Je pensais que le message d'erreur était assez clair ....message":"Authentication Error"
Es-tu sûr des identifiants ??

As tout hasard, regarde ici :
https://github.com/wohali/oauth2-discord-new
Commenter la réponse de florire
Messages postés
146
Date d'inscription
lundi 15 juillet 2013
Dernière intervention
9 décembre 2018
0
Merci
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://discordapp.com/developers/docs/resources/guild#add-guild-member
Commenter la réponse de florire