Проблема приложения FaceBook - PullRequest
0 голосов
/ 22 апреля 2011

Я использую следующее для получения 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);

и использую Graph API для получения деталей из идентификатора запроса, используя следующий фрагмент

$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 Неустранимая ошибка: Uncaught OAuthException: должен использоваться активный токен доступадля запроса информации о текущем пользователе.
добавляется в facebook.php в строке 560,
referer: http://< my_url>? request_ids = 1934696176864 & ref = notif¬if_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 голосов
/ 22 апреля 2011
$session = $facebook->getSession();
$session['access_token'];

посмотрите @ Проверка подлинности приложения FACEBOOK - PHP

0 голосов
/ 14 сентября 2011

У меня была похожая проблема с IE9 и моим холст-приложением, потому что IE9 по умолчанию отклоняет сторонние куки-файлы без надлежащей компактной политики конфиденциальности.

Это исправило мою специфическую проблему IE.)

header('P3P: CP = "IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONI HIS НАШ ИНД CNT"');

0 голосов
/ 22 апреля 2011

Ваш PHP работает на сервере, а не в браузере.Вам нужно проверить входные данные, которые вы получаете от одного конкретного браузера (IE), и выяснить, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...