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

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


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

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

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

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

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

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

        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

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

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

        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)

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

        #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

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です