Facebook graph api 如何从离线应用程序(使用C#SDK)发布到公司Facebook页面?

Facebook graph api 如何从离线应用程序(使用C#SDK)发布到公司Facebook页面?,facebook-graph-api,facebook-c#-sdk,Facebook Graph Api,Facebook C# Sdk,我正试图使用Facebook的C#SDK将帖子发布到公司页面的墙上。 我需要从批处理作业中执行此操作,因此这不是任何特定用户正在与之交互的web应用程序。 我在自己的Facebook ID下设置了一个Facebook应用程序,我已授予它在我的帐户下发布流、共享项目、脱机访问和管理页面的权限。(我可以验证这些权限是否已授予我的Facebook设置页面下的应用。)并且我试图发布到的公司页面是我自己创建的页面,因此我应该拥有对该页面的完全访问权限 我正在使用该应用程序的应用程序ID和密码向Facebo

我正试图使用Facebook的C#SDK将帖子发布到公司页面的墙上。 我需要从批处理作业中执行此操作,因此这不是任何特定用户正在与之交互的web应用程序。 我在自己的Facebook ID下设置了一个Facebook应用程序,我已授予它在我的帐户下发布流、共享项目、脱机访问和管理页面的权限。(我可以验证这些权限是否已授予我的Facebook设置页面下的应用。)并且我试图发布到的公司页面是我自己创建的页面,因此我应该拥有对该页面的完全访问权限

我正在使用该应用程序的应用程序ID和密码向Facebook进行身份验证,获取一个访问令牌,整理一条要发布的消息,然后尝试发布它。我得到以下例外情况:

Facebook.FacebookOAuthException was unhandled by user code
Message=(OAuthException) (#200) The user hasn't authorized the application to perform this action
我尝试了一些关于这个主题的变化,但我似乎不知道我做错了什么。 以下是我的一些代码:

        var client = new FacebookClient("APP ID", "SECRET");
        _log.DebugFormat("access token={0}", client.AccessToken);
        dynamic parameters = new ExpandoObject();
        parameters.message = "testing 123";
        /* fill in other parameters */
        dynamic result = client.Post(FanPageId+"/feed", parameters);
        /* here's where I get the exception */
我看到过从/me/accounts返回的数据中提取特定于页面的访问令牌的引用,但我不知道如何从一个正在验证为Facebook应用程序而不是Facebook用户的离线应用程序中执行此操作

更新:通过使用以下代码连接到Facebook,我获得了部分成功:

        var client = new FacebookClient("NON-EXPIRING OAUTH TOKEN");
…其中“非到期oauth令牌”是在Facebook上的开发者应用程序中针对相关应用程序显示的令牌


不过,这仍然是用我自己的ID发布的帖子,因此现在我需要进一步了解如何让帖子看起来来自页面本身。

我现在已经了解了这一点,所以我要回答我自己的问题。这个方法允许我只使用Facebook.dll(不需要Facebook.Web.dll),在粉丝页面的“名称”下发布到粉丝页面,而无需用户干预

//为可以管理风扇页面的应用程序使用非过期访问令牌初始化
var client=新的FacebookClient(fbAppOaToken);
//获取帐户,为拥有fan pge管理员权限的用户使用Facebook ID
dynamic accts=client.Get(string.Format(“/{0}/accounts”,fbAppAdminUser));
//查找风扇页的访问令牌
字符串页\访问\令牌=null;
foreach(账户数据中的var账户)
{
if(acct.id==fbFanPageId)
{
页面访问令牌=帐户访问令牌;
打破
}
}
//填写要发布的消息的参数
动态参数=新的ExpandooObject();
parameters.message=“testing 123”;
//并包括上面检索到的访问令牌
parameters.access\u token=页面访问\u token;
动态结果=client.Post(fbFanPageId+“/feed”,参数);

如果有人有更快或更简单的方法,请让我知道。我真的只是跌跌撞撞地完成了这个,直到我把足够多的拼图拼在一起,让这个工作。谢谢。

很可能您必须先向自己申请“管理页面”权限,然后才能在页面上执行某些操作。以您为例,我无法从acct.access\u令牌中获得任何值。如果我手动创建一个令牌字符串,那么我可以让client.Post无误地执行,但是我在页面上找不到该Post。当我试图发布完全相同的消息时,我得到一个异常,说该帖子是重复的,是不允许的。我是否遗漏了此处未提及的任何步骤?您遇到过这些问题吗?您是否使用了一个好的代币作为开始?(我的例子中的'fbapoatoken')我建议稍微玩弄一下Graph API Explorer(),看看您是否拥有所有应该拥有的权限。使用该令牌,然后发出/xxx/accounts调用,看看您是否真的有权管理您试图发布到的页面。