许多站点在社交网络上发布有关新资料的信息,这可以在Facebook上完成。 假定您已经创建了
应用程序,并在“设置”菜单项的“高级”选项卡中指定了OAuth重定向允许的主机。 因此,我们使用函数session_start()启动会话,如果会话被禁用,则需要会话的人可以打开错误输出。
error_reporting(E_ALL); ini_set("display_errors", 1);
接下来,下载PHP SDK库(位于github上)并解压缩src文件夹(可以重命名)。 然后指定自动装带器的路径。
require_once __DIR__ . '/_src/autoload.php';
现在创建Facebook类的实例。
$fb = new Facebook\Facebook([ 'app_id' => '1234567890123456',
我们呼叫助手执行授权,指定所需的权限以在页面上发布。
$helper = $fb->getRedirectLoginHelper();
将您重定向到需要登录的Facebook网站之后,您将按照getLoginUrl()函数中指定的链接进行操作。 在这里,您再次呼叫从中获得access_token用户的助手。
$helper = $fb->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); } catch(Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph : ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK : ' . $e->getMessage(); exit; } if (isset($accessToken)) $_SESSION['facebook_access_token'] = (string) $accessToken; elseif ($helper->getError()) exit;
如果您尝试使用此令牌发布到页面,则将返回“权限错误”错误,因为这需要页面令牌。 要获取它,您需要调用Facebook对象的get()函数,并将两个参数传递给它:页面令牌请求的url,其中包含您要发布到的页面的ID,以及先前接收到的access_token用户。
try { $response = $fb->get('/id_?fields=access_token', $_SESSION['facebook_access_token']); } catch (Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph : ' . $e->getMessage(); exit; } catch (Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK : ' . $e->getMessage(); exit; }
收到的令牌将具有无限的持续时间。 令牌信息可通过
调试器获得 。 现在,您可以尝试发布一条消息。
$str_page = '/1234567890123456/feed'; $feed = array('message' => ''); try { $response = $fb->post($str_page, $feed, 'access_token_'); } catch (Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph : ' . $e->getMessage(); exit; } catch (Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK : ' . $e->getMessage(); exit; } $graphNode = $response->getGraphNode(); echo ', id: ' . $graphNode['id'];
如有必要,您可以退出Facebook。
$helper = $fb->getRedirectLoginHelper(); $logoutUrl = $helper->getLogoutUrl($_SESSION['facebook_access_token'], 'url____'); echo '<a href="' . htmlspecialchars($logoutUrl) . '"></a>';