2011-12-19 38 views
2

我使用Facebook的C#SDK的代碼當前用戶的信息,(OAuthException)有效的訪問令牌必須用於查詢

我試圖創建一個新的得分爲用戶

但我收到此錯誤:

(OAuthException)必須使用活動訪問令牌來查詢有關當前用戶的信息。

我在想什麼?

protected void btnAddScore_Click(object sender, EventArgs e) 
{ 
    if (CanvasAuthorizer.Authorize()) 
    { 
     var fb = new FacebookWebClient(); 
     dynamic parameters = new ExpandoObject(); 
     parameters.score = 77; 
     parameters.access_token = GetAppAccessToken(); 
     try 
     { 
      dynamic id = fb.Post("me/scores", parameters); 
      lblPostMessageResult.Text = "Message posted successfully"; 
      txtMessage.Text = string.Empty; 
     } 
     catch (FacebookApiException ex) 
     { 
      lblPostMessageResult.Text = ex.Message; 
     } 
    } 
} 
private string GetAppAccessToken() 
{ 
    var oauthClient = new FacebookOAuthClient 
    { 
     AppId = FacebookWebContext.Current.Settings.AppId, 
     AppSecret = FacebookWebContext.Current.Settings.AppSecret 
    }; 

    dynamic result = oauthClient.GetApplicationAccessToken(); 
    string appAccessToken = result.access_token; 
    return appAccessToken; 
} 

編輯: 我得到了答案的形式在這裏: http://facebooksdk.codeplex.com/discussions/279307

新的正確的代碼是:

if (CanvasAuthorizer.Authorize()) 
{ 
    var fb = new FacebookClient(CanvasAuthorizer.FacebookWebRequest.AccessToken); 

    var oauthClient = new FacebookOAuthClient(FacebookApplication.Current); 

    dynamic parameters = new ExpandoObject(); 
    parameters.score = 100; 
    dynamic ac = oauthClient.GetApplicationAccessToken(); 
    parameters.access_token = ac.access_token; 
    dynamic result = fb.Post(CanvasAuthorizer.FacebookWebRequest.UserId + "/scores", parameters); 
} 

回答

0

答: -

其實˚F或使用SCORE圖形API,您需要與正常訪問令牌不同的「應用程序訪問令牌」

因此,如果您希望完成任務,請使用以下腳本獲取應用程序訪問令牌...... 。

然後更換產生application_access_token舊的access_token,這就是它

下面的代碼是用PHP編寫的嘗試轉換成C#,然後應用它

$APPLICATION_ID = "APP_ID"; 
$APPLICATION_SECRET = "APP_SECRET"; 

$token_url = "https://graph.facebook.com/oauth/access_token?" . 
       "client_id=" . $APPLICATION_ID . 
       "&client_secret=" . $APPLICATION_SECRET . 
       "&grant_type=client_credentials"; 
$app_token = file_get_contents($token_url); 

得到這個應用程序的訪問後,令牌可以輕鬆完成此任務。

當您需要應用程序訪問令牌

你需要時,你有行爲代表的應用程序,而不是代表某個特定用戶的過程中使用一個Facebook應用程序的訪問令牌。當您通過圖表訪問您的應用程序的Facebook Insights數據時,以及您想爲您的應用程序創建測試Facebook用戶時,會發生這種情況。

不幸的是,這個文檔被埋在了Facebook圖形API的authentication guide中。

相關問題