2011-04-22 160 views
0

我使用下列获得APPTOKENFacebook应用程序问题

$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:必须使用活动访问令牌来查询有关当前用户的信息。 ?
facebook.php扔在管线560,
引用者:HTTP:// < my_url> request_ids = 1934696176864 & REF =通知符& notif_t = app_request

EDIT - 完整代码

<?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"); 
       } 
      }); 
     } 
+0

这是完整的代码?尝试添加如何设置'$ requestId'变量。你还正在做其他FB电话吗? – ifaour 2011-04-22 08:58:46

回答

0

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

+0

我错误地回滚你的改变,无法弄清楚你改变了什么。对不起 – Urvish 2011-04-22 06:37:47

+0

恩,你的整篇文章格式不正确。我通过重新应用正确的格式再次清理它。 – 2011-04-22 06:39:54

+0

感谢您的更正 – Urvish 2011-04-22 06:43:25

0

我与IE9类似的问题,我的画布上的应用程序,因为IE9在默认情况下拒绝第三方的cookies没有一个适当的紧凑隐私政策的。

这个固定我的IE的特定问题)

首标( 'P3P:CP = “IDC DSP COR ADM德维戴氏PSA PSD IVAi IVDI CONI HIS OUR IND CNT”');