Facebook graph api C SDK发布到我自己的页面提要
情况: 我有一个网站,并创建帖子。创建新帖子后,我想将新帖子发送到我的facebook页面订阅源。我有所有的代码来完成这项工作,只要我从GraphAPI浏览器工具获得一个访问令牌,它就可以正常工作。这将不起作用,因为它将在大约一小时后过期。当我从代码生成访问令牌时,它似乎是一个应用程序访问令牌,它不允许我访问我的页面。所以最大的问题是如何从有权发布到我的页面的代码中获取用户访问令牌 下面是我获取访问令牌的方式Facebook graph api C SDK发布到我自己的页面提要,facebook-graph-api,facebook-c#-sdk,oauth-2.0,Facebook Graph Api,Facebook C# Sdk,Oauth 2.0,情况: 我有一个网站,并创建帖子。创建新帖子后,我想将新帖子发送到我的facebook页面订阅源。我有所有的代码来完成这项工作,只要我从GraphAPI浏览器工具获得一个访问令牌,它就可以正常工作。这将不起作用,因为它将在大约一小时后过期。当我从代码生成访问令牌时,它似乎是一个应用程序访问令牌,它不允许我访问我的页面。所以最大的问题是如何从有权发布到我的页面的代码中获取用户访问令牌 下面是我获取访问令牌的方式 private static string GetApiAccessToken()
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;
}
现在就像我说的,如果我使用graph explorer中的访问令牌,代码可以正常工作。
然后将post发送到graph 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)}});
确保用户访问令牌具有管理页面扩展权限 然后向我/帐户发出请求以获取页面访问令牌
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;
}
然后使用页面访问令牌发布到{pageid}/feed
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;
}