Javascript 查看Facebook以外的Facebook事件-将访问令牌放置在何处?
不幸的是,有很多代码片段,但没有完整的代码示例。我试图让我的组的事件可以在FB之外的网页上看到,并且遵循Javascript SDK示例quick start,我可以设置登录和共享按钮。但是当我试图访问我的组的事件时,我得到了一个错误——“请求这个资源需要一个访问令牌。”我应该把访问令牌放在这个代码的哪里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'
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
}
);
};
有几件事:
提前感谢。您可以这样添加令牌:
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
是密钥),然后成为查询字符串的一部分。这是Facebook在说“请求此资源需要访问令牌”时想要的app\u-secret
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
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();
}