StateToken / POST-запрос к функции скрипта приложения - PullRequest
0 голосов
/ 08 апреля 2020

Я создаю интеграцию Woocommerce API и работаю над функциями аутентификации. Для конечной точки авторизации требуются return_url и callback_url.

. У меня сложилось впечатление, что я могу использовать StateTokenBuilder, аналогично тому, как работает библиотека OAuth2, но сталкиваюсь с проблемами, пытаясь реализовать на основе в документах Apps Script.

Конечно, UrlFetchApp для конечной точки Woocommerce работает нормально, но при попытке авторизации приложения в конечной точке я получаю следующую ошибку:

Ошибка: в запросе произошла ошибка, и в то время не удалось отправить данные потребителя.

После последующих тестов с почтальоном URL-адрес обратного вызова и обратный URL-адрес оцениваются на Google Диске spla sh страницы и не выполнять функцию в скрипте. Я не знаю, как получить доступ к функции обратного вызова из другого источника, так как кажется, что она доступна только через браузер при входе в систему.

Ниже приведены мои функции:

let endpoint = {
  protocol: 'https',
  base: '{URL}.com'
}

let params = {}

API.Auth.Authorize = options => {
  endpoint = { ...endpoint, ...{ section: 'wc-auth/v1/authorize' } };
  options = { ...params, ...options };
  let method = 'GET';

  const query =
    method === 'GET' && typeof params === 'object'
      ? Object.keys(options)
          .filter(param => param !== 'payload')
          .map(param => `${param}=${encodeURIComponent(options[param])}`)
          .join('&')
      : options;
  const url = `${endpoint.protocol}://${endpoint.base}/${endpoint.section}${typeof query === 'string' && query.length > 0 ? `?${query}` : ''}`;

  let opts = {
    method: method,
    muteHttpExceptions: true
  };

  return url;
};

const authorize = () => {
  const params = {
    app_name: 'App Name',
    scope: 'read_write',
    user_id: 'abc123',
    return_url: 'https://script.google.com/macros/s/{SCRIPT_ID}/exec',
    callback_url: generateCallbackURL('handleCallback')
  };
  const result = API.Auth.Authorize(params);
  console.log(result);
}

generateCallbackURL = fn => {
  const script_url = `https://script.google.com/macros/d/${ScriptApp.getScriptId()}`;
  const url_suffix = '/usercallback?state=';
  const state_token = ScriptApp.newStateToken().withMethod(fn).withTimeout(120).createToken();
  const callback_url = `${script_url}${url_suffix}${state_token}`;
  return callback_url;
}

const handleCallback = e => {
  return HtmlService.createHtmlOutput(JSON.stringify(e));
}

Я также попытался заменить функцию handleCallback на функцию doPost, чтобы определить, решит ли это проблему. Это не имело эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...