<?php include path/to/php-sdk/facebook.php; // 引用 sdk lib $config = array( 'appId' => $app_id, // app id 'secret' => $app_secret, // app secret 'fileUpload' => false, // 是否可以透過 app 上傳檔案(EX. 頭像,圖片... etc) 'allowSignedRequest' => false, // 非 canvas 的 app 設定 false ); $facebook = new Facebook($config); $fbUserID = $facebook->getUser(); // 取得使用者ID ?>
這部分用于定義網站該取用哪個 APP 的資訊以供未來使用,app id 及 secret 請前往 Developer 自行註冊
或者可參考 教學 Step by Step 申請。
<?php if($fbUserID) { // 當可取得資料(有登入) try { echo "Facebook APP 已被授權並登入。<br />"; echo "您的使用者 ID 為 ".$fbUserID."<br />"; $fb_logout_url = $facebook->getLogoutUrl(); echo <<< fb <ul> <li><a href="{$fb_login_url}">點此登出 Facebook (連同 Facebook 一起登出)</a></li> <li><a href="?act=logout">從本頁登出(非取消授權)</a></li> </ul> fb; } catch(Exception $fbE) { echo <<< fb <span>Facebook 程序發生錯誤。</span> fb; } } else { $fb_login_url = $facebook->getLoginUrl(); echo <<< fb <a href="{$fb_login_url}">點此授權 Facebook 權限</a> fb; } ?>
此部分程式碼為基本確認使用者是否曾經授權本 app 取用資訊
透過 getUser() 可以取得使用者的 user id (若帶到 facebook.com/{id} 可以連到個人頁面)
登出時則是呼叫 $facebook->destroySession(); 即可從 app 登出
註記:在授權成功後 Facebook 會導回送過去的頁面,但是在測試時遇到一個問題
當我一取到狀態(code=xxxx&status=xxx)立刻重導原頁面消除 Get 參數時
Facebook 居然取不到資料,因此我直接將 getUser() 放在 new Facebook 底下提早判斷就正常了。
<?php if($fbUserID) { // 假如有登入才能取 $profile = $facebook->api("/me","GET"); $prof_data = var_export($profile,true); echo <<< prof <pre>{$prof_data}</pre> prof; } else { echo "尚未授權及登入登入無法取得資料"; } ?>
Facebook->api 的方法跟 Javascript 差不多,都是用于呼叫 Graph API 的 Function
透過 Graph API 可以使用 Facebook用戶 的權限來動作,如最後一步的取消授權...
<?php $facebook->api("/me/permissions","DELETE"); ?>
取消 facebook 的授權方式跟 Javascript 方法一樣,但是在 PHP 的部分遇到了狀況,
當我 delete permission 後第一次轉回頁面時,前半部讀取會員資訊是正常的(session 還在)
但是後半段卻造成 PHP 中斷了,原因不知,需等第二次 refresh 後才正常
(估計跟其程式邏輯有關... 待確認)