先日のエントリーで、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"; } } }
てな感じでフィニッシュ。