facebook user_id总是返回0

时间:2012-05-15 09:45:58

标签: facebook facebook-graph-api

请有人帮助我。我差不多试了一个月......我想要检索消息和数据。我使用最新的FB API,我尽我所能找不到它的错误。我也无法撤回 user_id ..我是否需要在回叫功能上做任何事情?

应用网址:https://apps.facebook.com/greetingz/

这是我的整个代码

 <?php
    session_start();
    if(!empty($_REQUEST['request_ids'])) {
    require_once('src/facebook.php');

    $config = array();
    $config["appId"] = "XXXXXXXX";
    $config["secret"] = "XXXXXXXXXXXX";
    $config["fileUpload"] = false; // optional

    // Create our Application instance.
    $facebook = new Facebook(array(
      'appId'  => $config["appId"],
      'secret' => $config["secret"],
      'cookie' => true,
    ));

        $user_id= $facebook->getUser();

    if($user_id){
      try {

            $app_token = $facebook->getAccessToken();

            $requests = explode(',',$_REQUEST['request_ids']);
            foreach($requests as $request_id) {

            $data = $facebook -> api('/'.$user_id.'/apprequests?'.$app_token);

            //you will delete the request here
            $delete_url = "https://graph.facebook.com/".$request_id."_".$user_id."?".$app_token."&method=delete";
            $result = file_get_contents($delete_url);
        }

      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }else{
    ?>

    <script>
      var oauth_url = 'https://www.facebook.com/dialog/oauth/';
      oauth_url += '?client_id=XXXXXXXXXX';
      oauth_url += '&redirect_uri=' + encodeURIComponent('https://apps.facebook.com/greetingz/');
      oauth_url += '&scope=user_birthday,user_events'
      window.top.location = oauth_url;
    </script>

    <?php
    };
    }

    else{


    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script src="js/jquery-1.6.2.min.js" type="text/javascript" ></script>
    <script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
    <title>Greetings</title>

    </head>

    <body>

    <div align="center">
      <object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="664" height="626">
        <param name="movie" value="flash/Candle_jey.swf" />
        <param name="quality" value="high" />
        <param name="wmode" value="opaque" />
        <param name="swfversion" value="6.0.65.0" />
        <!-- This param tag prompts users with Flash Player 6.0 r65 and higher to download the latest version of Flash Player. Delete it if you don't want users to see the prompt. -->
        <param name="expressinstall" value="Scripts/expressInstall.swf" />
        <!-- Next object tag is for non-IE browsers. So hide it from IE using IECC. -->
        <!--[if !IE]>-->
        <object type="application/x-shockwave-flash" data="flash/Candle_jey.swf" width="664" height="626">
          <!--<![endif]-->
          <param name="quality" value="high" />
          <param name="wmode" value="opaque" />
          <param name="swfversion" value="6.0.65.0" />
          <param name="expressinstall" value="Scripts/expressInstall.swf" />
          <!-- The browser displays the following alternative content for users with Flash Player 6.0 and older. -->
          <div>
            <h4>Content on this page requires a newer version of Adobe Flash Player.</h4>
            <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" width="112" height="33" /></a></p>
          </div>
          <!--[if !IE]>-->
        </object>
        <!--<![endif]-->
      </object>

    </div>
    <div class="main">

    <div style="margin-left:300px; width:540px; margin:auto;">

    <table>
    <tr>
        <td>
            <span style="font-size:18px;font-family:'Trebuchet MS', Arial, Helvetica, sans-serif; color:#603;">Greeting :</span>
        </td>
        <td>
            <textarea type="text" name="message" id="msg" style="height:40px; width:350px;" ></textarea>
        </td>
        <td>
            <input type="submit" value="Send" id="one" style="color:#CCC; background-color:#603; border:none; width:80px; height:40px;"
            onclick="sendRequestViaMultiFriendSelector(); return false;"></span>
        </td>
    </tr>
    </table>
    </div>      

    <script>
      FB.init({
        appId  : 'XXXXXXXXXXX',
        status : true,
        cookie : true,
        frictionlessRequests: true,
        oauth: true
      });


      function sendRequestViaMultiFriendSelector() {

        FB.ui({method: 'apprequests',
          message: $("#msg").val(),

        },function getMultipleRequests(requestIds) {
            FB.api('', {"ids": requestIds }, function(response) {
            console.log(response);
             });
        }, requestCallback);
      }  

      function requestCallback(response) {
        // Handle callback here
        //var requestID = FB.api("/requestID", callback);   
        alert("Post was published.");
      }
    </script>

    <div id="fb">

    </div>
    <?php }?>
    </div>
    <script type="text/javascript">
    swfobject.registerObject("FlashID");
    </script>

    </body>
    </html>

1 个答案:

答案 0 :(得分:3)

Buddy详细阅读this,它将解决您的问题,您需要解析signed_request,在signed_request中您获得user_id,您可以获得像这样的签名请求authResponse.signed_request

或者您可以使用Facebook图形api方法代替此行“$ user_id = $ facebook-&gt; getUser();”在你的代码中。

FB.login(function(loginResponse) {
    if (loginResponse.authResponse) {
        var userId = loginResponse.authResponse.userID;

        // Work with userId here
        var signed_request = loginResponse.authResponse.signedRequest;
        //Work with signed request here
    }
    else {
        //User cancelled login or did not fully authorize        
    }
});