我是 Facebook 应用程序的新手。我正在尝试使用 Facebook 应用程序作为我的项目模板创建一个 MVC 4 应用程序。我正在尝试捕获在其上创建页面选项卡的页面 id,并且以某种方式得到了它。我的问题是当有人访问我的应用程序时,我想知道他们正在查看页面选项卡的页面 ID。我搜索了很多我知道我必须为此使用FacebookSignedRequest的地方。但是这门课对我来说是不可用的。
提前感谢您的帮助。
我是 Facebook 应用程序的新手。我正在尝试使用 Facebook 应用程序作为我的项目模板创建一个 MVC 4 应用程序。我正在尝试捕获在其上创建页面选项卡的页面 id,并且以某种方式得到了它。我的问题是当有人访问我的应用程序时,我想知道他们正在查看页面选项卡的页面 ID。我搜索了很多我知道我必须为此使用FacebookSignedRequest的地方。但是这门课对我来说是不可用的。
提前感谢您的帮助。
如果您只是尝试signed_request
从 Facebook 解析参数,则可以使用以下 C# 代码来完成。
此代码还使用您自己的参数验证哈希app_secret
,以确保signed_request
源自 Facebook。
public static string DecodeSignedRequest(string signed_request)
{
try
{
if (signed_request.Contains("."))
{
string[] split = signed_request.Split('.');
string signatureRaw = FixBase64String(split[0]);
string dataRaw = FixBase64String(split[1]);
// the decoded signature
byte[] signature = Convert.FromBase64String(signatureRaw);
byte[] dataBuffer = Convert.FromBase64String(dataRaw);
// JSON object
string data = Encoding.UTF8.GetString(dataBuffer);
byte[] appSecretBytes = Encoding.UTF8.GetBytes(app_secret);
System.Security.Cryptography.HMAC hmac = new System.Security.Cryptography.HMACSHA256(appSecretBytes);
byte[] expectedHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(split[1]));
if (expectedHash.SequenceEqual(signature))
{
return data;
}
}
}
catch
{
// error
}
return "";
}
private static string FixBase64String(string str)
{
while (str.Length % 4 != 0)
{
str = str.PadRight(str.Length + 1, '=');
}
return str.Replace("-", "+").Replace("_", "/");
}
我所要做的就是创建一个 Facebook 客户端对象并使用应用程序密钥调用 ParseSignedRequest 方法。
var fb = new FacebookClient();
dynamic signedRequest = fb.ParseSignedRequest(appSecret, Request.Form["signed_request"]);
这将返回一个 Json 对象,我们必须使用 JObject.Parse 对其进行解析