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; } |
関連記事
アクセストークンを取得したい
リフレッシュトークンを使いたい