我有一个使用php脚本的Facebook应用程序,我已经使用了一段时间,以发布指向我管理的页面的链接。它曾经工作得很顺利。最近,在发帖之前,它先问了我一系列问题,然后才成功发帖。
不用说,我是这个应用程序的管理员,并且已经登录。对于其余的问题,我正在使用'the-app'和'the-用户而不是真实姓名。
问题1:以用户身份继续吗?
该应用程序将收到您的姓名和个人资料照片。未经您的允许,这不允许该应用发布到Facebook。
第二季度:您想在应用程序中使用哪些页面?
在下一步中,您将确定该应用程序可以对所选页面执行的操作。
第三季度:该应用允许做什么?
如果您关闭这些选项,则该应用程序可能无法正常运行。
管理页面
发布为您管理的页面
第四季度:您现在已将该应用链接到Facebook
您可以在业务集成设置中更新该应用程序可以执行的操作。要完成设置,该应用可能需要其他步骤。
如何摆脱这些不必要的问题,让应用程序像以前一样顺利地在没有它们的情况下正常运行?
相关的代码分为两个阶段运行,其中阶段1重定向到阶段2:
<?php
session_start();
require_once __DIR__ . '/facebook-sdk-v562/autoload.php';
$ok_to_continue = true;
$posted = false;
$errtxt = '';
//=====================
// Get and check phase:
//=====================
if ($ok_to_continue) {
$phase = '2';
if (isset($_REQUEST['phase'])) $phase = $_REQUEST['phase'];
if ($phase != '1' && $phase != '2') oops('Bad phase argument found.');
if ($phase == '2') {
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
header('Content-Type: text/html; charset=windows-1255');
}
}
//=====================================
// Get and check other input arguments:
//=====================================
if ($ok_to_continue) {
// ... piece of code to get the $link argument in both phases and check it
}
//=================================
// Initialize Facebook environment:
//=================================
if ($ok_to_continue) {
$my_app_id = '...............';
$my_app_secret = '................................';
$default_graph_version = 'v2.10';
$home_url = 'https://www.example.com/the-app/index.php';
$my_page_id = '...............';
$fb = new Facebook\Facebook([
'app_id' => $my_app_id,
'app_secret' => $my_app_secret,
'default_graph_version' => $default_graph_version
]);
}
//===============================================================
// If phase1, redirect to myself with phase2, for facebook login:
//===============================================================
if ($ok_to_continue) {
$helper = $fb->getRedirectLoginHelper();
if ($phase == '1') {
$phase2_url = $home_url;
$fbPermissions = ['manage_pages', 'publish_pages'];
$loginUrl = $helper->getLoginUrl($phase2_url, $fbPermissions);
header('Location: ' . $loginUrl);
oops('After redirected.');
}
}
//=======================
// Get user access token:
//=======================
if ($ok_to_continue) {
try { $accessToken = $helper->getAccessToken(); }
catch(Facebook\Exceptions\FacebookResponseException $e) { oops('Get user access token graph error: ' . $e->getMessage()); }
catch(Facebook\Exceptions\FacebookSDKException $e) { oops('Get user access token facebook SDK error: ' . $e->getMessage()); }
}
if ($ok_to_continue) {
$fb->setDefaultAccessToken($accessToken); // set the default fallback access token so we don't have to pass it to each request
}
//=======================
// Get page access token:
//=======================
if ($ok_to_continue) {
try { $response = $fb->get('/' . $my_page_id . '?fields=access_token'); }
catch(Facebook\Exceptions\FacebookResponseException $e) { oops('Get page access token graph error: ' . $e->getMessage()); }
catch(Facebook\Exceptions\FacebookSDKException $e) { oops('Get page access token facebook SDK error: ' . $e->getMessage()); }
}
if ($ok_to_continue) {
$json = json_decode($response->getBody());
$pageAccessToken = $json->access_token;
}
//===================
// Post link to page:
//===================
if ($ok_to_continue) {
$post_params = [
'link' => urldecode($link),
'message' => 'Published link:'
];
try { $response = $fb->post('/' . $my_page_id . '/feed', $post_params, $pageAccessToken); }
catch(Facebook\Exceptions\FacebookResponseException $e) { oops('Post to page graph error: ' . $e->getMessage()); }
catch(Facebook\Exceptions\FacebookSDKException $e) { oops('Post to page facebook SDK error: ' . $e->getMessage()); }
}
if ($ok_to_continue) {
$graphNode = $response->getGraphNode();
$post_id = $graphNode['id'];
$posted = true;
}
//===============
// Error handler:
//===============
function oops($errmsg) {
global $ok_to_continue;
global $errtxt;
$ok_to_continue = false;
$errtxt = $errmsg;
}
?>