LANG SELRCT

Google Apps Scriptのコードを書く場所  (新規作成: スプレッドシート | スクリプトエディタ

2021年8月15日日曜日

Salesforce APIで使うアクセストークンを取得してリフレッシュ、リボークもしたい(Google Apps Script)


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();
}




関連記事



最新の投稿

Service CloudのCaseをクローズするアクションを追加したい

ここでは ケースをクローズする「Close Case」アクションを追加したときの手順を書いて行きます。 状況(status)にClosedを表示する方法はこちら↓ Service Cloudでケースの状況にClosedを表示したい 以下の道を通って追加できました。 設定 >...