SalesforceのAPIをGoogle Apps Scriptで利用するときの備忘録です。
アクセストークンを取得→保存して、その後リフレッシュとリボークするコードを書きました。
動作環境:Developers Edition
STEP1: GAS
Webアプリを作成する→作り方
STEP2: Salesforce
接続アプリケーションを作成する→作り方
STEP3: GAS
アクセストークンを取得する
UserPropertiesに保存する
リフレッシュトークンでアクセストークンを更新する
リボークしてトークンを無効にする
→この記事
STEP4: GAS
APIにリクエストを送って結果を取得する→TBD
コードの実行
1. Salesforce上で接続アプリケーションを作成した際に発行される「コンシューマ鍵」「コンシューマの秘密」と、GASをWebアプリとして公開したURLを、グローバルの変数に貼り付ける
2. getMyUrl() を実行してログに出たURLにブラウザでアクセスする
3. UserPropertiesにトークン情報が保存される
4. runRefresh() でアクセストークンが更新される
5. runRevoke() でトークン情報を無効にする
token.gs
/************************************ グローバル ************************************/ var client_id = "コンシューマ鍵"; var client_secret = "コンシューマの秘密" var redirect_uri = "このGASプロジェクトをWebアプリとして公開したURL"; var token_url = "https://login.salesforce.com/services/oauth2/token"; /************************************ //認可コード取得URL ************************************/ function getMyUrl() { var url = "https://login.salesforce.com/services/oauth2/authorize?" +// sandboxの場合はinstance_url "response_type=code" + "&" + "client_id=" + client_id + "&" + "redirect_uri=" + redirect_uri + "&" + "state=mystate"; Logger.log(url); } /************************************ doGet ************************************/ function doGet(e) {// 認可コード取得URLを開いたときに動く処理 var response = getAccessToken(e); setUserProperties( JSON.parse(response)); return ContentService.createTextOutput(response);// ブラウザに表示する } /************************************ getAccessToken ************************************/ 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": redirect_uri } var options = { "method": "post", "contentType": "application/x-www-form-urlencoded", "payload": payload }; var response = UrlFetchApp.fetch(token_url, options); return response; } /************************************ runRefresh ************************************/ function runRefresh() {// refresh_tokenを使って更新したトークン情報を返す var payload = { "grant_type": "refresh_token", "refresh_token": getUserProperty("refresh_token"), "client_id": client_id, "client_secret": client_secret } var options = { "method": "post", "contentType": "application/x-www-form-urlencoded", "payload": payload } var response = UrlFetchApp.fetch(token_url, options); Logger.log(response); setUserProperties(JSON.parse(response)); } /************************************ revokeToken ************************************/ function revokeToken() { var url = "https://login.salesforce.com/services/oauth2/revoke"; var options = { "method": "get", "contentType": "application/x-www-form-urlencoded", "payload": { "token": getUserProperty("access_token") // access_tokenをrevokeする場合 //token: getProp("refresh_token")// refresh_tokenをrevokeする場合 } } var response = UrlFetchApp.fetch(url, options); Logger.log(response); } /************************************ PropertiesService ************************************/ function setUserProperty(key, value) {// ユーザのプロパティに値をひとつ保存する PropertiesService.getUserProperties().setProperty(key, value); } function setUserProperties(jobj) {// ユーザのプロパティに値をまとめて保存する PropertiesService.getUserProperties().setProperties(jobj); } function getUserProperty(key) {// ユーザのプロパティから値をひとつ取得する return PropertiesService.getUserProperties().getProperty(key); } function getUserProperties() {// ユーザのプロパティから値をまとめて取得する return PropertiesService.getUserProperties().getProperties(); } |
関連記事