2012-10-31 56 views
1

我正在構建一個應用程序,允許用戶從應用程序向他們的facebook發佈消息。對於我遇到的問題,我不知道如何獲取publish_stream權限的用戶access_token。從Facebook獲取用戶access_token

這是我到目前爲止有:

 var fb = new FacebookClient(); 
     dynamic result = fb.GetLoginUrl(new 
     { 
      client_id = AppID, 
      client_secret = AppSecret, 
      grant_type = "client_credentials", 
      scope = "publish_stream", 
      state = "http://localhost:17578/Facebook.aspx", 
      redirect_uri = "http://localhost:17578/Facebook.aspx" 
     }); 

這工作正常,並返回查詢字符串中一個「代碼」。但是,我不確定該怎麼處理這些代碼。 '舊'Facebook C#sdk包含FacebookOAuthClient類,其中有ExchangeCodeForAccessToken()方法,但我不知道在新SDK中替換此靜態方法是什麼。

所以問題的確是:如何交換爲access_token返回的代碼?

回答

2

獲得代碼查詢字符串參數後,您必須調用Facebook Graph API才能獲取訪問令牌。

https://developers.facebook.com/docs/howtos/login/server-side-login/

FacebookClient client = new FacebookClient(); 
dynamic result = client.Get("oauth/access_token", new { client_id = Settings.Social_Facebook_App_Id, client_secret = Settings.Social_Facebook_Secret_Key, code = Request.QueryString["code"], redirect_uri = Settings.Social_Facebook_Login_Redirect_URI }); 
if (result.error == null) 
{ 
    Session["AccessToken"] = client.AccessToken = result.access_token; 
    dynamic user = client.Get("me", new { fields = "name,username,email" }); 
    string userName = user.username; 

    mu = Membership.GetUser(userName); 
    if (mu == null) // Register 
    { 
     RegisterModel rm = new RegisterModel(); 
     rm.Email = user.email; 
     rm.UserName = userName; 
     return View("Register", rm); 
    } 
    else 
    { 
     FormsAuthentication.SetAuthCookie(userName, true); 
     return RedirectToAction(MVC.Home.Index()); 
    } 
}