新しいグラフAPIを使用してデータを取得しようとしていますが、OAuthから取得しているトークンが機能していないようです。
私が行っている電話は次のとおりです。
$token = file_get_contents('https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=<app_id>&client_secret=<app secret>');
これにより、文字列の長さが41のトークンが返されます。返されるものの例を示すために、サンプルの下に提供します(すべての数字を0に、すべて大文字を「A」に、小文字を「a」に変換)
access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.
このアクセストークンを取得し、それをデータの呼び出し要求に添付します。何も返さないため、正しいトークンではないようです。次のようにデータ呼び出しを行います。
file_get_contents('https://graph.facebook.com/<my_page's_id>/statuses?access_token=000000000000|AaaAaaAaaAAaAaaaaAaaAa0aaAA.')
ブラウザからこのページを直接手動で取得すると、500 /内部サーバーエラーメッセージが表示されます。
どんな援助もありがたいことに感謝します。
更新:
その後、メソッドをfile_get_contents()からcurlに変更しました。ヘッダーを取得すると、次のエラーメッセージが表示されます...
{"error":{"type":"OAuthException","message":"Missing client_id"}}
しかし、私の投稿配列には「client_id」が含まれていますか?!
Type = client_credを使用しないでください。これは、ユーザーがアプリに使用を許可するアクセストークンではありません。 client_credタイプのアクセストークンを取得するために、redirect_uriやコード、または承認は必要ありません。
Facebookは、現時点でOAuth 2の初期ドラフトを実装しています。したがって、「状態」のサポートはまだありません。
ただし、状態をredirect_uriにサフィックスできるのは素晴らしいことです。ここで注意すべき重要な点は、指定したサイトのURL(redirect_uri)です
持つべきではない
末尾にある疑問符、またはクライアント状態として接尾するもののどこか、エンコードされているかどうかに関係なく。行った場合、恐ろしい「検証コードの検証エラー」が表示されます
そのように使用しないでください
正しいURLは http://www.Redirect.com/ です
それが役に立てば幸い。
これは私のために働く:-)
header('Location: https://graph.facebook.com/oauth/access_token?' . http_build_query(array(
'client_id' => FB_APP_ID,
'type' => 'client_cred',
'client_secret' => FB_SECRET,
'code' => $code)));
もちろん、代わりにfile_get_contentsを使用して、応答からトークンを解析します
私はまったく同じ問題に遭遇しましたが、問題はredirect_uriパラメータのエンコーディングではないことがわかりました、または末尾のスラッシュまたは疑問符があったことは、単に2つの異なるリダイレクトURLを渡したことです(仕様を読んでいませんでした時間)。
Redirect_uriは、「コード」トークンを使用して証明書利用者にリダイレクトするために、一度だけ(初めて)リダイレクトとして使用されます。 2回目、redirect_uriは認証サーバーに返されますが、今回は(リダイレクトするために)期待どおりには使用されず、認証サーバーがコードを検証するために使用されます。サーバーはaccess_tokenで応答します。
http://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.5.2
Facebookのドキュメント(ひどい)にfetchと書かれていることに気付くでしょう。fetchinghttps://graph.facebook.com/oauth/access_token 。 "
要約すると、Uriをエンコードしたり特別なことをしたりする必要はなく、同じredirect_uriを2回渡して、fetchに2ページ目を渡すだけです。内部にaccess_tokenを取得します。
Curlを使用して、ターミナル(OSXユーザー)経由でアクセストークンをリクエストできます。
curl -F type=client_cred -F client_id=xxxxxxxxxxxxxxx -F client_secret=c0f88xxxxxxxxxxxxxxxxxx1b949d1b8 https://graph.facebook.com/oauth/access_token
アクセストークンを取得したら、それを今後のcurlリクエストで使用して、新しいグラフAPIを介して変更を加えることができます。
プロファイルIDにメッセージを投稿します。
curl -F 'access_token=xxxxxxxxxxxxx|mGVx50lxxxxxxxxxxxxhzC2w.' -F 'message=Hello Likers' -F 'id=1250000000000905' https ://graph.facebook.com/feed
その点に注意してください
「タイプ」=>「client_cred」、
以下を回避する唯一の方法であると述べたが、上記も動作します
ユーザーがアプリケーションを承認した後、ユーザーを引数コード内の検証文字列で指定したリダイレクトURIにリダイレクトします。これはoauthアクセストークンと交換できます。 https://graph.facebook.com/oauth/access_token を取得してアクセストークンにアクセスするexact前のステップと同じredirect_uriを渡します。
経由: http://developers.facebook.com/docs/api 参照: http://forum.developers.facebook.net/viewtopic.php?pid=238371
たぶんあなたの問題は解決したかもしれませんが、私はまだあなたから受け入れられた答えを見つけられず、おそらくこの答えは同様の問題に直面している人々を助ける
まず、アプリケーションインスタンスを作成する必要があります。
$facebook = new Facebook(array(
'appId' => '149865361795547',
'secret' => 'ee827a8df6202e1857b3fc28f3185a61',
'cookie' => true,
));
access_tokenを取得する簡単な方法
$token = $facebook->getAccessToken();
質問するときにページのステータスを取得する
$response = $facebook->api($pageID . '/feed','get',$token);
ありがとう..
APIに従うようにしてください。つまり、type
なしで、redirect_uri
およびcode
(必要ない場合でも):
$token = file_get_contents('https://graph.facebook.com/oauth/access_token?client_id=<app_id>&client_secret=<app secret>&redirect_uri=<url>&code=<code>');
古い質問に投稿してすみません。最近のfbアクセスの変更による。私はこのコードを機能させており、助けを必要とする他の誰かのために投稿すると思いました。このメソッドはjQuery ajaxでうまく機能し、facebookからredirect_uriの例を削除します。
$ch = curl_init("https://graph.facebook.com/oauth/access_token?client_id=INSERT_YOUR_APP_ID_HERE&client_secret=INSERT_YOUR_APP_SECRET_HERE&grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 30000);
$data = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
curl_close($ch);
if ($curl_errno > 0)
{
echo "cURL Error ($curl_errno): $curl_error\n";
}
else
{
echo $data;
}
facebook以外のユーザーに表示するために公開されているaccess_tokenを出力します。つまり、ウェブサイトのグラフAPIを介したFacebookページフィードウォールです。 access_token = 191648007534048 | eVilnMh585rlQLZLvBAmqM6s-1g
クエリパラメータがURLエンコードされていることを確認してください。実際は次のようになります。
000000000000%7CAaaAaaAaaAAaAaaaaAaaAa0aaAA
注:typeパラメーターも必要と思われますが、それなしではメッセージとともに500エラーも発生します。
{
"error": {
"type": "OAuthException",
"message": "Error validating verification code."
}
}
不足している他のパラメーターで表示されるメッセージではなく。 ドキュメント で言及されているものを見ることができません。
接続URLがリダイレクトURIのベースではない場合にも、このエラーが発生する可能性があります。例えば
Connect URL: http://www.example.com/fb/connect/
Redirect URI: http://www.example.com/fb/connect/redirect
リダイレクトURIが接続URLと同じであるという問題に遭遇しましたが、リダイレクトURIの末尾の/を忘れたため、FBはそれらを異なるものとして認識し、認証に失敗しました。