1

请有人帮助我。我尝试了将近 1 个月...我想检索消息和数据。我使用最新的 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>
4

1 回答 1

3

哥们详细阅读了这篇,它会解决你的问题,你需要解析signed_request,在signed_request中你得到user_id,你可以得到像这样的签名请求authResponse.signed_request

或者,您可以使用下面的 Facebook 图形 api 方法代替这一行“$user_id= $facebook->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        
    }
});
于 2012-05-17T13:27:38.227 回答