[salesforce][heroku]OAuth2.0を利用したデータアクセス

By |10月 23, 2012|heroku, salesforce, |


heroku上のアプリからOAuth2.0を利用したSalesforceデータアクセスのサンプルです。

先ず対象のSalesforce組織で接続済みアプリケーションの作成を行います。
「設定」→「作成」→「アプリケーション」を選択して、画面下部の「接続済みアプリケーション」から「新規」ボタンをクリックします。
※「設定」→「開発」→「リモートアクセス」をクリックしても下記画面が表示されアプリケーション画面にリダイレクトされます。

下記は接続済みアプリケーションの編集画面です。今回は取引先のデータを取得するので「データへのアクセスと管理」のみ選択します。またコールバックURLにはherokuで作成したアプリのURLを設定します。(ssl(https)のみ設定可能です)

「保存」ボタンをクリックすると作成したアプリケーションで利用する「コンシューマ鍵」、「コンシューマ秘密」が表示されます(「コンシューマ秘密」はクリックすると数字の羅列が表示されます)

heroku側から処理する流れとして、「アプリケーションの認証」→「AccessTokenの取得」→「SOQLを発行して取引先データの取得」となります。

・アプリケーションの認証

[ruby]
url = ‘https://login.salesforce.com’
url+= ‘/services/oauth2/authorize?’
url+= ‘response_type=code’
url+= ‘&client_id=コンシューマ鍵’
url+= ‘&redirect_uri=’ + URI.encode(接続アプリ作成で設定したコールバックURL)
redirect_to url
[/ruby]

上記URLにリダイレクトを行うと最初の1回は下記ページが表示されます。(「データへのアクセスと管理」のみ選択したが「基本情報へのアクセス」も含まれます)

「許可」ボタンをクリックすると、”code”パラメータ付きでコールバックURLにアクセスされるので、codeを利用してAccessTokenの取得処理を行います。

[ruby]
hostname =’https://login.salesforce.com’
path =’/services/oauth2/token’
param =’code=’+params[:code]+’&’
param+=’grant_type=authorization_code’+’&’
param+=’client_id=コンシューマ鍵&’
param+=’client_secret=コンシューマ秘密&’
param+=’redirect_uri=’+URI.encode(接続アプリ作成で設定したコールバックURL)

uri = URI.parse(hostname+path+’?’+param)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
res = https.post(
path, param
)
js=JSON.parse(res.body)
[/ruby]

取得したAccessTokenと対象インスタンスのURLを利用して取引先データを取得します(取得したJsonの詳細は こちらです)

[ruby]
#jsは上記処理で取得したjsonレスポンスをパースした値
uri = URI.parse(js["instance_url"])
path="/services/data/v20.0/query"
param ="q="+URI.encode("SELECT Id, Name, BillingCity, BillingState, Phone from Account limit 5")
header = {"Authorization" => "OAuth "+js["access_token"]}

https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
res = https.get(
path+’?’+ param,header
)

@res=res.body
[/ruby]

AccessTokenを利用してデータを取得する際はGETメソッドを利用して取得する事に注意してください。@resには取引先データ5件がJson形式で格納されています。
こういったAPIアクセスの利用シーンが今後も増えてきそうです。興味がある方は試してみてください。