Facebook PHP SDK上的“redirect_uri URL必须是绝对的”错误

时间:2016-06-08 18:46:52

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

编辑:我在基本设置下将http://www.example.com(例如我的实际网站)作为网站网址。我在应用域名下也有www.example.comexample.com

我得到的错误是:

  

redirect_uri网址必须是绝对的

我尝试登录时代码中断了。这是getLoginUrl()的代码:

<?php

    $fb = new Facebook\Facebook([
        'app_id' => 'MYAPPID',
        'app_secret' => 'MYAPPSECRET',
        'default_graph_version' => 'v2.5',
    ]);

    $redirectURI = 'http://example.com/login-callback.php';
    $encodedRedirectURI = urlencode($redirectURI);

    $helper = $fb->getRedirectLoginHelper();
    $loginUrl = $helper->getLoginUrl(
            array(
                'scope' => 'ads_management,read_insights',
                'redirect_uri' => $encodedRedirectURI
            )
        );

    echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';

?>

为什么会发生这种错误?

2 个答案:

答案 0 :(得分:0)

您还需要在Facebook应用(http://example.com/login-callback.php)的高级设置中将重定向网址https://developers.facebook.com/apps)添加为“有效的OAuth重定向URI”。

答案 1 :(得分:0)

  

为什么会发生这种错误?

因为您在对URL进行URL编码之前将其传递给getLoginUrl方法。

SDK在内部处理这个问题 - 所以现在你有一个URL已经被网址编码两次,这使得它无法识别为有效的绝对URL。

所以只需将URL传递给该方法,而不用应用任何额外的编码。

编辑:此外,方法getLoginUrl需要两个参数 - 首先是重定向URI,然后是作为第二个的范围 - 而不是一个阵列。

$loginUrl = $helper->getLoginUrl(
    $redirectURI,
    array('ads_management', 'read_insights')
);