7

我只是直接潜入并给你一些关于我试图做什么,我尝试过什么,以及我前进道路上的障碍的背景知识。所以这里..

我的目标
从桌面应用程序发布到 Facebook 个人资料或墙上。
拥有自己 Facebook 帐户的个人用户将使用桌面应用程序。
目的是为每个用户创建自己的 Facebook 应用程序并获取应用程序 ID 和应用程序密码。
然后使用桌面应用程序中的应用程序 ID 和应用程序密码(保存在数据库或配置中的某处),以允许桌面应用程序的用户发布到他们的个人资料,而无需输入他们的电子邮件地址和密码即可登录

总而言之,每个 facebook 帐户 1 个 facebook 应用程序。
应用程序设置将保存在每个用户的桌面应用程序中 通过他们自己的 facebook 应用程序发布到他们自己的 facebook,而无需登录

这里的主要重点是用户不必通过窗口或浏览器手动登录。

我已经创建了我的 facebook 应用程序并将其设置为实时状态。我还在设置(在 facebook 内)中添加了所有可能的权限和扩展权限,以确保我没有遗漏任何东西。所以我确实有我的 AppID 和 App 密码。我还有我的客户端令牌,它说它可以用来代替“身份验证方法”的应用程序密码。我用它来获取我的访问令牌。我尝试了应用程序机密,但它没有返回访问令牌

我的尝试:

C# FACEBOOK SDK 所以,我开始并仍在尝试使用 c# sdk
我可以检索我的访问令牌但不能发布。

无论我尝试什么,我都会让他一直处于错误之下……这些只是我尝试过的许多代码示例中的两个。
(OAuthException - #2500) 必须使用活动访问令牌来查询有关当前用户的信息。

dynamic r = fb.Post("me/feed", new { message = "My seconds wall post using Facebook C# SDK" });

(OAuthException - #190) 客户端令牌不能用于此 API

dynamic r = fb.Post("kevin.maguire.965/feed", new { message = "My second wall post using Facebook C# SDK" });

我从以下链接中阅读了以下摘录,其中指出我的访问令牌是应用程序令牌,我需要用户或页面的访问令牌? 需要有关 OAuthException 代码 2500 的帮助 错误 2500 表示您没有访问令牌或应用程序访问令牌,但正在尝试访问 /me/ -“me”是“当前用户或页面 ID”的占位符,因此如果没有用户或页面的访问令牌

因此,我尝试使用以下答案( Facebook C# SDK Get Current User)取回用户 ID

var fb = new FacebookClient("access_token");
dynamic result = fb.Get("me", new [] { fields = "id" });
var userId = result.id;

我得到了访问令牌,我假设它是应用令牌而不是用户令牌

dynamic result = fb.Get("oauth/access_token", new
        {
            client_id = this.ApplicationId,
            client_secret = this.AppSecret,
            grant_type = "client_credentials"
        });

fb.AccessToken = result.access_token;

所以我现在不知道如何发布到我的个人资料

我可以使用 twitter 来实现上述目的,我可以使用他们提供的秘密、令牌、id 等......我可以从桌面应用程序成功发布到我的 twitter 帐户,而无需登录我的 twitter 帐户。

另一位用户也发现在 Twitter 上发帖很容易,没有任何实际问题。(facebook c# sdk 入门

他似乎也取得了成功,而我没有使用相同的代码 - 此代码在 2012 年 6 月使用,因此从那时起可能会发布重大更改。
我收到消息:(OAuthException - #2500)必须使用活动访问令牌来查询有关当前用户的信息......当我使用 sdk 时。当我尝试使用 Web 请求获取访问令牌,然后将该令牌传递给 sdk 对象以创建 facebookclient 时,我收到此消息 (OAuthException - #190) Invalid OAuth access token signature。

    WebRequest request = WebRequest.Create("https://graph.facebook.com/oauth/access_token?      grant_type=client_credentials&client_id=999999999999999&client_secret=edefefr8e09r8e08r080r8er0e");

        request.Method = "POST";

        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";

        // Get the request stream.
        Stream dataStream = request.GetRequestStream();

        // Close the Stream object.
        dataStream.Close();

        // Get the response.
        WebResponse response = request.GetResponse();
        dataStream = response.GetResponseStream();

        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);

        // Read the content.
        string accesstoken = reader.ReadToEnd();
        MessageBox.Show("accesstoken") 

        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();

        var fb = new FacebookClient(accesstoken);
        dynamic parameters = new ExpandoObject();
        parameters.message = "test";
        dynamic result = fb.Post("me/feed", parameters);
        var id = result.id;

显然,在上面的代码中,我将 id 和 secret 更改为虚拟值。

所以基本上伙计们......上面的链接和上面的代码只是我在过去几天里尝试过的东西的一小部分......我基本上已经没有选择了,在这里遗漏了一些可能会转移我注意力的东西很容易..或者可能不是:)我不知道。

如果有人甚至有一个简单的 Windows 窗体,或使用 c# sdk 或使用 restsharp 或仅使用带有“POST”方法的 WebRequest 对象的 wpf 窗口应用程序示例,那么我将永远是伟大的。

只是再次迭代它是一个桌面应用程序而不是 ASP.net 。

非常感谢大家的关注和时间。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

3

据我所知,您提供的访问令牌不正确。由于您尚未提供有关获取访问令牌的代码,我建议您查看此链接,该链接解释了如何构建 Facebook 应用程序,包括通过 WebBrowser 控件获取访问令牌。

编辑:您正在提供应用程序访问令牌,但正试图以用户身份发布。对于此操作,您需要一个用户访问令牌,您可以按照上面链接中的步骤获取该令牌。

于 2013-05-08T15:18:14.887 回答