Facebook JS SDKコードから受け取ったauth_tokenを拡張しようとすると、次のエラーが発生します。
{"エラー":{"メッセージ": "指定されたaccess_tokenを使用してアプリケーションにアクセスできません"、 "タイプ": "OAuthException"、 "コード":1}}
グラフAPIエクスプローラーを使用して生成されたトークンを含めるようにURLを変更すると、正常に機能します。
何か案は?
Facebook JS SDKコードから受け取ったauth_tokenを拡張しようとすると、次のエラーが発生します。
{"エラー":{"メッセージ": "指定されたaccess_tokenを使用してアプリケーションにアクセスできません"、 "タイプ": "OAuthException"、 "コード":1}}
グラフAPIエクスプローラーを使用して生成されたトークンを含めるようにURLを変更すると、正常に機能します。
何か案は?
私はこの問題を経験していて、FBエンジニアから直接サポートを受けました。このエラーの原因として最も可能性が高いのは、ユーザーの「人口統計チェック」です。
私たちのアプリはアルコールに関連していたため、年齢制限がありました。特定のユーザーのプロファイルには、FBがその場所の飲酒年齢を超えていることを確認するのに十分な情報が含まれていなかったため、セッションの作成に失敗しました。なぜこれがこの呼び出しでのみ発生し、以前の呼び出しでは発生しなかったのか、私にはわかりません。
アプリには年齢制限などがありますか?
アプリケーションをテストするときに、このような問題に直面しました。Facebookのテストユーザーにはアクセストークンの拡張に関するバグがありますが、実際のユーザーにはありません。
問題は、国による制限があり、テストユーザーには国がないということでした。
したがって、アプリの制限も確認してください。
デバッガーを使用してトークンをデバッグし、上記のAPPIDと一致することを確認します。
メッセージは明確です。使用しているトークンはaccess_token用ではありません。
トークンをGraphAPIExplorerアプリまたは別のアプリと混同している可能性があります。
次のコードを使用してコードを生成します。アクセスコードを取得したら、それを拡張コードと交換できます。コードの最後の部分は、デバッグ方法を示しています。
$app_id = "XXXXXXXXX";
$app_secret = "YYYYYYYYYYYY";
$redirect_url = "http://www.example.com/page.php";
$fb_code = $_REQUEST['code'];
if(!$fb_code)
{
$login_dialog_url= "http://www.facebook.com/dialog/oauth?"
. "client_id=" . $app_id
. "&redirect_uri=" . urlencode( $redirect_url)
. "&scope=read_friendlists,read_stream,xmpp_login,user_online_presence,friends_online_presence,create_event,publish_stream&response_type=code";
echo("<script>location.href='" . $login_dialog_url . "'</script>");
}
else
{
$token_url="https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id
. "&redirect_uri=". urlencode($redirect_url)
. "&client_secret=" . $app_secret
. "&code=" . $fb_code;
$response = file_get_contents($token_url);
parse_str($response, $params);
$access_token = $params['access_token'];
echo 'Access Token: '.$access_token.'<br>';
必要に応じて、ここで拡張コードを生成します
if($access_token)
{
$token_url="https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id
. "&redirect_uri=". urlencode($redirect_url)
. "&client_secret=" . $app_secret
. "&grant_type=fb_exchange_token"
. "&fb_exchange_token=" . $access_token;
$response = file_get_contents($token_url);
parse_str($response, $params);
$extended_access_token = $params['access_token'];
echo 'Extended Access Token: '.$extended_access_token;
}
ここで拡張コードをデバッグします。
$expires = "https://graph.facebook.com/debug_token?input_token=$access_token&access_token=$extended_access_token";
$response = file_get_contents($expires);
echo "<pre>";
print_r(json_decode($response));
echo "</pre>";