先日のエントリーで、PHP-SDK使えば超カンタンだぜ!的に書いたんですが、ワタクシのお客様がWebARENAの共用サーバを利用しておりまして、そのサーバのPHPのバージョンが5.1.6だったため、PHP-SDK自体が使えませんでした。・゚・(ノД`)・゚・。(まぁPHP4じゃないだけマシっちゃーマシですね)
どこにも書いてない(探せなかった)んですが、「json_decodeを使っている」ってことは「PHP 5 >= 5.2.0」なんですね。
てわけで、自力で実装してみました。
とは云ってもフルスクラッチは時間がかかって仕方ないので、PEARだけは使わせて頂きます!
※セキュリティに関する部分とかチェックとかは省略しているので、そのままコピペで使っちゃダメですよん。
まずは共通で使うパラメータを設定。
define('FACEBOOK_KEY', '123456789012345');
define('FACEBOOK_SECRET', '123456789abcdef123456789abcdef12');
define('FACEBOOK_CONNECT', 'http://test.com/_connect.php');
3行目は、アプリ登録時に指定したものでよければ、なくてもOK。
次にログインURLを取得。
//facebookログイン用URLを取得
session_start();
$_SESSION['facebook_state'] = md5(uniqid(rand(), TRUE));
$authorize_url = 'https://www.facebook.com/dialog/oauth?'
. 'client_id='. FACEBOOK_KEY
. '&redirect_uri='. rawurlencode(FACEBOOK_CONNECT)
. '&scope='. rawurlencode('publish_stream')
. '&state='. $_SESSION['facebook_state'];
echo $authorize_url;
次は、facebookの認証ページから帰ってきたときの処理。
session_start();
if ($_GET['state'] == $_SESSION['facebook_state'])
{
$token_url = 'https://graph.facebook.com/oauth/access_token'
. '?client_id='. FACEBOOK_KEY
. '&redirect_uri='. urlencode(FACEBOOK_CONNECT)
. '&client_secret='. FACEBOOK_SECRET
. '&code='. $_GET['code'];
$response = file_get_contents($token_url);
$params = NULL;
parse_str($response, $params);
$_SESSION['facebook_access_token'] = $params['access_token'];
}
で、ユーザー情報取得とかウォールに書き込んだりとか。
session_start();
if ($_SESSION['facebook_access_token'])
{
//ユーザー情報取得
require_once 'Services/JSON.php';
$json = new Services_JSON();
$graph_url = 'https://graph.facebook.com/me'
. '?access_token='. $_SESSION['facebook_access_token'];
$user = $json->decode(@file_get_contents($graph_url));
if ( ! $user)
{
echo 'error';
unset($user);
exit();
}
else
{
if (isset($user->username))
{
echo "USERNAME: {$user->username}\n";
}
echo "NAME: {$user->name}\n";
}
//ウォールに書きこんでみる
$graph_url = 'https://graph.facebook.com/me/feed';
try
{
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setConfig('ssl_verify_peer', FALSE);
$request->setUrl('https://graph.facebook.com/me/feed');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->addPostParameter(array(
'message' => 'こんにちは、ボクです。PHPからウォールに書きこんでみるテスト。',
'access_token' => $_SESSION['facebook_access_token'],
));
$result = $request->send();
}
catch(HTTP_Request2_Exception $e)
{
echo "Error: {$e->getMessage()}\n";
}
catch (Exception $e)
{
echo "Error: {$e->getMessage()}\n";
}
if (isset($result))
{
$response = $json->decode($result->getBody());
if (isset($response->error))
{
echo "Error: {$response->error->message}\n";
}
else
{
echo "ID: {$response->id}\n";
}
}
}
てな感じでフィニッシュ。