Google Apps Scriptのスクリプトのプロパティにトークン情報を保存して、
リフレッシュトークンを使って更新するコードです。
実現したいこと
アクセストークンを取得したい
手順
- freeeにアプリを登録して、コード.gs の Client ID と Client Secretに入れる
- ウェブアプリとして導入する
- そのURLをfreeeのアプリのコールバックURLに入れる
- Webアプリ認証用URLをブラウザで開いてアクセス許可する
- ブラウザにアクセストークンが表示され、スクリプトのプロパティにも保存される
リフレッシュトークンで更新したい
手順
手順
- refreshTokens() を実行する
- スクリプトのプロパティのトークン情報が更新される
それぞれ詳しくは以下2つの記事に書きました
初回アクセストークン取得の手順
freee APIでアクセストークンを取得したい
リフレッシュトークンで更新する手順
freee APIでリフレッシュトークンを使いたい
コード.gs
var client_id = 'Client ID';
var client_secret = 'Client Secret';
function doGet(e) {
var response = getAccessToken(e);
setScriptProperties(JSON.parse(response));
return ContentService.createTextOutput(response);// ブラウザに表示する
}
/************************************
リフレッシュトークンを使ってトークン情報を更新してスクリプトプロパティを上書きする
************************************/
function refreshTokens() {
var response = runRefresh(getScriptProperties('refresh_token'))
setScriptProperties(JSON.parse(response));
}
/************************************
PropertiesService
************************************/
function setScriptProperties(jobj) {// スクリプトのプロパティに値を保存する
PropertiesService.getScriptProperties().setProperties(jobj);
}
function getScriptProperties(key) {// スクリプトのプロパティから値を取得する
return PropertiesService.getScriptProperties().getProperty(key);
}
//アクセストークン、リフレッシュトークン取得時に使うurl
var token_url = 'https://accounts.secure.freee.co.jp/public_api/token';
/************************************
認可コードを利用してトークン情報を取得して返す(初回のみ使用する)
次回からはリフレッシュトークンを使ってトークン情報を更新できる
************************************/
function getAccessToken(e) {
var code = e['parameter']['code'];
var payload = {
'grant_type': 'authorization_code',
'client_id': client_id,
'client_secret': client_secret,
'code': code,
'redirect_uri': ScriptApp.getService().getUrl()
}
var response = UrlFetchApp.fetch(token_url, getOptions(payload));
return response;
}
/************************************
refresh_tokenを使って更新したトークン情報を返す
************************************/
function runRefresh(refresh_token) {
var payload = {
'grant_type': 'refresh_token',
'client_id': client_id,
'client_secret': client_secret,
'refresh_token': refresh_token
}
var response = UrlFetchApp.fetch(token_url, getOptions(payload));
return response;
}
/************************************
optionsを作って返す
************************************/
function getOptions(payload) {
var options = {
'method': 'post',
'contentType': 'application/x-www-form-urlencoded',
'payload': payload
}
return options;
}
|
関連記事
アクセストークンを取得したい
リフレッシュトークンを使いたい
