2013-02-28 3 views
1

Я недавно узнал, через какой-то методом проб и ошибок, что просит графа API Facebook, используя JavaScript SDK иногда может вернуться со следующей ошибкойFacebook ошибка интеграции API через PHP

{ 
     "error":{ 
"message":"An active access token must be used to query information about the current user.", 
"type":"OAuthException","code":2500 
} 
} 

ответ

1

Быстрая, но несколько грязный раствор чтобы добавить access_token к каждому запросу в качестве параметра, а не полагаться на JavaScript SDK, чтобы сделать это для вас:

//request to get profile information for the current user 
FB.api("me", { 
access_token: "<access-token-for-user>" 
}, function(response){ 
//handle response here 
}); 

Подробнее

как правило, вы можете запустить свое клиентское приложение, вызвав FB.init с access_token для пользователя в качестве параметра. Это предназначено для обеспечения того, чтобы любой запрошенный FB.api был аутентифицирован путем присоединения вашего access_token к запросу GET на графике Facebook. Однако в некоторых случаях ваш токен может неожиданно исчезнуть из сеанса приложения, и все запросы к графу не удастся из-за того, что токен, отсутствующий в запросе GET, на граф Facebook.

Один воспроизводимый сценарий - отправить запрос FB.api, чтобы прокомментировать сообщение в facebook, которое было удалено. Это приведет к ошибке OAuth Exception и ошибочно удалит токен из текущего сеанса.

By adding the token manually to all of your FB.api requests, you can ensure the token is always included. 
0

Пожалуйста, проверьте этот код, маркер доступа отправить в URL здесь:

<?php 

$facebook_appid   = "facebook_appid";         // Facebook appplication id 
$facebook_secret  = "facebook_secret";    // Facebook secret id 
$facebook_pageid  = "facebook_pageid";        // Facebook secret id 
$redirect_uri   = "https://localhost/facebook_page/events.php"; // return url to our application after facebook login ## should be SAME as in facebook application 
//$redirect_uri   = "https://localhost/facebook_page/fb_login.php"; // return url to our application after facebook login ## should be SAME as in facebook application 
$scope     = "user_photos,email,user_birthday,user_online_presence,offline_access,manage_pages,publish_stream,user_events,friends_events"; // User permission for facebook 


$code     = $_REQUEST["code"]?$_REQUEST["code"]:""; 

if(empty($code)) { 
    $_SESSION['state'] = time(); // CSRF protection 
    $dialog_url   = "https://www.facebook.com/dialog/oauth?client_id=". $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri) . "&state=". $_SESSION['state'] . "&scope=".$scope; 
    header("location:".$dialog_url); 
} 

if($_SESSION['state'] && ($_SESSION['state'] == $_REQUEST['state'])) { 
    $token_url   = "https://graph.facebook.com/oauth/access_token?". "client_id=" . $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri). "&client_secret=" . $facebook_secret . "&code=" . $code; 
    $response   = @file_get_contents($token_url); 

    $params    = null; 
    parse_str($response, $params); 

    $account_url  = "https://graph.facebook.com/".$facebook_pageid."?fields=access_token&access_token=".$params['access_token']; 
    $resp    = @file_get_contents($account_url); 

    $dt     = json_decode($resp); 


    echo $dt->access_token; 
    echo "<br>"; 
    echo $dt->id; 

    $offer_url  = "https://graph.facebook.com/".$dt->id."/feed?access_token=".$dt->access_token; 
    $off    = @file_get_contents($offer_url); 
    $dto    = json_decode($off); 

    echo "<pre>"; 
    print_r($dto); 


} 

?> 
Смежные вопросы