[英]Facebook graph API - OAuth Token
我正在嘗試使用新的圖形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,這不是用戶授予您的應用使用的訪問令牌。 您不需要redirect_uri或代碼或任何批准來獲取client_cred類型訪問令牌。
Facebook目前實施了OAuth 2的早期草案。 所以還沒有對“國家”的支持。
但是你可以將你的狀態后綴為redirect_uri很不錯,這里要注意的重點是你指定的網站網址(這是redirect_uri)
不應該有
最后的問號或任何后綴為客戶端狀態,編碼與否的任何地方。 如果你這樣做,你會得到可怕的“錯誤驗證驗證碼”
不要那樣用
正確的網址是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參數的編碼,或者我有一個尾隨斜杠或問號只是我傳入了兩個不同的重定向網址(沒有讀過那個規范)時間)。
redirect_uri僅用作重定向一次(第一次),使用“代碼”標記重定向回依賴方。 第二次,redirect_uri被傳遞回auth服務器,但這次沒有像你期望的那樣使用(重定向),而是認證服務器使用它來驗證代碼。 服務器使用access_token進行響應。
http://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.5.2
你會注意到facebook文檔(這很糟糕)說fetch “通過獲取 https://graph.facebook.com/oauth/access_token來為訪問令牌交換它”。
總而言之,我沒有必要對Uri進行編碼或執行任何特殊操作,只需傳入相同的redirect_uri兩次,然后獲取第二頁以獲取內部的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
請注意
'type'=>'client_cred',
只是一種規避下面的方法,盡管如此,上述方法也有效
在用戶授權您的應用程序之后,我們將用戶重定向回您在參數代碼中使用驗證字符串指定的重定向URI,該驗證字符串可以交換為oauth訪問令牌。 通過獲取https://graph.facebook.com/oauth/access_token將其交換為訪問令牌。 通過完全相同的REDIRECT_URI在前面的步驟:
via:by: http : //developers.facebook.com/docs/api參見: http : //forum.developers.facebook.net/viewtopic.php?pid = 238371
嘗試遵循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>');
也許你的問題已經解決,但我還沒有找到你接受的答案,也許這個答案可以幫助那些面臨類似問題的人
首先,我們必須創建我們的Application實例。
$facebook = new Facebook(array(
'appId' => '149865361795547',
'secret' => 'ee827a8df6202e1857b3fc28f3185a61',
'cookie' => true,
));
獲取access_token的簡便方法
$token = $facebook->getAccessToken();
獲得您在問題中提出的頁面狀態
$response = $facebook->api($pageID . '/feed','get',$token);
謝謝..
如果您的連接URL不是重定向URI的基礎,也可能會出現此錯誤。 例如
Connect URL: http://www.example.com/fb/connect/
Redirect URI: http://www.example.com/fb/connect/redirect
我遇到了一個問題,我的重定向URI與連接URL相同,但是我忘記了重定向URI上的尾隨/因此FB將它們視為不同並且未通過身份驗證。
很抱歉在舊問題中發帖。 由於最近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;
}
輸出公共可用的access_token以顯示給非Facebook用戶。 即通過圖表api為網站提供的Facebook頁面供稿牆。 =的access_token 191648007534048 | eVilnMh585rlQLZLvBAmqM6s-1G
您需要輸入實際值而不是<app_id>和秘密值。 代碼是您需要生成的唯一值,然后您提供的重定向URL將驗證代碼是否正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.