我已经将我的网站与 Facebook Connect、授权/单点登录集成在一起,一切都很好。
现在我试图在用户的墙上发布一些东西,我遇到了一些问题。
首先,我使用“旧”JavaScript API(FeatureLoader.js)。
这些是 Graph API URL 使用的即时消息:
private const string UserDetails_Url = @"https://graph.facebook.com/{0}?access_token={1}";
private const string Feed_Url = @"https://graph.facebook.com/{0}/feed?access_token={1}";
private const string TokenExchange_Url = @"https://graph.facebook.com/oauth/access_token?{0}";
我正在使用TokenExchange_Url
URL 来接收唯一的用户 OAuth 令牌以进行调用。
这工作正常,因为 a) 我收到了返回的令牌,并且 b) 我可以向 Graph API(即UserDetails_Url
)发出 HTTP Get 请求并且它工作正常。
但是,我无法使用Feed_Url
.
我很确定问题是我没有适当的用户权限发布到墙上(即 facebook 端设置)。
现在,我意识到我可以在fbPublish
客户端使用 API 方法来执行此操作,但我想使用 Graph API 在服务器端执行此操作。
我不会费心展示我的代码,它尝试调用 Graph API 来发布到用户的墙上,因为它非常简单(HttpWebRequest、将方法设置为“POST”、设置内容类型/长度、将字节写入流等)。
我认为问题是我需要用户授予我的应用程序“publish_stream”扩展权限。
Facebook Graph API doco说要在您的授权请求中执行此操作:
https://graph.facebook.com/oauth/authorize?
client_id=...&
redirect_uri=http://www.example.com/callback&
scope=user_photos,user_videos,publish_stream
这让我很困惑,因为我使用以下 URL 来获取 OAuth 令牌:
https://graph.facebook.com/oauth/access_token?bunchofqsparams
我是否使用了错误的令牌交换 URL?为什么有两个不同的 URL 看似获取相同的信息?
是的 - 我已经阅读了 Facebook API doco(无数次),是的,我已经阅读了其他类似的 SO 问题,但是它们都导致使用客户端 API 发布到墙上,我想在服务器端进行。
对于实际的“Facebook Connect”按钮,我使用的是标准 FBML:
<fb:login-button length="long" size="medium" autologoutlink="false" background="light" onlogin="facebookLogin('/login')" class=" fb_login_not_logged_in FB_login_button FB_ElementReady"><a id="RES_ID_fb_login" class="fbconnect_login_button"><img id="RES_ID_fb_login_image" src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif" alt="Connect"></a></fb:login-button>
当我点击这个(而不是登录到 Facebook)时,它会弹出一个用户可以登录的窗口。但它没有“请求扩展权限”对话框——不应该吗?还是我需要手动触发另一个弹出窗口?
所以总结一下,这是我的问题:
- 如何授予扩展权限以发布到用户的墙?
- 获取 OAuth 令牌的正确 URL 是什么?
- 是否有明确的来源显示如何使用服务器端 Graph API 调用发布到用户的墙上?