使用Facebook C#SDK获取访问令牌

时间:2013-02-20 08:40:49

标签: c# facebook-c#-sdk

您好我正在使用以下代码从Facebook使用C#SDK获取访问令牌

var fb = new FacebookClient();
    dynamic result = fb.Get("oauth/access_token", new
    {
        client_id = "clientId",
        client_secret = "clientSecret",
        redirect_uri = "redirectUri",
        code = "code"
    });

    return result.access_token;

上面的代码大部分时间都是完美的,但有时候会出现这个错误

(OAuthException - #100) Invalid verification code format.

如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

您的项目类型是什么: WinForms WPF ASP.NET

如果您使用 WinForms WPF ,则必须通过请求OAuth登录对话框获取access_token表格Browser Control然后return_type=token,然后从网址中提取有效的access_token

否则,如果您使用 ASP.NET 处理Web应用程序,则必须将用户重定向到OAuth对话登录页面,然后Facebook将使用URL上的代码重定向您,您从QueryString获取此代码并向Facebook发送HTTPRequest以获取有效access_token

你可以用我的方法来做到这一点:

 public string GetAccessTokenFromCode(string AppID, string AppSecret, string RedirectURL, string Code)
{
WebClient wc = new WebClient();
string u2 = "https://graph.facebook.com/oauth/access_token?client_id=" + AppID + "&redirect_uri=" + RedirectURL + "&client_secret=" + AppSecret + "&code=" + Code + "&state=anytexthere";
string access = wc.DownloadString(u2);
access = access.Substring(access.IndexOf("access_token") + 13);
if (access.Contains("&"))
{
string accesstoken = access.Substring(0, access.IndexOf("&"));
return accesstoken;
}

return access;

}

您可以从Page_Load

调用它
if (Request.QueryString["code"] != null)
{
code = Request.QueryString["code"].ToString();
string AT = GetAccessTokenFromCode(AppID, AppSecret, RedirectUrl, Code);
}

答案 1 :(得分:0)

您应该与询问redirect_uri时的code相同 此外,您在Facebook上的“Facebook登录网站”部分中配置的网站网址末尾必须有一个斜杠“/”。 这是一个完整的教程:Working with C# SDK

答案 2 :(得分:0)

This page让我想知道你的代码是否应该更像这样:

   dynamic result = fbClient.Get("oauth/access_token", new
        {
            client_id = fbClient.AppId,
            client_secret = fbClient.AppSecret,
            grant_type = "fb_exchange_token",
            fb_exchange_token = accessToken
        });

也许你的accessToken超时还是什么?

答案 3 :(得分:-1)

http://www.nuget.org/packages/Facebook.CSharp.SDK/

下载sdk后

var config = new Dictionary<string, object>();
//your application id and secret from https://developers.facebook.com/apps
config.Add("appId", "3955.......");
config.Add("secret", "4c1d...............");
config.Add("fileUpload", true); //optional
FacebookClient client = new FacebookClient(config);
ulong facebookId = client.getUser(); //retrieve user id. if user is not added the app this value is 0
client.getAccessToken()

为您提供访问令牌。