Прерывистое плохое приложение Facebook access_token - PullRequest
1 голос
/ 02 декабря 2011

Я создаю тестовых пользователей в 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;
}

Ошибка:

Uncaught OAuthException: (# 15) Этот метод должен вызываться с приложением 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

Я пытался очистить куки. Казалось, это сработало, но могло быть совпадением с чем-то другим, потому что это не так.

Я предполагаю, что токен доступа, полученный после изменений FB, всегда возвращается один и тот же.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Марк

для токена доступа пользователя, который я использую ниже, где число - это идентификатор моего приложения."используется с 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 голос
/ 03 декабря 2011

Я допустил ошибку.Что я не заметил, так это то, что эта проблема возникала только после того, как я открыл другую вкладку браузера и вошел в Facebook как я или тестовый пользователь.Новый сеанс Facebook мешал API.

Я полагаю, что API использует маркер доступа вошедшего в систему пользователя вместо того, что было передано в запросе.Видимо, как только вы это поймете!

Надеюсь, это поможет следующему человеку: -)

...