簡體   English   中英

Facebook圖形API - OAuth令牌

[英]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?

正確的網址是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_uricode (即使我們不需要它):

$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編碼了您的查詢參數,您的實際應該是:

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將它們視為不同並且未通過身份驗證。

很抱歉在舊問題中發帖。 由於最近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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM