1

今日、私は Facebook API を使ってほとんどすべてを試しました。PHP SDK を使用しています。ユーザーとして、ページとして、アプリとしてログインすることができました。

可能な限りシンプルなログイン システムを作成しました。

ログイン.php

$app_id = "xx";
$app_secret = "xx";
$my_url = "continue.php";
session_start();   
// TOESTEMMING VRAGEN
$code = $_REQUEST["code"];
if(empty($code)) {
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
    . $_SESSION['state'] . "&scope=manage_pages";
    echo("<script> top.location.href='" . $dialog_url . "'</script>");
}

continue.php には次のコードがあります。

session_start();
if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['state'])) {
    $graph_url = "https://graph.facebook.com/me/accounts?access_token=" 
    . $params['access_token'];

    $accounts = json_decode(file_get_contents($graph_url));
    print_r($accounts);
} else {
    echo("The state does not match. You may be a victim of CSRF.");
}

ログインを取得しています。アクセスを許可できますが、続行すると次のメッセージが表示されます。

stdClass オブジェクト ( [エラー] => stdClass オブジェクト ( [メッセージ] => 現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります。 [タイプ] => OAuthException [コード] => 2500 ) )

私が達成しようとしていることは次のとおりです。私のウェブサイトの管理部分で、管理者がFacebookページに更新をページアカウントとして投稿できるダイアログを作成したいと考えています。また、アプリとしてログインしようとしましたが、それが正しい解決策かどうかわかりません。

どのソリューションにどのアプローチが必要かについて、ウェブ上でチュートリアルを見つけることができません。アプリとしてログインする利点は、管理者が Facebook アカウントを持っている必要がないことです。しかし、(アプリとして) Facebook ページに更新を投稿できますか?

申し訳ありませんが、私は少し混乱しています。ありがとう。

4

2 に答える 2

0

あなたのコードは不完全です。http://developers.facebook.com/docs/howtos/login/server-side-login/をもう一度読むことをお勧めします

ページ アクセス トークンを取得する前に、ユーザー アクセス トークンが必要です。

   if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['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);

     $_SESSION['access_token'] = $params['access_token'];

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

     $user = json_decode(file_get_contents($graph_url));
     echo("Hello " . $user->name);
   }
   else {
     echo("The state does not match. You may be a victim of CSRF.");
   }
于 2012-10-16T21:49:50.227 に答える
0

所有するページに投稿する基本的な例 (ページとして投稿):

user/page_owner がアプリを認証し、ログインしていることを確認してください (通常の FB API メソッド)。ユーザーmanage_pagesには、ページに対する (管理者) 権限が必要です。

$facebook = new Facebook(... );
$user = $facebook->getUser();

ページ アクセス トークンを取得します。

$page_id = 123456;
$page_info = $facebook->api('/'.$page_id.'?fields=access_token');

ページ アクセス トークンを使用してページに投稿します。

if (!empty($page_info['access_token'])) {
  $args = array(
    'access_token' => $page_info['access_token'],
    'message' => 'Testing SDK !',
  );
  $post_id = $facebook->api('/'.$page_id.'/feed', 'post', $args);
  error_log('successfully posted post id '.$post_id);
} catch (FacebookApiException $e) {
  error_log('caught exception: '. $e);
}

それでもアクセス トークン エラーが発生する場合は、ユーザー アクセス トークンをログに記録し、ユーザーアクセス トークンをテストしてデバッガーmanage_pagesに貼り付け、 perms が有効になっていることを確認します。

ページの権限に関するこの役立つブログ投稿も参照してください。

于 2012-10-16T22:13:43.317 に答える