Facebook OAuth访问令牌错误

Facebook OAuth访问令牌错误,facebook,facebook-graph-api,oauth,Facebook,Facebook Graph Api,Oauth,完整代码 public function indexAction(){ echo '<a href="https://www.facebook.com/dialog/oauth?client_id=475302972487577&redirect_uri=http://bp.mysite.com/en/social/fblogin" target="_blank">Login met facebook</a> '; } con

完整代码

    public function indexAction(){
           echo '<a href="https://www.facebook.com/dialog/oauth?client_id=475302972487577&redirect_uri=http://bp.mysite.com/en/social/fblogin" target="_blank">Login met facebook</a> ';
  }

 const FB_GRAPH_URL =  "https://graph.facebook.com/";  
    public function fbloginAction() {

            $fbCode = $this->_getParam("code");
            $getStr  = self::FB_GRAPH_URL. 'oauth/access_token?' .http_build_query(array(
                        'client_id'     => 'APP_ID',
                        'type'          => 'client_cred',
                        'client_secret' => 'SECRET_KEY',
                        'code'          => $fbCode)
                    );

            $accessToken = file_get_contents( $getStr );
            krumo($accessToken) ;

            $dbpath = "https://graph.facebook.com/me?$accessToken" ;
            $cont = file_get_contents($dbpath ) ;
            krumo($cont);
        }
我收到错误消息:

无法打开流:HTTP请求失败!HTTP/1.0 400错误请求 在家里

将$dbpath值(path)手动粘贴到web浏览器时,我遇到了下一个错误:

{
   "error": {
      "message": "An active access token must be used to query information about the current user.",
      "type": "OAuthException",
      "code": 2500
   }
}

如何修复该错误?

您可能希望使用服务器端身份验证流。通过检查中的呼叫,可以很清楚地知道您的哪些呼叫是错误的

首先,对
oauth/access\u令牌
端点的调用不带任何参数
'type'=>'client\u cred'
,但它需要用于
重定向\u uri的参数

$getStr = self::FB_GRAPH_URL . 'oauth/access_token?' . http_build_query(array(
           'client_id'     => 'APP_ID',
           'redirect_uri'  => 'REDIRECT_URI',
           'client_secret' => 'SECRET_KEY',
           'code'          => $fbCode)
          );
然后,您不能将此呼叫的应答作为您的
访问令牌
,因为其中包含更多内容:

access_token=USER_ACCESS_TOKEN&expires=NUMBER_OF_SECONDS_UNTIL_TOKEN_EXPIRES
您只需要
访问\u令牌
的一部分:

$response = file_get_contents($getStr);
$params = null;
parse_str($response, $params);

$dbpath = "https://graph.facebook.com/me?access_token=" . $params['access_token'];

如果您没有足够的经验来阅读、理解和实现oauth2,为什么不使用呢?先生,我不知道如何使用它。此SDk的示例在我的站点上不可用。在哪里可以找到使用Facebook API的“逐步”手册?1。2.还有随fb php sdkUsing一起提供的SDK,它确实让很多事情更容易处理;我强烈建议使用它,而不是“手动”操作,因为手动操作更容易出错,并且存在许多陷阱,这显然不会让初学者更容易操作。(如果您在使用它时遇到问题,那么我们可以讨论这些。)–至于您的代码,我们没有人知道您的函数
krumo()
应该做什么……谢谢您,先生。我使用Facebook SDK。但我不明白什么是错误:“代码”:如何修复?Krumo()是PHP程序员非常好的调试器。你可以在下一个链接上找到它:谢谢你,你帮了我很多!:)
$response = file_get_contents($getStr);
$params = null;
parse_str($response, $params);

$dbpath = "https://graph.facebook.com/me?access_token=" . $params['access_token'];