不幸的是,有很多代码段,但没有完整的代码示例。我试图让我的小组的活动在FB之外的网页上看到,并按照Javascript SDK示例快速启动我能够放入登录和共享按钮。但是当我尝试访问我的组的事件时,我收到错误 - “请求此资源需要访问令牌”。我在哪里将访问令牌放在此代码中?
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答案(如this one)都没有包含足够的细节来说明如何做这些事情。特别是访问令牌的东西。
是否有完整的例子说明如何做到这一点? 提前谢谢。
答案 0 :(得分:0)
您可以像这样添加令牌:
FB.api(
'/myGroupID/events',
'GET',
{access_token: 'xxx'},...
...但是这会让访问该网站的每个人暴露您的令牌(这总是被保密)。你必须做那个API调用服务器端。查看PHP SDK或只使用PHP cURL。令牌只是一个GET参数。
答案 1 :(得分:0)
好的,我明白了。所有这一切的要点是获得Facebook所说的Access Token。访问令牌实际上是appsecret_proof
(而不是access_token
- access_token
是另一回事。请参阅本文后面的内容),所以要注意这一点。我拼凑了一些不同的代码示例(如this one,以及对Facebook图形api文档的超级,非常仔细的阅读,以得到答案。我使用C#而不是Javascript进行编码,因为需要完成很多这样的操作服务器方面,无论如何我都很舒服。
我创建了一个控制台应用程序作为概念证明。几点说明:
在我的情况下,page_id是一个组,而不是(大写P)页面, 这是另一回事。
access_token
和app_secret
来自应用
你(希望)已经创造了。 (如果你需要首先获得access_token
,那就在那里
是一些文档out there来帮助你开始这部分。)你也应该
确保使用(从.NET 1.0开始)dotnet核心secret manager
在你发展的同时保护你的秘密,这样你就不会通过它们
通过源代码控制。
最后一个很重要 - appsecret_proof
是您的access_token
和app_secret
一起散列的组合(app_secret
是关键)和然后成为查询字符串的一部分。这就是Facebook所说的#34;需要访问令牌来请求此资源。"
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();
}
因此,在所有这些运行之后,我得到了一个包含所有事件的好的json字符串。