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();
}
|
関連記事