LANG SELRCT

Apps Script Reference  (Create: Create new Spreadsheet | Create new Apps Script

Sunday, August 15, 2021

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




関連記事



Latest post

スプレッドシートA列にある複数のテキストをスライドに追加したい(Google Apps Script)

今回Google Apps Scriptでやりたいこと GoogleスプレッドシートA列にある複数の値を取得して Googleスライドに渡して 図形オブジェクトのテキストとして追加したい ① スプレッドシートのA列に値を入れておく ② Code.gsのinsertNewShape...