API Discord сообщает мне: «401: Несанкционировано», когда я делаю GET с помощью Google-Scripts: «UrlFetchApp.fetch ()» - PullRequest
1 голос
/ 25 апреля 2019

Я устанавливаю соединение API.Я хочу получать информацию из API-интерфейса Discord для моего приложения.

Поэтому я без проблем реализовал OAuth2, у меня есть токен доступа.Затем я попытался запросить некоторые конечные точки (/ users / @ me, / users / @ me / guilds, ...), но каждый раз, когда получаю одну и ту же ошибку.

Я отправляю свой токен авторизации в заголовках, ноон по-прежнему возвращает ошибку 401.

Я вызываю скрипт со сгенерированным URL: https://discordapp.com/api/oauth2/authorize?client_id=XYZ&redirect_uri=https%3A%2F%2Fscript.google.com%2Fmacros%2Fs%2FAKfycbyyt9-FiVv0zXOr8p8pMfojwEs2AXvBftVN1xdWeU3UQ1xgURD%2Fexec&response_type=code&scope=identify

Вот мой «код аутентификации»:

function doGet(e){
  if(typeof e.parameter.code !== 'undefined') {
    var code = e.parameter.code;
    getAccessToken(code);
  }
  return ContentService.createTextOutput('someThink..');
}

function getAccessToken(code){
  var API_TOKEN_URL = 'https://discordapp.com/api/oauth2/token'
  var CLIENT_ID = 'XYZ'
  var CLIENT_SECRET = 'XYZ'
  var REDIRECT_URI = 'https://script.google.com/macros/s/AKfycbyyt9-FiVv0zXOr8p8pMfojwEs2AXvBftVN1xdWeU3UQ1xgURD/exec'
  data = {
    'client_id': CLIENT_ID,
    'client_secret': CLIENT_SECRET,
    'grant_type': 'authorization_code',
    'code': code,
    'redirect_uri': REDIRECT_URI,
    'scope': 'identify'
  }
  header = {
    'method' : 'post',
    'Content-Type': 'application/x-www-form-urlencoded',
    'payload' : data
  }
  var result = UrlFetchApp.fetch(API_TOKEN_URL, header);
  if (result.getResponseCode() == 200) {
    var params = JSON.parse(result.getContentText());
    Logger.log(params.access_token); // all is fine
    getUser(params.access_token, params.token_type)
  }  
}

И этот кодэто мой запрос API:

function getUser(accessToken, token_type){
  var API_USERS_URL = 'https://discordapp.com/api/users/@me'; 
  header2 = {
    'method' : 'GET',
    'Authorization': token_type + ' ' + accessToken,
    // I tested all of them
    // 'followRedirects' : true,
    // 'muteHttpExceptions': true,
    // 'Content-Type': 'application/json',
    // 'Content-Type': 'application/x-www-form-urlencoded',
  }
  var resultUsers = UrlFetchApp.fetch(API_USERS_URL, header2); // ERROR HERE !
  if (resultUsers.getResponseCode() == 200) {
    var paramsUser = JSON.parse(result.getContentText());
    Logger.log(paramsUser);
  }  
}

Я принимаю соединение с разногласиями с теми же ОБЛАСТЯМИ: идентифицируйте.

Я так старался, но у меня ничего не получилось.Каждый раз одна и та же ошибка:

{"code": 0, "message": "401: Unauthorized"}

1 Ответ

1 голос
/ 25 апреля 2019

Вы отправляете заголовок в качестве параметра params / options на UrlFetchApp.fetch().Отправьте заголовок в качестве параметра заголовка в options:

var resultUsers = UrlFetchApp.fetch(API_USERS_URL,{headers: header2});
...