C#SDK发布到我自己的页面Feed

时间:2012-09-20 03:01:16

标签: facebook-graph-api facebook-c#-sdk oauth-2.0

情况: 我有一个网站,并创建“帖子”。在创建新帖子时,我想将新帖子发送到我的Facebook页面Feed。我已经完成了所有代码,只要我从图形API资源管理器工具中获取访问令牌,它就可以正常工作。这不会起作用,因为它在大约一个小时后过期。当我从代码生成访问令牌时,它似乎是一个应用访问令牌,它不会让我访问我的页面。所以最大的问题是如何从有权访问我的页面的代码中获取用户访问令牌。

以下是我获取访问令牌的方法。

 private static string GetApiAccessToken()
    {
        var client = new FacebookClient();
        dynamic result = client.Get("oauth/access_token", new
        {
            client_id = SessionGetter.Instance.FacebookApiKey,
            client_secret = SessionGetter.Instance.FacebookSecretKey,
            grant_type = "client_credentials",
            scope = "manage_pages"
        });

        return result.access_token;
    }

然后我使用访问令牌尝试获取页面访问令牌,这就是它告诉我我没有授权的地方,我在词典中找回的只是一个“id”。

private static string GetPageAccessToken(string accessToken, string pageId)
    {
        try
        {
            var fb = new FacebookClient(accessToken);

            var parameters = new Dictionary<string, object>();

            parameters["fields"] = "access_token";
            var result = (IDictionary<string, object>)fb.Get(pageId, parameters);

            var pageAccessToken = (string)result["access_token"];

            return pageAccessToken;
        }
        catch (FacebookApiException ex)
        {
        }
        return null;
    }   

就像我说的那样,如果我使用图浏览器中的访问令牌,代码就可以正常工作。 然后将帖子发布到图API

 var facebookClient = new FacebookClient(pageAccessToken);
            var result = (IDictionary<string, object>)facebookClient.Post("me/feed", new Dictionary<string, object>
{{"message",postMessage},                                                                              {"picture", csLogo},
{"link", LinkHelper.AssignmentUrl(wrapper.Assignment)}});

1 个答案:

答案 0 :(得分:0)

确保用户访问令牌具有manage_pages扩展权限。

然后向me/accounts请求获取页面访问令牌。

然后使用页面访问令牌发布到{pageid}/feed