0

ユーザーのデータを手動で取得することはできますが、プログラムで取得することはできません。

サーバー側のコードをそのまま使用する-https://developers.facebook.com/docs/authentication/

 <?php 

 $app_id = "MY_APP_ID";
 $app_secret = "MY_APP_SECRET";
 $my_url = "ADDRESS_OF_CURRENT_PAGE";

 session_start();
 $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'];

   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'];

   $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.");
 }

 ?>

出力はHelloのみで、ユーザー名は表示されません。

$ responseのエコーには出力がないのに対し、$ token_urlには適切な値があるため、問題はfile_get_contents()にあると思います。

   $response = @file_get_contents($token_url);
  • PHPバージョン=5.2.9
  • エラー報告はオフですが、これをコードに含めます--error_reporting(E_ALL); 出力はありません。

更新-それで、私は6か月後にこれを試しました、そしてそれはうまくいきました。それ以来変わったのは私のホスティングだけです。以前はHostBigを使用していました。レッスン-月額1ドルのホスティングサービスに依存しないでください。信頼することはできません。

4

2 に答える 2

0

このコードをローカルホストから実行しようとしていますか?はいの場合、それは機能しません。Facebookにアプリを登録する際には、アプリのWebサイトにアクセスしている必要があります。サーバーにスクリプトをアップロードし、app_id、secret、およびスクリプトのURLを編集します。次に、実行してみてください。

それでも機能しない場合は、とをエコーし​​てみて$dialog_urlください$token_url。まず、ブラウザに手動でコピーして貼り付け、$dialog_urlどのようなエラーが発生するかを確認します。認証を求められた場合は、アプリを認証します。ページに戻ります。次に$token_url、ブラウザで実行してみてください。サーバーが提供しているものを正確に応答します。

于 2011-12-03T06:55:51.197 に答える
0

それで、6か月後にこれを試しましたが、うまくいきました。それ以来変わったのは私のホスティングだけです。以前はHostBigを使用していました。

HostBigのPHP構成に問題があり、file_get_contents()が無効になっている可能性があります。

更新-私はHostBigの人たちと話をしましたが、彼らは安全上の理由からallow_url_fopenを無効にしたと言って、より安全な代替手段としてcURLを提案しました。

于 2012-06-22T21:29:24.903 に答える