Javascript 查看Facebook以外的Facebook事件-将访问令牌放置在何处?

Javascript 查看Facebook以外的Facebook事件-将访问令牌放置在何处?,javascript,facebook,facebook-graph-api,Javascript,Facebook,Facebook Graph Api,不幸的是,有很多代码片段,但没有完整的代码示例。我试图让我的组的事件可以在FB之外的网页上看到,并且遵循Javascript SDK示例quick start,我可以设置登录和共享按钮。但是当我试图访问我的组的事件时,我得到了一个错误——“请求这个资源需要一个访问令牌。”我应该把访问令牌放在这个代码的哪里 window.fbAsyncInit = function() { FB.init({ appId : '{myappID}', xfbml : true, version : 'v2.8'

不幸的是,有很多代码片段,但没有完整的代码示例。我试图让我的组的事件可以在FB之外的网页上看到,并且遵循Javascript SDK示例quick start,我可以设置登录和共享按钮。但是当我试图访问我的组的事件时,我得到了一个错误——“请求这个资源需要一个访问令牌。”我应该把访问令牌放在这个代码的哪里

window.fbAsyncInit = function() {
FB.init({
appId : '{myappID}',
xfbml : true,
version : 'v2.8'
});
FB.AppEvents.logPageView();
FB.api(
'/myGroupID/events',
'GET',
{},
function(response) {
// Insert your code here
}
);
};
有几件事:

  • 我不需要我的用户登录,因为我的群组是公开的;我的活动是公开的。如果有人随意浏览我的网站,我希望他们能够看到事件

  • 我遇到的另一个问题是答案非常简短。来自.NET社区,我习惯于看到很多教程,以及很多关于如何操作的完整代码示例。很少有“长格式”的答案或教程-即使是stackoverflow答案(如)也没有包含关于如何做这件事的足够细节。尤其是访问令牌

  • 有没有一个完整的例子来说明如何做到这一点?
    提前感谢。

    您可以这样添加令牌:

    FB.api(
    '/myGroupID/events',
    'GET',
    {access_token: 'xxx'},...
    

    …但这将向访问网站的所有人公开您的代币(这一直是保密的)。您必须在服务器端执行API调用。请查看PHPSDK或仅使用PHPCURL。令牌只是一个GET参数。

    好的,我算出了。所有这一切的意义在于获得Facebook声称想要的访问令牌。访问令牌实际上是
    appsecret\u-proof
    (而不是
    Access\u-Token
    Access\u-Token
    是另一回事。请注意这一点。为了找到答案,我拼凑了一些不同的代码示例(比如,和对Facebook graph api文档的超级、非常仔细的阅读)。我用C#而不是Javascript编写代码,因为很多代码都需要在服务器端完成,无论如何,我在那里更舒服

    我创建了一个控制台应用程序作为概念证明。注意:

    • 在我的例子中,page_id是一个组,而不是一个(大写p)页面, 这是另一回事

    • access\u token
      app\u secret
      来自应用程序 您(希望)已经创建了(如果您首先需要获取
      access\u令牌,那么
      有一些文档可以帮助您启动此部件。)您还应该
      请确保使用(从.NET1.0开始)DotnetCore
      在你发展时保护你的秘密,这样你就不会通过了
      通过源代码控制实现

    • 最后一个是大的-
      appsecret\u-proof
      是你的
      access\u-token
      和你的
      app\u-secret
      的组合,散列在一起(其中
      app\u-secret
      是密钥),然后成为查询字符串的一部分。这是Facebook在说“请求此资源需要访问令牌”时想要的

      public静态字符串page\u id={your\u page\u id};
      公共静态字符串访问\u令牌={your\u app\u access\u token};
      公共静态字符串app_secret={your_app_secret};
      公共静态字符串appsecret\u-proof=FaceBookSecret(访问令牌,app\u-secret);
      静态void Main(字符串[]参数)
      {
      控制台.WriteLine(“进行API调用…”);
      使用(var client=newhttpclient(newhttpclienthandler{AutomaticDecompression=DecompressionMethods.GZip | DecompressionMethods.Deflate}))
      {
      client.BaseAddress=新Uri(“https://graph.facebook.com/“+页码id+”/”;
      HttpResponseMessage response=client.GetAsync(“事件?访问令牌=“+access\u令牌+””和appsecret\u-proof=“+appsecret\u-proof”)。结果;
      response.EnsureSuccessStatusCode();
      字符串结果=response.Content.ReadAsStringAsync().result;
      Console.WriteLine(“结果:+Result”);
      }
      Console.ReadLine();
      }
      内部静态字符串FaceBookSecret(字符串内容、字符串键)
      {
      byte[]keyBytes=Encoding.UTF8.GetBytes(键);
      byte[]messageBytes=Encoding.UTF8.GetBytes(内容);
      字节[]散列;
      使用(HMACSHA256 HMACSHA256=新的HMACSHA256(键字节))
      {
      hash=hmacsha256.ComputeHash(messageBytes);
      }
      StringBuilder sbHash=新的StringBuilder();
      for(int i=0;i
    所以在所有这些运行之后,我得到了一个包含所有事件的漂亮json字符串

    public static string page_id = {your_page_id};
    public static string access_token = {your_app_access_token};
    public static string app_secret = {your_app_secret};
    public static string appsecret_proof = FaceBookSecret(access_token, app_secret); 
    
    static void Main(string[] args)
        {
            Console.WriteLine("Making API Call...");
            using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }))
            {
                client.BaseAddress = new Uri("https://graph.facebook.com/" + page_id + "/");
                HttpResponseMessage response = client.GetAsync("events?access_token=" + access_token + "&appsecret_proof=" + appsecret_proof).Result;
                response.EnsureSuccessStatusCode();
                string result = response.Content.ReadAsStringAsync().Result;
                Console.WriteLine("Result: " + result);
    
            }
            Console.ReadLine();
        }
    
    internal static string FaceBookSecret(string content, string key)
    {
        byte[] keyBytes = Encoding.UTF8.GetBytes(key);
        byte[] messageBytes = Encoding.UTF8.GetBytes(content);
        byte[] hash;
        using (HMACSHA256 hmacsha256 = new HMACSHA256(keyBytes))
        {
            hash = hmacsha256.ComputeHash(messageBytes);
        }
    
        StringBuilder sbHash = new StringBuilder();
        for (int i = 0; i < hash.Length; i++)
        {
            sbHash.Append(hash[i].ToString("x2"));
        }
        Console.WriteLine(sbHash);
        return sbHash.ToString();
    }