C#的Facebook SDK的扩展的accessToken至60天(C# Facebook SDK

2019-07-31 03:37发布

主要的问题:我怎么来延长通过C#SDK 60日访问令牌2个小时的访问令牌? 你能提供只是部分,其中的代码已经被交易了2个小时的访问令牌的样本?

背景:我就在这里被环顾四周,并试图各种解决方案,并没有发现一个,我还没有工作。 我可以成功地使/我打电话,但得到有关当前用户的信息时,我尽量延长它失败的访问令牌。

这个程序的目的是允许用户设立一个职位,事实上一段时间之后,将监测的喜好和意见。 我们需要为这60天的道理,效果显着。

我是把这个项目结束后别人没有90%时,你可以申请永久令牌的工作。 这是我的工作,以解决它,这样我们就可以使用60天令牌。 请问非常愚蠢的跟进问题。 做好准备!

目前的流程:用户设置了他的职位,点击一个按钮,我们提醒他们要权威性我们的应用程序/通过的JavaScript SDK登录到Facebook上。 他们在登录后,我们在处理JavaScript的其他无关的事情,然后AJAX它交给C#来保存一些信息给我们的数据库(包括令牌),使帖子。 一切进展不错,我得到的访问令牌就好在JavaScript,我可以使用2小时令牌来获得对谁在但是登录的用户信息时,我尽量延长我得到两个错误之一,我会与下面提代码,使他们。

我已经试过:

工作:我相信我发现这在另一篇文章在这里。 VAR fbClient =新FacebookClient(的accessToken);

            Dictionary<string, object> parameters = new Dictionary<string, object>();
            parameters.Add("client_id", appId);
            parameters.Add("redirect_uri", redirectURI);
            parameters.Add("client_secret", appSecret);
            parameters.Add("code", accessToken);

            var result = fbClient.Get("/me", parameters);

不工作:这是来自不同的地方,包括这里的SDK文档。 我见过的人,包括重定向URL,并说,它需要匹配一个当您最初拿到的accessToken但我们确实在Javascript中并没有使用重定向URL。 字典parameters2 =新词典();

            parameters2.Add("client_id", appId);
            //parameters2.Add("redirect_uri", redirectURI);
            parameters2.Add("client_secret", appSecret);
            //parameters2.Add("code", accessToken);
            parameters2.Add("grant_type", "fb_exchange_token");
            parameters2.Add("fb_exchange_token", accessToken);

            var result2 = fbClient.Get("/oauth/access_token", parameters2);

错误:{(OAuthException)(OAuthException)无效的验证码格式。}

Answer 1:

使用带有Facebook.NET和Json.NET下面的代码在处理文件,它是你的回调。

public void ProcessRequest (HttpContext context)
    {
        if (context.Request.Params.Get("error_reason") == "user_denied")
        {
            context.Response.Write("Access Denied");
        }
        else if (context.Request.Params.Get("code") != null && context.Request.Params.Get("code") != "")
        {
            string shorttoken = HttpUtility.ParseQueryString(HttpUtil.GetHtmlPage("https://graph.facebook.com/oauth/access_token?client_id=" + APP_ID + "&redirect_uri=http://huadianz.me/mvp/auth/FacebookOAuth.ashx&client_secret=" + APP_SECRET + "&code=" + context.Request.Params.Get("code")))["access_token"];
            string longtoken = HttpUtility.ParseQueryString(HttpUtil.GetHtmlPage("https://graph.facebook.com/oauth/access_token?client_id=" + APP_ID + "&client_secret=" + APP_SECRET + "&grant_type=fb_exchange_token&fb_exchange_token=" + shorttoken))["access_token"];

            Facebook.FacebookClient fc = new Facebook.FacebookClient(longtoken);
            dynamic result = fc.Get("me");

            context.Response.Redirect("/");
            //Store Token here
        }
    }

我的程序文件是在这里:

public static class HttpUtil
{
    public static string GetHtmlPage(string strURL)
    {
        String strResult;
        WebResponse objResponse;
        WebRequest objRequest = HttpWebRequest.Create(strURL);
        objResponse = objRequest.GetResponse();
        using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
        {
            strResult = sr.ReadToEnd();
            sr.Close();
        }
        return strResult;
    }
}


Answer 2:

请参阅如何使用它的C#SDK更新Facebook的访问令牌 。 只是要求“的OAuth /的access_token”是不够的,你必须有指定的参数太多。 该技术也为我工作。



文章来源: C# Facebook SDK extend an accesstoken to 60 days