簡體   English   中英

Facebook PHP SDK:現在獲得“long-lived”訪問令牌,因為“offline_access”已被棄用

[英]Facebook PHP SDK: getting “long-lived” access token now that “offline_access” is deprecated

基本問題:我希望我的應用程序即使在用戶離開時也可以撥打關於授權用戶的Facebook圖形API。

例如,我希望用戶(A)授權應用程序,然后我希望用戶(B)能夠使用該應用程序查看有關用戶(A)的朋友的信息。 具體來說:“工作”字段。 是的,我正在請求那些擴展權限( user_work_historyfriends_work_history等)。 目前,我的應用程序可以訪問登錄用戶的朋友工作歷史記錄,但不能訪問應用程序其他用戶的任何朋友的工作歷史記錄。

這就是我所知道的:

  • offline_access添加到scope參數是舊方法,它不再起作用。
  • 新的方式是使用“長壽”訪問令牌, 這里描述。 這些持續60天。
  • 我需要交換一個普通的訪問令牌來獲取新的擴展令牌。 FB文檔說:

    https://graph.facebook.com/oauth/access_token
    client_id = APP_ID&client_secret = APP_SECRET&grant_type = fb_exchange_token&fb_exchange_token = EXISTING_ACCESS_TOKEN

這是我不知道的(我希望你能告訴我):我如何使用Facebook PHP SDK獲得擴展(又名“長壽”)訪問令牌? 目前,我的代碼如下所示:

$facebook->getAccessToken();

有這樣的事嗎?:

$facebook->getExtendedAccessToken();

如果沒有,這是我應該做的嗎?

$accessToken = $facebook->getAccessToken();
$extendedAccessToken = file_get_contents("https://graph.facebook.com/oauth/access_token?             
    client_id={$appId}&
    client_secret={$secret}&
    grant_type=fb_exchange_token&
    fb_exchange_token={$accessToken}"
    );

我試過了它並沒有用。 我收到此錯誤:

Warning: file_get_contents(https://graph.facebook.com/oauth/access_token? client_id=#######& client_secret=#########& grant_type=fb_exchange_token& fb_exchange_token=##########) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /...

如果我切換到FQL而不是圖形API,它會有什么不同嗎? 我已多次閱讀Facebook文檔,但PHP sdk沒有完整記錄,我找不到任何有關如何工作的示例。

我終於自己想出來了。 答案非常反高潮。 看來新創建的應用程序會自動獲得60天的訪問權限。 我不確定這是否依賴於在應用程序設置的“遷移”部分中啟用“depricate offline_access”設置。 保持安全。

所以在撰寫本文時,您可以使用PHP SDK,如下所示: $facebook->getAccessToken();

(我的應用程序未按預期工作的原因與訪問令牌的到期無關。)

還有一件事,要使用PHP SDK獲取長期訪問令牌,您應該調用$facebook->setExtendedAccessToken(); $facebook->getAccessToken();

在上一個Facebook PHP SDK 3.2.0中,你有一個新函數setExtendedAccessToken() ,你必須在getAccessToken();之前調用它getAccessToken();

像這樣:

$user = $facebook->getUser(); 
$facebook->setExtendedAccessToken(); //long-live access_token 60 days
$access_token = $facebook->getAccessToken();

實際上,如果您使用服務器端呼叫,新創建的應用程序只會自動獲得60天訪問令牌。 如果您正在使用問題中上面顯示的客戶端端點,那么即使是新應用最初仍會收到短期令牌。 請參閱: https//developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/

我在使用New Endpoint時遇到了相同的HTTP / 1.1 400錯誤請求錯誤,問題是如果你復制了Facebook准確提供的代碼並將其粘貼到你的應用程序中,那么params之間實際上有空格,這意味着url中不必要的空格,並且在傳遞到file_get_contents()時不會被正確調用,即使它在瀏覽器中粘貼時也能正常工作。 這花了我太長時間才弄明白。 希望這有助於某人! 這是我完整的工作代碼,用於將擴展訪問令牌從新端點中取出(將x替換為您的值):

$extend_url = "https://graph.facebook.com/oauth/access_token?client_id=xxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxxx&grant_type=fb_exchange_token&fb_exchange_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

$resp = file_get_contents($extend_url);

parse_str($resp,$output);

$extended_token = $output['access_token'];

echo $extended_token;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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