ebayのOAuth Scopes問題について

未分類

OAuth Scopesで認証されない

一部のOAuth Scopesは使えるが、なぜか、「https://api.ebay.com/oauth/api_scope/buy.item.bulk」

が使えない。

色々調べて、権限付与のフローを作ってみたり、単体のBrowse APIの「getItem」をコールしてみたりした。

一応、そちらは動いたので、確実に権限が付与されていないようだ。

なので、現在問い合わせ中。

一応ここで、認証フローのGASコードだけ載せておく。

これで、URLを作り。

function createAuthUrl() {
  var clientId = 'YOUR_CLIENT_ID'; // eBay 開発者ポータルから取得したクライアント ID
  var redirectUri = 'YOUR_RuName'; // eBay に登録したリダイレクト URI 名(例: YOUR_APP_RuName)
  var scope = encodeURIComponent('https://api.ebay.com/oauth/api_scope/buy.item.bulk https://api.ebay.com/oauth/api_scope/sell.inventory'); // 必要なスコープをスペース区切りで指定
  var responseType = 'code';
  var authUrl = `https://auth.ebay.com/oauth2/authorize?client_id=${clientId}&redirect_uri=${redirectUri}&response_type=${responseType}&scope=${scope}`;
  
  Logger.log('認証 URL: ' + authUrl);
  return authUrl;
}

これで取得したCodeを使ってアクセストークン/リフレッシュトークンを生成する。

function getAccessToken(authCode) {
  var clientId = 'YOUR_CLIENT_ID'; // eBay 開発者ポータルから取得したクライアント ID
  var clientSecret = 'YOUR_CLIENT_SECRET'; // eBay 開発者ポータルから取得したクライアント シークレット
  var redirectUri = 'YOUR_RuName'; // eBay に登録したリダイレクト URI 名(例: YOUR_APP_RuName)

  var tokenUrl = 'https://api.ebay.com/identity/v1/oauth2/token';

  var headers = {
    'Authorization': 'Basic ' + Utilities.base64Encode(clientId + ':' + clientSecret), // Client ID と Client Secret を Base64 エンコード
    'Content-Type': 'application/x-www-form-urlencoded'
  };

  var payload = {
    'grant_type': 'authorization_code',
    'code': authCode, // 取得した認証コード
    'redirect_uri': redirectUri
  };

  var options = {
    'method': 'post',
    'headers': headers,
    'payload': payload,
    'muteHttpExceptions': true
  };

  var response = UrlFetchApp.fetch(tokenUrl, options);
  var jsonResponse = JSON.parse(response.getContentText());
  Logger.log(jsonResponse); // アクセストークンとリフレッシュトークンの情報をログに出力

  return jsonResponse; // アクセストークン情報を返す
}

次にリフレッシュトークンを使って、アクセストークンを生成していきます。

function refreshAccessToken(refreshToken) {
  var clientId = 'YOUR_CLIENT_ID'; // eBay 開発者ポータルから取得したクライアント ID
  var clientSecret = 'YOUR_CLIENT_SECRET'; // eBay 開発者ポータルから取得したクライアント シークレット

  var tokenUrl = 'https://api.ebay.com/identity/v1/oauth2/token';

  var headers = {
    'Authorization': 'Basic ' + Utilities.base64Encode(clientId + ':' + clientSecret), // Client ID と Client Secret を Base64 エンコード
    'Content-Type': 'application/x-www-form-urlencoded'
  };

  var payload = {
    'grant_type': 'refresh_token',
    'refresh_token': refreshToken // 取得済みのリフレッシュトークン
  };

  var options = {
    'method': 'post',
    'headers': headers,
    'payload': payload,
    'muteHttpExceptions': true
  };

  var response = UrlFetchApp.fetch(tokenUrl, options);
  var jsonResponse = JSON.parse(response.getContentText());
  Logger.log(jsonResponse); // 新しいアクセストークンとリフレッシュトークンの情報をログに出力

  return jsonResponse; // 新しいアクセストークン情報を返す
}

コメント

タイトルとURLをコピーしました