如何通过 Facebook PHP SDK 传递多个范围参数来执行需要权限的查询?
How do you pass multiple scope parameters through a Facebook PHP SDK to execute queries that require permissions?
我使用我的 PHP SDK 代码从 Facebook 获得当前 3 页网页 site/app 到 pull/display 数据,我收到错误:
The redirect_uri URL must be absolute
这是因为以下代码:
$params = array(
'scope' => 'ads_management',
'redirect_uri' => 'http://example.com/login-callback.php',
);
$loginUrl = $helper->getLoginUrl($params);
在改成这个之前,我根本没有这个^,只有这一行:
$loginUrl = $helper->getLoginUrl('http://example.com/login-callback.php');
如果我要查询不需要权限的帖子和内容,一切都会顺利进行。但我需要执行如下查询,位于 fb-stats.php
。我想我获取参数的方式是错误的,但我不知道正确的格式化方式。
这里是fb.php
:
<?php
session_start();
require_once '../vendor/autoload.php';
// Checks if token is set and redirects to another page.
if (isset($_SESSION['facebook_access_token'])) {
// Logged in!
header('Location: fb-stats.php'); exit();
}
$fb = new Facebook\Facebook([
'app_id' => 'MYAPPID',
'app_secret' => 'MYAPPSECRET',
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getRedirectLoginHelper();
// The site below is 'example' is actually my live site.
$params = array(
'scope' => 'ads_management',
'redirect_uri' => 'http://example.com/login-callback.php',
);
$loginUrl = $helper->getLoginUrl($params);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
?>
这是login-callback.php
:
<?php
session_start();
require_once '../vendor/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'MYAPPID',
'app_secret' => 'MYAPPSECRET',
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (isset($accessToken)) {
if (! $accessToken->isLongLived()) {
try {
$accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
}
catch (Facebook\Exceptions\FacebookSDKException $e) {
echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n";
exit;
}
}
header('Location: fb-stats.php'); exit();
}
这是fb-stats.php
:
<?php
session_start();
require_once '../vendor/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'MYAPPID',
'app_secret' => 'MYAPPSECRET',
'default_graph_version' => 'v2.5',
]);
$fb->setDefaultAccessToken('access-token');
try {
$response = $fb->get('/PAGEID/insights/page_impressions?period=day', '{access token}');
$insightsNode = $response->getGraphEdge();
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
var_dump($insightsNode);
我尝试执行的查询需要 ads_management
和 read_insights
的权限,但我对如何获得多个范围感到困惑,除了我目前遇到的错误redirect_uri
不是绝对的。我将如何解决这些问题?
$params = array(
'scope' => 'ads_management',
'redirect_uri' => 'http://example.com/login-callback.php',
);
$loginUrl = $helper->getLoginUrl($params);
getLoginUrl 方法需要 两个 个参数 - 但您在这里只向它传递了一个数组。
这个方法的正确使用方法是
$helper->getLoginUrl('http://example.com/login-callback.php', ['ads_management']);
重定向 URI 作为第一个参数(字符串值)传递,然后第二个参数是范围(您要请求的权限数组。)
(是否要预先将这些值放入不同的数组以进行配置,由您决定。)
我使用我的 PHP SDK 代码从 Facebook 获得当前 3 页网页 site/app 到 pull/display 数据,我收到错误:
The redirect_uri URL must be absolute
这是因为以下代码:
$params = array(
'scope' => 'ads_management',
'redirect_uri' => 'http://example.com/login-callback.php',
);
$loginUrl = $helper->getLoginUrl($params);
在改成这个之前,我根本没有这个^,只有这一行:
$loginUrl = $helper->getLoginUrl('http://example.com/login-callback.php');
如果我要查询不需要权限的帖子和内容,一切都会顺利进行。但我需要执行如下查询,位于 fb-stats.php
。我想我获取参数的方式是错误的,但我不知道正确的格式化方式。
这里是fb.php
:
<?php
session_start();
require_once '../vendor/autoload.php';
// Checks if token is set and redirects to another page.
if (isset($_SESSION['facebook_access_token'])) {
// Logged in!
header('Location: fb-stats.php'); exit();
}
$fb = new Facebook\Facebook([
'app_id' => 'MYAPPID',
'app_secret' => 'MYAPPSECRET',
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getRedirectLoginHelper();
// The site below is 'example' is actually my live site.
$params = array(
'scope' => 'ads_management',
'redirect_uri' => 'http://example.com/login-callback.php',
);
$loginUrl = $helper->getLoginUrl($params);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
?>
这是login-callback.php
:
<?php
session_start();
require_once '../vendor/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'MYAPPID',
'app_secret' => 'MYAPPSECRET',
'default_graph_version' => 'v2.5',
]);
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (isset($accessToken)) {
if (! $accessToken->isLongLived()) {
try {
$accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
}
catch (Facebook\Exceptions\FacebookSDKException $e) {
echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n";
exit;
}
}
header('Location: fb-stats.php'); exit();
}
这是fb-stats.php
:
<?php
session_start();
require_once '../vendor/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'MYAPPID',
'app_secret' => 'MYAPPSECRET',
'default_graph_version' => 'v2.5',
]);
$fb->setDefaultAccessToken('access-token');
try {
$response = $fb->get('/PAGEID/insights/page_impressions?period=day', '{access token}');
$insightsNode = $response->getGraphEdge();
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
var_dump($insightsNode);
我尝试执行的查询需要 ads_management
和 read_insights
的权限,但我对如何获得多个范围感到困惑,除了我目前遇到的错误redirect_uri
不是绝对的。我将如何解决这些问题?
$params = array(
'scope' => 'ads_management',
'redirect_uri' => 'http://example.com/login-callback.php',
);
$loginUrl = $helper->getLoginUrl($params);
getLoginUrl 方法需要 两个 个参数 - 但您在这里只向它传递了一个数组。
这个方法的正确使用方法是
$helper->getLoginUrl('http://example.com/login-callback.php', ['ads_management']);
重定向 URI 作为第一个参数(字符串值)传递,然后第二个参数是范围(您要请求的权限数组。)
(是否要预先将这些值放入不同的数组以进行配置,由您决定。)