0

长期以来,我一直在疯狂地尝试为我的用户获取访问令牌。我在许多网站上阅读以通过使用 getSession() 并从中获取 access_token 以某种方式获取它......它给了我未定义的函数错误..我也用谷歌搜索过,所有解决方案都说使用更新的 SDK,但我的已更新,它仍然行不通...所以我终于找到了另一种获取访问令牌的解决方案,但这似乎为所有用户提供了相同的访问令牌...知道问题出在哪里吗?所有用户肯定不能拥有相同的令牌吧?

$app_id          = $facebook->getAppId();
            $app_secret      = $facebook->getApiSecret();

            function callFb($url, $params)
            {
                $ch = curl_init();
                curl_setopt_array($ch, array(
                    CURLOPT_URL => $url,
                    CURLOPT_POSTFIELDS => http_build_query($params),
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_VERBOSE => true
                ));

                $result = curl_exec($ch);
                curl_close($ch);
                return $result;
            }

            $params=array('client_id'=>$app_id, 'type'=>'client_cred', 'client_secret'=>$app_secret);
            $url = "https://graph.facebook.com/oauth/access_token";
            $access_token = callFb($url, $params);
            $access_token = substr($access_token, strpos($access_token, "=")+1, strlen($access_token));     
4

2 回答 2

3

问题是您要求的是type=client_cred,它告诉 Facebook 您不想要用户的访问令牌,而是应用程序的访问令牌。这用于执行访问洞察、实时更新 API 和公共数据等操作。如果您想获取用户数据,则不应传递该标志。

如果您确实想自行访问 Graph API,您当然可以按照https://developers.facebook.com/docs/authentication/上的说明进行操作。

于 2011-06-20T19:06:58.920 回答
0

您说您正在使用 PHP SDK,但我在您的代码中没有看到任何提及它的内容。

正确的做法是这样的:

<?php

    require('facebook.php');

    $fb = new Facebook(array('appId' => APP_ID, 'secret' => SECRET));

    $user = $fb->getUser();

    // if we have a valid user, we're logged in
    if ($user)
    {
        // do stuff with the API using the $fb object
    }
    else
    {
        // redirect the user to the authentication page
        header("Location: ".$fb->getLoginUrl());
    }

示例主要来自Facebook 的 SDK Github

于 2011-06-20T19:02:15.413 回答