我正在使用以下来获取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");
}
});
}
答案 0 :(得分:0)
您的PHP正在服务器上运行,而不是在浏览器中运行。您需要检查您从一个特定浏览器(IE)获得的输入,并找出问题所在。
答案 1 :(得分:0)
$session = $facebook->getSession();
$session['access_token'];
答案 2 :(得分:0)
我在IE9和我的画布应用程序中遇到了类似的问题,因为IE9默认拒绝没有适当的紧凑隐私政策的第三方cookie。
这解决了我的IE特定问题。)
标题('P3P:CP =“IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”');