情况:我有一个网站并创建“帖子”。创建新帖子后,我想将新帖子发送到我的 Facebook 页面提要。我已经编写了所有代码来执行此操作,只要我从图形 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)}});