c# - (OAuthException) 必须使用事件访问 token 来查询有关当前用户的信息

标签 c# facebook facebook-c#-sdk

我在代码中使用 Facebook C# sdk,

我正在尝试为用户创建一个新分数

但是我得到这个错误:

(OAuthException) 必须使用事件访问 token 来查询有关当前用户的信息。

我错过了什么?

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

最佳答案

答案:-

实际上,要使用 SCORE Graph API,您需要不同于普通访问 token 的“应用程序访问 token ”

因此,如果您希望完成任务,请使用以下脚本获取应用程序访问 token ......

然后把生成的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);

获得此应用程序访问 token 后,您可以轻松完成此任务。

当您需要应用程序访问 token 时

当您有一个代表应用程序而不是特定用户执行操作的进程时,您需要使用 Facebook 应用程序访问 token 。当您通过图表访问您的应用的 Facebook 洞察数据时,以及您想要为您的应用创建测试 Facebook 用户时,就会发生这种情况。

遗憾的是,这方面的文档被埋在了 authentication guide 中。用于 Facebook 图形 API。

关于c# - (OAuthException) 必须使用事件访问 token 来查询有关当前用户的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558579/

相关文章:

android - Facebook 身份验证适用于模拟器,但不适用于物理设备

Facebook C# sdk批量请求方法返回空数据数组

多个网站的 Facebook 应用程序 secret

C# 将 List<string> 中的值分配给字符串变量

c# - 如何在控制台中将 5x10 二维数组与随机数据正确对齐?

c# - 在应用程序中添加延迟(用于调试)

facebook - 如何设置facebook og :description empty?

php - 在 Facebook 页面上安排图片发布

c# - 如何使用 C# SDK 连接到 facebook 和调试 facebook 应用程序

c# - Excel Interop 实例不会关闭