使用Facebook PHP SDK,当我尝试发布状态更新时,我收到以下错误:
致命错误:未捕获OAuthException: (#200)用户未授权 应用程序执行此操作
这些是我采取的步骤:
获取代码:
https://graph.facebook.com/oauth/authorize?client_id=FB_APP_ID&redirect_uri=REDIRECT_URI
获取访问令牌:
https://graph.facebook.com/oauth/access_token?client_id=FB_APP_ID&code=CODE&client_secret= FB_SECRET&redirect_uri=REDIRECT_URI
尝试更新状态:
require_once(facebook.php);
$fb = new Facebook(array(
'appId' => FB_APP_ID,
'secret' => FB_SECRET
));
$post = $fb->api('me/feed', 'POST', array(
'access_token' => ACCESS_TOKEN,
'message' => 'hello world!'
));
我的应用程序中没有看到任何会授权应用程序执行此操作的设置,但也许我遗漏了一些东西。有什么建议吗?
答案 0 :(得分:12)
请确保在申请代码时要求延长publish_stream
权限(作为第三个参数添加):
https://graph.facebook.com/oauth/authorize?client_id=' . FB_APP_ID . '&redirect_uri=' . REDIRECT_URI . '&scope=publish_stream'
希望这有帮助。
干杯!
答案 1 :(得分:6)
我遇到了同样的问题,这篇文章真的帮助了我http://facebook.stackoverflow.com/a/8502709/965536
与我的问题唯一不同的是我使用的是PHP SDK,但基本上它的工作方式相同。我使用了api调用
$permissions = $facebook->api('/me/permissions');
然后您可以运行支票
if(isset($permissions['data'][0]['publish_stream']) && $permissions['data'][0]['publish_stream'])
这对我有用,但有人可能有更好的答案。您还应该将您的发布帖子流包装在try catch
中希望这有帮助。
由于
答案 2 :(得分:1)
我在这里提供了更多信息:
马克回答上面的话让我走向了正确的方向。但我花了5个小时才找到解决方案。所以,这是omniauth.rb的结果:
provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
:scope => 'email,user_birthday,publish_actions'
答案 3 :(得分:0)
您是否已采取其他步骤将用户与您的应用相关联并让他们授权您的应用执行这些操作?您需要注册用户,然后调用showPermissionDialog让他们登录并授权您的应用程序。这就是这个错误告诉你的。