gpt4 book ai didi

C# Facebook SDK 将 accesstoken 延长至 60 天

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:43 30 4
gpt4 key购买 nike

主要问题:我应该如何通过 C# SDK 将 2 小时访问 token 延长为 60 天访问 token ?您能否提供已经用代码换取 2 小时访问 token 的部分的示例?

背景:我一直在四处寻找并尝试各种解决方案,但尚未找到适合我的解决方案。我可以成功地进行/me 调用并获取有关当前用户的信息,但是当我尝试扩展访问 token 时它失败了。

此应用程序的目标是允许用户设置帖子并在事后一段时间内监控点赞和评论。显然,我们需要 60 天的 token 。

当您可以请求永久 token 时,我将在其他人完成 90% 的工作后接管这个项目。我的工作是修复它,以便我们可以使用 60 天 token 。我可能会问非常愚蠢的后续问题。做好准备!

当前流程:用户设置他的帖子,点击一个按钮,我们提示他们授权我们的应用程序/通过 javascript sdk 登录到 facebook。在他们登录后,我们在 javascript 中处理其他不相关的事情,然后将其通过 AJAX 传递到 C# 以将一些信息保存到我们的数据库(包括 token )并发布。一切顺利,我在 javascript 中获得了访问 token ,我可以使用该 2 小时 token 来获取有关已登录用户的信息,但是当我尝试扩展时,我遇到了两个错误之一,我将在下面提到导致它们的代码。

我尝试过的:

工作:我相信我在这里的另一篇文章中找到了这个。 var fbClient = new 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。 字典参数2 = new Dictionary();

            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);

错误:{Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:a。第 1 行,位置 1。Error2:如果我注释掉 grant_type 和 fb_exchange_token 并取消注释代码和 redirecturi,我会得到与下一个方法相同的错误...

不工作:这是我从这里的另一篇文章中复制/粘贴重命名以匹配我的变量。 Unable to get long lived expiration token

            dynamic result3 = new ExpandoObject();
try
{
dynamic parameters3 = new ExpandoObject();
parameters3.grant_type = "fb_exchange_token";
parameters3.fb_exchange_token = accessToken;
parameters3.client_id = appId;
parameters3.client_secret = appSecret;
result3 = fbClient.Get("oauth/access_token", parameters);
}
catch (FacebookOAuthException err)
{
result3.error = "Error";
result3.message = err.Message;
}
catch (Exception err)
{
result3.error = "Error";
result3.message = err.Message;
}

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

最佳答案

在作为回调的处理程序文件中将以下代码与 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;
}
}

关于C# Facebook SDK 将 accesstoken 延长至 60 天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101445/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com