0

完全なコード。

    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);
        }

FacebookにGETクエリを作成しようとすると。

$dbpath = "https://graph.facebook.com/me?$accessToken" ;
$cont = file_get_contents($dbpath ) ;

エラーが発生しました:

ストリームを開くことができませんでした:HTTPリクエストが失敗しました!/home....でHTTP/1.0400の不正なリクエスト

$ dbpath value(path)を手動でWebブラウザーに貼り付けると、次のエラーが発生します。

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

そのエラーをどのように修正しますか?

4

1 に答える 1

1

サーバー側の認証フローを使用することをお勧めします。ドキュメントの呼び出しをチェックすることにより、どの呼び出しが間違っているかが非常に明確になります。

まず、oauth/access_tokenエンドポイントへの呼び出しは引数を取りませんが、再度'type' => 'client_cred'のパラメーターが必要です。redirect_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にはさらに多くのことが含まれているためです。

access_token=USER_ACCESS_TOKEN&expires=NUMBER_OF_SECONDS_UNTIL_TOKEN_EXPIRES

access_tokenそして、あなたはそれの一部だけが欲しいです:

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

$dbpath = "https://graph.facebook.com/me?access_token=" . $params['access_token'];
于 2012-08-27T15:18:33.170 に答える