Facebook C# SDK 在获取我/帐户时遇到问题

本文关键字:遇到 问题 SDK 获取 Facebook | 更新日期: 2023-09-27 18:31:38

我正在尝试编写一个Windows服务,该服务将在运行时发布到我的Facebook页面上,并提供结果。

我刚刚下载了Facebook C# SDK v6.0.10.0,并在.Net 4.0中编写了Windows应用程序

我创建了一个Facebook应用程序帐户,并获得了所需的AppID和密码。

最终目标是在我的Facebook页面墙上发布此Windows服务帖子作为页面而不是应用程序用户。

当我去获取我的Facebook应用程序的帐户时,我不断收到错误。

string strAppID = "my app api id";
string strSecret = "my app secret code";
Facebook.FacebookClient fbClient = new Facebook.FacebookClient();
fbClient.AppId = strAppID;
fbClient.AppSecret = strSecret;
dynamic ac = fbClient.Get("oauth/access_token", new
{
    client_id = strAppID,
    client_secret = strSecret,
    grant_type = "client_credentials"
});
string strAccessToken = String.Empty;
strAccessToken = ac.access_token;
if (!String.IsNullOrEmpty(strAccessToken))
{
    fbClient = new Facebook.FacebookClient(strAccessToken);
    fbClient.AccessToken = strAccessToken;
    fbClient.AppId = strAppID;
    fbClient.AppSecret = strSecret;
    //Here is where it is bombing
    dynamic fbAccounts = fbClient.Get("/me/accounts");
    fbClient = new Facebook.FacebookClient(strAccessToken);
    fbClient.AccessToken = strAccessToken;
    fbClient.AppId = strAppID;
    fbClient.AppSecret = strSecret;
    dynamic me = fbClient.Get("**Name of the facebook page I am trying to post to**");
    string strPageID = String.Empty;
    strPageID = me.id;
    string strPageAccessToken = String.Empty;
    //Loop over the accounts looking for the ID that matches your destination ID (Fan Page ID)
    foreach (dynamic account in fbAccounts.data)
    {
        if (account.id == strPageID)
        {
            //When you find it, grab the associated access token and put it in the Dictionary to pass in the FB Post, then break out.
            strPageAccessToken = account.access_token;
            break;
        }
    }

    try
    {
        fbClient.AccessToken = strPageAccessToken;
        var args = new Dictionary<string, object>();
        args["message"] = "Testing 123";
        fbClient.Post("/" + strPageID + "/feed", args);
    }
    catch (Facebook.FacebookOAuthException ex)
    {
        // oauth exception occurred
    }
    catch (Facebook.FacebookApiLimitException ex)
    {
        // api limit exception occurred.
    }
    catch (Facebook.FacebookApiException ex)
    {
        // other general facebook api exception
    }
    catch (Exception ex)
    {
        // non-facebook exception such as no internet connection.
    }
}

我得到的错误是在线的:

dynamic fbAccounts = fbClient.Get("/me/accounts");

(OAuthException - #2500) 必须使用活动访问令牌来查询有关当前用户的信息。

Facebook C# SDK 在获取我/帐户时遇到问题

请参阅此处:(OAuthException - #2500) 必须使用活动访问令牌来查询有关当前用户的信息

您正在获取应用程序的访问令牌,而不是用户的访问令牌。 因此,"我"没有意义。您应该在那里提供身份证件 - 您的用户 ID、您的应用 ID 或您的应用拥有的任何其他 ID 的权限。

dynamic ac = fbClient.Get("oauth/access_token", new
{
    client_id = strAppID,
    client_secret = strSecret,
    grant_type = "client_credentials"
});

上述代码可能不适用于版本 6.0。

OAuth 2.0 - 访问令牌的交换代码

FacebookClient 仅支持解析 json 响应。因此,由于这个 原因"OAuth/access_token"令牌在使用时不起作用 FacebookClient.Get("oauth/access_token").相反,您将需要使用 FacebookOAuthClient中的一个方法。

您可以在此处找到更多详细信息:http://blog.prabir.me/post/Facebook-CSharp-SDK-Making-Requests.aspx

希望这有帮助。