使用PHP SDK交叉发布到Facebook页面

许多站点在社交网络上发布有关新资料的信息,这可以在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', //   id  'app_secret' => '12345678901234567890123456789012' //   ]); 

我们呼叫助手执行授权,指定所需的权限以在页面上发布。

 $helper = $fb->getRedirectLoginHelper(); //  publish_actions,     ,      $permissions = ['manage_pages','publish_pages']; $loginUrl = $helper->getLoginUrl('url____', $permissions); echo '<a href="' . htmlspecialchars($loginUrl) . '"></a>'; 

将您重定向到需要登录的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; } //  echo $response->getGraphNode()['access_token']; 

收到的令牌将具有无限的持续时间。 令牌信息可通过调试器获得 。 现在,您可以尝试发布一条消息。

 $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>'; 

Source: https://habr.com/ru/post/zh-CN481482/


All Articles