faceBook应用问题

时间:2011-04-22 06:21:04

标签: php ajax facebook

我正在使用以下来获取appToken

$ch = curl_init();   
curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/oauth/access_token?client_id='.$config->getAppId().'&client_secret='.$config->getAppSecret().'&grant_type=client_credentials&scope=offline_access');  

curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_HEADER, false);  
$app_token= curl_exec($ch);
curl_close($ch);

并使用图表API通过以下代码段从请求ID中获取详细信息

$ch = curl_init();
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);    
curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/'.$requestId.'?'.$app_token);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_HEADER, false);
$request= curl_exec($ch);

curl_close($ch);

一切正常,除了IE ......

在IE中使用我的应用程序时,我在日志中遇到以下错误

PHP致命错误:未捕获OAuthException:必须使用活动访问令牌来查询有关当前用户的信息。
 在第560行的 facebook.php中抛出
referer:http://< my_url>?request_ids = 1934696176864& ref = notif& notif_t = app_request

编辑 - 完整代码

<?php 
    include './facebook.php';
    include './config.php';
    include './database.php';

    $config = new Config();
    $database = new Database();
    $facebook = new Facebook(array(
        'appId'  => $config->getAppId(),
        'secret' => $config->getAppSecret(),
        'cookie' => false,
    ));

$sent_to_id='';
if(isset($_GET['request_ids']) && !empty($_GET['request_ids'])){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/oauth/access_token?client_id='.$config->getAppId().'&client_secret='.$config->getAppSecret().'&grant_type=client_credentials&scope=offline_access');
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $app_token= curl_exec($ch);
    curl_close($ch);
    echo 'Acces_Token:    '.$app_token .", Session Acces Token: ".$session['access_token'];

    //$app_token = file_get_contents('https://graph.facebook.com/oauth/access_token?client_id='.$config->getAppId().'&client_secret='.$config->getAppSecret().'&grant_type=client_credentials'); //Get application token
    $sent   = explode(',', $_GET['request_ids']);  //Convert csv to array
    $count = count($sent); //count how many objects in array
    for ($a = 0; $a < $count; $a++) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
        curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/'.$sent[$a].'?'.$app_token);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        $request= curl_exec($ch);
        curl_close($ch);

        //$request = file_get_contents('https://graph.facebook.com/'.$sent[$a].'?'.$app_token);
        preg_match("/\"to\":\{\"name\":\"(.*?)\",\"id\":\"(.*?)\"/i", $request, $getInfo);
        echo "sent[.".$a."] : ". $sent[$a] .", getInfo[1]: " . $getInfo[1] . ", getInfo[2]: ". $getInfo[2] ;
        echo ", AppToken: ".$app_token;
        $sent_to_name_temp= $getInfo[1];
        $sent_to_id_temp =  $getInfo[2];

        if(!empty($sent_to_name_temp) && !empty($sent_to_id_temp)){
                $sent_to_id .=  $getInfo[2] . ',';  
        }
    }
}
$sent_to_id = substr($sent_to_id, 0 , strlen($sent_to_id));
$userIds = explode(',', $sent_to_id);

$database->insert_invites($_GET['id'],$_GET['request_ids'], $userIds);
?>

客户端代码

        function showInvite(invitedby)  {
            FB.ui({ 
                method: "apprequests", 
                message: "Hey this is just for a testing App!",
                data: "accepted", //This will be passed back to you when a user accepts the request
                title: "Title wil be here!"
            },
            function(response) {
                if (response && response.request_ids) {
                    ajaxRequest(invitedby, response.request_ids);
                    $(".message").html("Your invitation has been sent");
                } else {
                    //alert('You must select some friends to send invitation!');
                }
            });
        }
        function ajaxRequest(invitedby, requestIds){
            $.ajax({
                url:"insertInvites.php?id=" + invitedby +"&request_ids="+requestIds,
                success:function(){
                    //alert("Successfully inserted into table");
                },
                failure:function(){
                    //alert("Error while insertting into database");
                }
            });
        }

3 个答案:

答案 0 :(得分:0)

您的PHP正在服务器上运行,而不是在浏览器中运行。您需要检查您从一个特定浏览器(IE)获得的输入,并找出问题所在。

答案 1 :(得分:0)

$session = $facebook->getSession();
$session['access_token'];

看看@ Authenticating a FACEBOOK Application - PHP

答案 2 :(得分:0)

我在IE9和我的画布应用程序中遇到了类似的问题,因为IE9默认拒绝没有适当的紧凑隐私政策的第三方cookie。

这解决了我的IE特定问题。)

标题('P3P:CP =“IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”');