2012-03-08 13 views
0

私は新しいアルバムを作成し、写真をユーザーの壁に投稿することを含む、最初のFacebookブックアプリを開発しています。 Facebookのドキュメンテーションやチュートリアルを通して学習して、このコードを思いついたが、それに続いてエラーが発生している。未知のOAuthException:アプリケーションの検証エラー

Fatal error: Uncaught OAuthException: Error validating application. Thrown in /home/base_facebook.php on line 1106

プラス:それは重要かどうかはわからないが、私は

echo $facebook->getUser();

変数をプリントアウトしていたときに、それは私を与える「0」リターンでさえユーザーかかわらず、 (この場合は自分自身です)がログインしています。

親切に私を助けてください。

コード:

$config = array(
'appId' => '3663250024856', 
'secret' => 'b14ac6d2b7dbdtyb259599b06983e881', 
'fileUpload' => true, 
'cookie' => true 
); 


     $facebook = new Facebook($config); 
     echo "USER STATUS:".$facebook->getUser(); 
     $facebook -> setFileUploadSupport(true); 

     $album_details = array('message' => 'Album desc', 'name' => 'Album name'); 
     $create_album = $facebook -> api('/me/albums', 'post', $album_details); 

     $album_uid = $create_album['id']; 

     $photo_details = array('message' => 'Photo message'); 
     $file = "temp/".$imageName; 
     $photo_details['image'] = '@' . realpath($file); 

     $upload_photo = $facebook -> api('/' . $album_uid . '/photos', 'post', $photo_details); 

答えて

3

ユーザーがログインしているにもかかわらず、ユーザーはあなたがAPI呼び出しを行うことができます前に、あなたのアプリに許可を与える必要があります。

基本的にFacebookのPHP SDKを使用してユーザ認証のための流れは次のようにする必要があります:

  1. ユーザーがログインしてあなたのアプリに許可を与えているかどうかを検出します。

  2. 許可を得ていない場合は、彼をログインとアプリケーションの許可ページにリダイレクトします。ログインして許可を与えた後、彼は再びアプリケーションページにリダイレクトされます。それ以外の場合は

    、ここで...

はあなただけ変更した場合に動作するはずの認証を処理するためのPHP SDKのドキュメントページから修正されたサンプルコードでは、API呼び出しを行う、あなたのアプリのコンテンツを表示appId、appSecret and redirect_uri:

<?php 
require_once 'fb_php_sdk/facebook.php'; 

$appId = 'your_app_id'; 
$appSecret = 'your_app_secret'; 

// Create your Application instance (replace this with your appId and secret). 
$facebook = new Facebook( 
    array(
     'appId' => $appId, 
     'secret' => $appSecret, 
    'fileUpload' => true, 
    'cookie' => true 
)); 

// Get User ID 
$user = $facebook->getUser(); 

if ($user) 
{ 
    try { 
     // Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
    } 
} 

// Login or logout url will be needed depending on current user state. 
if ($user) 
{ 
    $logoutUrl = $facebook->getLogoutUrl(); 
} 
else 
{ 
    $loginUrl = $facebook->getLoginUrl(
          array(
           'canvas' => 1, 
           'fbconnect' => 0, 
           'scope' => '',//these are the extended permissions you will need for your app, add/remove according to your requirement 
           'redirect_uri' => 'http://apps.facebook.com/test_app_azk/',//this is the redirect uri where user will be redirected after allow, 
           ));          
} 

if ($user) 
{ 
    //show the content of your app 
    //make api calls 
    var_dump($user_profile); 
} 
else 
{ 
    //redirect user to loginUrl 
    echo "<script>parent.location = '".$loginUrl."';</script>"; 
} 

希望すると便利です。

+0

私は間違っていないよ場合、ユーザーは最初のアプリを承認したときに許可が与えられます。..ユーザーが許可に彼がアプリを使用するか、すべての時間を与える必要はありません。彼は?最初のケースのユーザーは既にアプリを承認していますか?親切にそれをクリアしてください。 – Maven

+0

はい、あなたは正しいです。ユーザーが最初にあなたのアプリを訪問したときにのみ許可を与える必要があります。その後、ユーザーをloginUrlにリダイレクトすると、有効なaccess_tokenを持つアプリケーションページに戻り、アプリがAPI呼び出しを行うことができます。 –

+0

私はあなたが認証され、アプリケーションページにリダイレクトされた後、どのように 'access_token'を取り出すことができますか? – Maven

1

この問題は、elseステートメント内にある可能性があります。 elseを使用する代わりに、if(!user)を使用します。それは問題を解決するはずです。

4

私がウェブで見つけたベストワーキングソリューション。 PHPのページの上部に以下のコードを追加します。

$app_id = "YOUR_APP_ID"; 
$app_secret = "YOUR_APP_SECRET"; 
$my_url = "YOUR_URL"; 


    $code = $_REQUEST["code"]; 

    if(empty($code)) { 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" 
     . $_SESSION['state']; 

    echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
    } 

    if($_REQUEST['state'] == $_SESSION['state']) { 
    $token_url = "https://graph.facebook.com/oauth/access_token?" 
     . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) 
     . "&client_secret=" . $app_secret . "&code=" . $code; 

    $response = @file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 

    $graph_url = "https://graph.facebook.com/me?access_token=" 
     . $params['access_token']; 
    } 
関連する問題