【问题标题】:How do you pass multiple scope parameters through a Facebook PHP SDK to execute queries that require permissions?如何通过 Facebook PHP SDK 传递多个范围参数来执行需要权限的查询?
【发布时间】:2016-10-09 01:04:15
【问题描述】:

我有一个当前的 3 页网站/应用程序,可以使用我的 PHP SDK 代码从 Facebook 提取/显示数据,但出现错误:

redirect_uri URL 必须是绝对的

这是因为下面的代码:

$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_managementread_insights 的权限,但我很困惑如何让多个作用域脱离我目前遇到的redirect_uri 不存在的错误绝对。我将如何解决这些问题?

【问题讨论】:

    标签: php facebook facebook-graph-api facebook-php-sdk access-token


    【解决方案1】:
    $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作为第一个参数(字符串值)传递,然后第二个参数是范围(您要请求的权限数组。)

    (是否要将这些值放入不同的数组中以进行预先配置,取决于您。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多