nkjmkzk.net

powered by Kazuki Nakajima

外部のphpからREST APIでForce.comにアクセスするためのOAuth Toolkit

2012.05追記

OAuth Toolkitはスクラッチから再開発されました。この記事は古いものです。

あたらしいOAuth Toolkitの使い方はこちら

Force.comの外部にホストしているWebサービスからForce.comに対してREST APIでアクセスするためには認証が必要です。

自分でOAuth認証クライアントのコードをスクラッチから書くのはホネの折れる作業なので、php実行環境でのToolkitを作成してGithubに公開しておきました。

Force.com OAuth Toolkit for PHP

使い方をざっくりと説明します。

必要なもの

  • Force.comの外部で稼動しているphp実行環境
  • cURLがphp実行環境で有効になっていること
  • JSONがphp実行環境で有効になっていること
  • SSLがphp実行環境で有効になっていること
  • アクセスするForce.comの組織
  • APIがForce.com組織およびプロファイルで有効になっていること

インストールとセットアップ

php実行環境のドキュメントルートにoauthディレクトリを作成。

$ export DOCUMENT_ROOT='/srv/nginx/html/test'
$ mkdir ${DOCUMENT_ROOT}/oauth

作成したoauthディレクトリ配下にGithubからoauth.phpとconfig.phpをダウンロードして保存。

[何らかの方法でoauth.phpとconfig.phpをダウンロード]

$ ls ${DOCUMENT_ROOT}/oauth
config.php
oauth.php

Force.com側でRemote Accessレコードを作成。
[あなたの名前]->Setup->Develop->Remote Accessから。重要なのはCallback URL。下記のフォーマットで。プロトコルはHTTPSである必要があります。

https://[あなたのサーバ]/oauth/oauth.php

php実行環境のconfig.phpを編集してCLIENT_IDとCLIENT_SECRETを設定。それぞれの値はRemote Accessレコードを参照。

$ vi ${DOCUMENT_ROOT}/oauth/config.php
<?php
define("CLIENT_ID", "[あなたのConsumer Key]");
define("CLIENT_SECRET", "[あなたのConsumer Secret]");
define("LOGIN_URI", "https://login.salesforce.com");
?>

認証が必要なphpファイルの最上部に下記を追記

# vi ${DOCUMENT_ROOT}/index.php
<?php
session_start();
if (!isset($_SESSION['access_token']) || !isset($_SESSION['instance_url'])) {
     $_SESSION['oauth_return'] = $_SERVER['PHP_SELF'];
     header( 'Location: oauth/oauth.php' );
} 

[あなたのコードが続く]
?>

これで完了。

ブラウザで認証が必要なコンテンツにアクセスすれば、未認証の場合は一度Salesforceのログインサイトにリダイレクトされます。そこで認証または認可を行い、リダイレクト元に再度リダイレクトされます。

その後のアクセスでは$_SESSION['access_token']にアクセストークンが、$_SESSION['instance_url']にインスタンスのURLが保存されますので、この2つをもってForce.comのREST APIをつつくことで認可済みの状態を維持することができます。

このOAuthのアクセストークンを用いてREST APIにアクセスするサンプルコードを最後に紹介しておきます。下記はChatterからFeedとその発信者を取得して表示するコードです。

$url = $_SESSION['instance_url'] . "/services/data/v23.0/chatter/feeds/news/me/feed-items";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: OAuth " . $_SESSION['access_token']));

$json_response = curl_exec($curl);
$response = json_decode($json_response, true);

echo "<!DOCTYPE html><html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'></head><body>\n";
foreach ((array) $response['items'] as $feed) {
    echo $feed['actor']['name'] . " says \n";
    echo $feed['body']['text'] . "<br/>\n";
}
echo "</body></html>\n";

 

参考情報

with one comment

Written by 中嶋 一樹

11月 6th, 2011 at 3:39 pm

Posted in Uncategorized

Tagged with , , ,

One Response to '外部のphpからREST APIでForce.comにアクセスするためのOAuth Toolkit'

Subscribe to comments with RSS or TrackBack to '外部のphpからREST APIでForce.comにアクセスするためのOAuth Toolkit'.

  1. [...] *このエントリーは「外部のphpからREST APIでForce.comにアクセスすためのOAuth Toolkit」の続きです。 [...]

Leave a Reply