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; // 新しいアクセストークン情報を返す
}
コメント