基本问题:我希望我的应用能够调用有关授权用户的 Facebook 图形 API,即使用户不在时也是如此。
例如,我希望用户 (A) 授权该应用程序,然后我希望用户 (B) 能够使用该应用程序查看用户 (A) 的好友信息。具体来说:“工作”领域。是的,我正在请求那些扩展权限(user_work_history
、friends_work_history
等)。目前,我的应用程序可以访问已登录用户的 friend 的工作历史记录,但不能访问该应用程序的其他用户的任何 friend 的工作历史记录。
这是我已经知道的:
- 将
offline_access
添加到范围参数是旧方法,它 不再有效。 - 新方法是使用“长期”访问 token , 描述 here .这些持续 60 天。
我需要交换一个普通的访问 token 来获取新的扩展 token 。 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 获取扩展的(也称为“长生命周期”)访问 token ?目前,我的代码如下所示:
$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 而不是 graph api,它的工作方式会有什么不同吗?我已多次阅读 Facebook 文档,但 PHP sdk 没有完整的文档,我找不到任何示例说明它应该如何工作。
最佳答案
我终于自己弄明白了。答案很反高潮。似乎新创建的应用程序会自动获得 60 天的访问 token 。我不确定这是否取决于在应用程序设置的“迁移”部分启用“depricate offline_access”设置。为了安全起见,请将其打开。
因此在撰写本文时,您可以按如下方式使用 PHP SDK:$facebook->getAccessToken();
(我的应用未按预期运行的原因与访问 token 过期无关。)
还有一件事,要使用 PHP SDK 获得长期访问 token ,您应该调用 $facebook->setExtendedAccessToken();
之前$facebook->getAccessToken();
关于Facebook PHP SDK : getting "long-lived" access token now that "offline_access" is deprecated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903991/