Facebook C# SDK trouble getting me/accounts

杀马特。学长 韩版系。学妹 提交于 2020-01-03 03:03:08

问题


I'm trying to write a windows service that will post to my Facebook Page with results when it runs.

I just downloaded Facebook C# SDK v6.0.10.0 and writing the windows application in .Net 4.0

I created a facebook application account and got the AppID and Secret code needed.

The end goal would be to have this windows service post on my facebook page wall as the page and not the application user.

I keep getting an error when I go to get the accounts for my facebook application.

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.
    }
}

The error I am getting is on the line:

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

(OAuthException - #2500) An active access token must be used to query information about the current user.


回答1:


see here: (OAuthException - #2500) An active access token must be used to query information about the current user

you are getting access token for the APPLICATION, not for a user. Therefore, "me" does not make sense. You should supply ID there - either your user ID, or your app ID, or any other ID your app has permissions for.




回答2:


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

The above code may not work for version 6.0.

OAuth 2.0 - exchange code for access token

FacebookClient supports parsing only json responses. Due to this reason “oauth/access_token” token will not work when using FacebookClient.Get(“oauth/access_token”). Instead you will need to use a method in FacebookOAuthClient.

You can find more details here: http://blog.prabir.me/post/Facebook-CSharp-SDK-Making-Requests.aspx

Hope this helps.



来源:https://stackoverflow.com/questions/10236651/facebook-c-sharp-sdk-trouble-getting-me-accounts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!