【发布时间】:2014-07-31 15:40:27
【问题描述】:
我正在尝试让 facebook php sdk v4 与我的应用程序一起使用。我正在使用 Drupal 和带有 phpfpm 的 nginx 服务器。
当我尝试从 facebook sdk 获取会话时,我收到错误 - 缺少重定向 uri 参数。在调试时,我发现发生了 2 件奇怪的事情 -
1) 如果我将 get url(由 sdk 生成)复制并粘贴到我的浏览器中,则会返回一个有效的访问令牌。
2) 如果我在 sdk 中将获取访问令牌的方法从 GET(default) 更改为 POST,则会向我的应用返回一个有效的访问令牌。
此外,当使用我从 POST 调用收到的访问令牌时,如果我向图形 api 发出进一步的 GET 请求,它们都不起作用。
但是,如果我发出 POST 请求,例如发布到我的墙上,它就可以工作。
另外需要注意的是,sdk 在内部使用 curl 来发出所有请求。
编辑: 代码示例 - 生成登录网址
$helper = new \Facebook\FacebookRedirectLoginHelper($this->redirectUrl);
$loginUrl = $helper->getLoginUrl(array('public_profile', 'email', 'user_friends', 'publish_actions'));
现在此人被带到 facebook 进行身份验证并重定向到我的重定向 url。这里的代码是 -
$helper = new \Facebook\FacebookRedirectLoginHelper($this->redirectUrl);
$session = helper->getSessionFromRedirect();
由于 getSessionFromRedirect 在内部使用 GET 调用,它对我不起作用。当我将 sdk 代码更改为使用 POST 时,会返回一个有效的访问令牌。
此外,当我使用 POST 请求获得有效会话时,这也有效
$response = (new FacebookRequest(
$session, 'POST', '/me/feed', array(
'link' => 'www.example.com',
'message' => 'User provided message'
)
))->execute()->getGraphObject();
但这不起作用 -
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
echo "Name: " . $user_profile->getName();
显然,所有 GET 请求似乎都存在问题。关于可能是什么问题的任何提示?
【问题讨论】:
-
你能提供一些你打电话的例子吗?用于获取会话和您进行的 GET 调用?
-
是的,添加它们!
-
谢谢。使用您检索到的访问令牌,您可以在 Graph Explorer 中复制问题吗? (developers.facebook.com/tools/explorer)
-
不,我不能。正如我所说,即使我只是将 url(带有查询参数)复制并粘贴到我的浏览器中,它也可以工作。但是 sdk 发出的 GET 调用似乎根本不起作用。
-
如果您的应用是 Canvas App 或 Page App,那么是的,您需要使用 POST 来检索会话数据。 GET 将适用于网站/非 Facebook 应用程序。
标签: php facebook facebook-graph-api drupal facebook-php-sdk