无法获得长期到期令牌

时间:2012-08-13 13:56:39

标签: c# facebook facebook-c#-sdk

我使用Facebook C#SDK v 6并在我的应用程序设置上启用“删除离线访问” 并在登录并获得访问令牌后,我正在尝试交换长期令牌(60天一个) 我无法得到它,因为两个令牌到期时间都是24小时。

这是我的代码

登录Facebook

private const string Scope = "publish_stream,manage_pages";
   FacebookClient _fb = new FacebookClient();
   var fbLoginUrl = _fb.GetLoginUrl(
                new
                {
                    client_id = AppId,
                    client_secret = Appsecret,
                    redirect_uri = RedirectUri,
                    response_type = "code",
                    scope = Scope,
                    state = state
                });

获取短期访问令牌

if (Request.QueryString["code"] != null)
            code = Request.QueryString["code"];
           var result = _fb.Post("oauth/access_token",
                                  new
                                  {
                                      client_id = AppId,
                                      client_secret = Appsecret,
                                      redirect_uri = RedirectUri,
                                      code = code,
                                      scope = Scope,
                                      response_type="token"
                                  });

获取长期访问令牌

       var  result1 = _fb.Post("oauth/access_token",
                                  new
                                  {
                                      client_id = AppId,
                                      client_secret = Appsecret,
                                      grant_type = "fb_exchange_token",
                                      fb_exchange_token= Session["fb_access_token"] as string
                                  });

1 个答案:

答案 0 :(得分:1)

这样做。

var result = GetExtendedAccessToken("my_short_lived_old_token");
var extendedToken = result.access_token;

public dynamic GetExtendedAccessToken(string oldToken)
{
    dynamic result = new ExpandoObject();
    try
    {
        var api = new FacebookClient
        {
            AccessToken = oldToken,
            AppId = ClientID,
            AppSecret = ClientSecret
        };
        dynamic parameters = new ExpandoObject();
        parameters.grant_type = "fb_exchange_token";
        parameters.fb_exchange_token = oldToken;
        parameters.client_id = ClientID;
        parameters.client_secret = ClientSecret;
        result = api.Get("oauth/access_token", parameters);
    }
    catch (FacebookOAuthException err)
    {
        result.error = "Error";
        result.message = err.Message;
    }
    catch (Exception err)
    {
        result.error = "Error";
        result.message = err.Message;
    }
    return result;
}