断続的な悪いFacebookアプリAccess_Token
-
27-10-2019 - |
質問
アプリケーション用に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
私はグリーンホーンの間違いを犯しました。私が気づかなかったのは、この問題が別のブラウザタブを開いて、自分自身またはテストユーザーとしてFacebookにログに記録した後にのみ発生しているということでした。新しいFacebookセッションはAPIに干渉していました。
APIは、リクエストで渡されたものではなく、ユーザーにログインしたアクセストークンを使用していると思います。あなたがそれを理解したら、ちょっと明白です!
これが次の人に役立つことを願っています:-)
他のヒント
マーク
ユーザーアクセストークンには、以下を使用します。ここで、番号はアプリ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;
};
これが役立つかどうか教えてください。
所属していません StackOverflow