间歇性的Facebook应用程序access_token

时间:2011-12-02 15:59:52

标签: facebook oauth access-token

我正在Facebook为我的应用程序创建测试用户。它有时有效。如果没有,则此调用发生错误:

function getTestAccounts($fb, $a) {
$s = urlencode($a);
**$accounts = $fb->api("/{$fb->getAppId()}/accounts/test-users?access_token=$s");**
if( isset($accounts['data']) )
    return $accounts;
else
    return null;
}

错误是:

  

未捕获OAuthException:(#15)必须使用app access_token调用此方法。

之前我已经使用此功能获得了令牌:

function getAppAccessToken($fb) {
$access_token_url = "https://graph.facebook.com/oauth/access_token";
$parameters = "grant_type=client_credentials&client_id=" . $fb->getAppId() .    "&client_secret=" . $fb->getApiSecret() . "&junk=1";
return file_get_contents($access_token_url . "?" . $parameters);
}

当我输出有问题的令牌时,它看起来像这样并且不会改变(应该吗?)

=的access_token 229234510434203 | TK2UDoGCPthCBeDIvhRIPkSG8Wk

我尝试过清除Cookie。这似乎有效,但可能与其他东西巧合,因为它现在不存在。

我假设从FB返回的访问令牌发生了变化,但它总是会回来的。

2 个答案:

答案 0 :(得分:2)

标记

对于用户访问令牌我使用下面的,其中数字是我的应用程序ID。 “与php-sdk一起使用”

$access_token = $_SESSION['fb_135669679827333_access_token'];

对于应用程序访问令牌,我使用cURL

$app_access_token = GetCH();
function GetCH(){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
if(substr($url,0,8)=='https://'){
    // The following ensures SSL always works. A little detail:
    // SSL does two things at once:
    //  1. it encrypts communication
    //  2. it ensures the target party is who it claims to be.
    // In short, if the following code is allowed, CURL won't check if the 
    // certificate is known and valid, however, it still encrypts communication.
    curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
}
$sendCH = curl_exec($ch);
curl_close($ch);
return $sendCH;
};

如果有帮助,请告诉我。

答案 1 :(得分:1)

我犯了一个新手的错误。我没注意到的是,这个问题只发生在我打开另一个浏览器选项卡并以我自己或测试用户身份登录到Facebook之后。新的Facebook会话正在干扰API。

我猜API使用登录用户的访问令牌而不是请求中传递的内容。一旦你理解它就显而易见了!

希望这有助于下一个人: - )