Partage
  • Partager sur Facebook
  • Partager sur Twitter

PHP - Erreur 401 API Discord cURL

Sujet résolu
    31 janvier 2023 à 23:00:19

    Bonjour,

    Je cherche de l'aide dans mon projet relié à l'API Discord en PHP, plus précisément sur la vérification si mon bot est présent dans un serveur Discord.

    Lorsque l'utilisateur arrive sur la page web sur laquelle je travaille actuellement, cela affiche la liste des serveurs Discord où il est administrateur, ça cela fonctionne correctement.

    Seulement, derrière, je souhaite savoir si le bot est présent sur chaque serveur de l'utilisateur afin de faire une action différente suivant le résultat, et c'est cela qui me pose un problème.

    Voici le code de ma fonction get_guild_members (qui dans l'idéal vérifie si le bot est sur le serveur)

        public function get_guild_members($guild_id, $user_id, $token){
            $url = "https://discordapp.com/api/guilds/$guild_id/members/$user_id";
    
            $headers = array(
                "Authorization: Bearer $token",
                "Content-Type: application/x-www-form-urlencoded"
            );
    
            $ch = curl_init();
    
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_PUT, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
            $result = curl_exec($ch);
    
            $response = json_decode($result, true);
    
            return $response;
        }


    Lorsque j'essaye d'avoir les informations, je fais ce code : 

    $info_presence = $OAuthDiscord->get_guild_members($id_serveur, $id_bot, $access_token);

    $id_serveur correspond à l'ID du serveur que je récupére avec ma fonction get_guilds (qui liste les serveurs de l'utilisateur)

    $id_bot correspond à l'ID utilisateur Discord de mon bot.

    $access_token correspond à un token OAuth2 de l'utilisateur. 

    Pour le token j'ai (je pense) les scopes necéssaire : 

    guilds.join identify guilds guilds.members.read

    J'ai essayé de récupérer un token " Client Credentials Grant " depuis l'API Discord et le passer à la place du Token OAuth2, en mettant comme en tête : 

    $headers = array(
        "Authorization: Bot $token",
        "Content-Type: application/json"
    );

    Mais cela ne fonctionne pas non plus, j'ai essayé aussi le Token OAuth2 avec le content-type en JSON, et l'inverse le token " Client Credentials Grant " avec le content-type " application/x-www-form-urlencoded " mais cela ne fonctionne pas non plus, j'ai toujours comme retour :

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

    Je n'ai pas trouvé sur internet une solution qui fonctionne et la documentation de Discord ne m'aide pas vraiment vu les informations qu'il y a…

    Merci si quelqu'un a une solution :)

    UPDATE : 

    Bonjour,

    J'ai trouvé la solution, dans l'en tête de la fonction ce n'est pas un code OAuth à mettre, mais le token de votre application sur la console Discord. 

            $headers = array(
                "Authorization: Bot ".$this->_idbot,
                "Content-Type: application/json"
            ); 
    Ensuite sur mon script PHP qui appel la fonction, je traite le résultat comme ça :
    $id_serveur = $serveur['id'];
    $id_bot = 'XXXXXXXXXXXXXXXXXXXX';
    
    $info_presence = $OAuthDiscord->get_guild_members($id_serveur, $id_bot);
    
    if($info_presence['code']){
    echo 'Bot non présent';}else{
    echo 'Bot présent!';
    }

    -
    Edité par Boosterz 1 février 2023 à 19:38:18

    • Partager sur Facebook
    • Partager sur Twitter

    PHP - Erreur 401 API Discord cURL

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown