Partage
  • Partager sur Facebook
  • Partager sur Twitter

PHP erreur cURL PUT Discord API

PUT Add Guild Member

    22 septembre 2021 à 12:23:32

    Bonjour,

    J'essaye de faire une requête PUT à l'API Discord. Je m'explique.

    Avec l'API Discord OAuth2, je récupère l'access_token de l'utilisateur, ce qui me donne le droit de le faire automtiquement rejoindre mon serveur/guild Discord (avec l'autorisation OAuth2 guild.join, donc je ne fais rien d'interdit !).

    J'arrive sans problème à récupérer donc l'access_token puis l'ID de l'utilisateur, son nom d'utilisateur, ...

    Cependant, quand j'utilise cURL (en PHP) pour faire la requête PUT qui devrait permettre de faire automatiquement rejoindre à l'utilisateur mon serveur (ajouter le membre à la guild, ou Add Guild Member), j'obtiens l'erreur : 400 Bad Request | cloudflare.

    Toutes les informations de ma requête sont correctes : le header Autorisation (Authorizaion) est bien défini sur Bot avec le bon token, l'access_token de l'utilisateur est juste... parce que la requête fonctionne lorsque j'utilise cURL via l'invite de commande de Windows.

    Mon code :

    <?php
    
    $url = "https://discord.com/api/v9/guilds/{MY_GUILD_ID}/members/" . $discord_user->id;
    
    $headers = array(
       "Authorization: Bot {MY_BOT_TOKEN}",
       "Content-Type: application/json",
    );
    
    $data = '{ "access_token": ' . $discord_token->access_token . ' }';
    
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_PUT, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
    
    $resp = curl_exec($curl);
    curl_close($curl);
    echo $resp;

    L'erreur retournée :

    La documentation officielle :

    https://discord.com/developers/docs/resources/guild#add-guild-member

    Merci de votre aide !

    • Partager sur Facebook
    • Partager sur Twitter

    - GoldFrite

      22 septembre 2021 à 14:09:51

      Utilise json_encode au lieu d'écrire un JSON à la main, surtout s'il est foireux au final : là, il doit manquer des quotes autour de $discord_token->access_token

      $data = json_encode(['access_token' => $discord_token->access_token]);

      -
      Edité par julp 22 septembre 2021 à 14:16:51

      • Partager sur Facebook
      • Partager sur Twitter
        22 septembre 2021 à 14:32:07

        Bonjour,

        Merci de la réponse !

        Malheureusement, cela ne change rien. Je tiens aussi à préciser que toutes mes autres requêtes (pour récupérer l'access_token par exemple) fonctionne quasiment de la même manière et il n'y a aucune erreur.

        • Partager sur Facebook
        • Partager sur Twitter

        - GoldFrite

          22 septembre 2021 à 16:37:20

          C'est le genre de choses où tester aiderait. Peux-tu (séparément) essayer :

          1. de remplacer curl_setopt($curl, CURLOPT_PUT, true); par curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
          2. supprimer le httpd_build_query car ça me semble plus adapté pour du application/x-www-form-urlencoded

          Tu n'as rien de plus précis en retour via $resp ?

          -
          Edité par julp 22 septembre 2021 à 16:40:59

          • Partager sur Facebook
          • Partager sur Twitter
            22 septembre 2021 à 17:49:48

            Merci beaucoup ! Le problème venait en effet de curl_setopt($curl, CURLOPT_PUT, true); bien que je croyais avoir déja testé l'autre solution !

            J'ai maintenant un erreur "Invalid OAuth2 access token" mais je pense pouvoir résoudre ca moi-même. Encore merci !


            -
            Edité par GoldFrite 22 septembre 2021 à 17:52:13

            • Partager sur Facebook
            • Partager sur Twitter

            - GoldFrite

            PHP erreur cURL PUT Discord API

            × 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