2011-12-19 39 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中。

相关问题