验证应用程序邀请服务器端
本文关键字:服务器端 应用程序 验证 | 更新日期: 2023-09-27 18:24:21
当我们的移动应用程序用户向fb用户发送应用程序邀请并接受时,服务器应奖励第一个用户。因此,我需要一种方法来验证邀请是否已发送。
var fb = new FacebookClient(APP_ID + "|" + SECRET_ID);
fb.AppId = APP_ID;
fb.AppSecret = SECRET_ID;
dynamic result = fb.Get(???);
我在GraphAPI文档上搜索了一下,似乎我需要检索用户的申请。如何从服务器端进行验证,以及在哪里进行验证?
更新
好的,现在我知道只允许对接受的邀请进行奖励。我可以在数据库中记录谁邀请谁,只有当新的受邀用户加入时才能给予奖励。但我仍然需要一种方法来验证这些邀请是否真的发出了。
更新2
正如文档所述,appequests从应用程序调用将返回从该应用程序发送的所有请求。所以我认为我只需要检查一下这个应用程序是否有任何请求就足够了:
dynamic result = fb.Get("/" + facebookId + "/apprequests");
IEnumerable data = result.data;
return data.Cast<object>().Count() != 0;
但我现在无法查看。有人能确认,如果一个用户向另一个用户发送应用程序邀请,该邀请将通过应用程序访问令牌的appequests看到吗?
我的代码:
public static FacebookRequestData GetInviteHash()
{
string requestId = Request["request_ids"];
var accessToken = GetAccessToken(ConfigurationManager.AppSettings["FacebookAppId"], ConfigurationManager.AppSettings["FacebookSecret"]);
string response;
using (var webClient = new WebClient())
{
response = webClient.DownloadString(string.Format("https://graph.facebook.com/{0}?{1}", requestId, accessToken));
}
var javaScriptSerializer = new JavaScriptSerializer();
return javaScriptSerializer.Deserialize<FacebookRequestData>(javaScriptSerializer.Deserialize<FacebookRequestInfo>(response).data);
}
private static string GetAccessToken(string appId, string password)
{
using (var webClient = new WebClient())
{
return webClient.DownloadString(string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&client_secret={1}&grant_type=client_credentials", appId, password));
}
}
private class FacebookRequestInfo
{
public string data { get; set; }
}
FacebookRequestData-我的自定义类,带有我发布到fb早期的字段结构
完成:
public static bool CheckInvite(string fromId, string toId)
{
var fb = new FacebookClient(APP_ID + "|" + SECRET_ID);
fb.AppId = APP_ID;
fb.AppSecret = SECRET_ID;
dynamic result = fb.Get(string.Format("/{0}/apprequests", toId));
foreach (var el in result.data)
if ((string)el.from.id == fromId)
{
DateTime dateTime = DateTime.Parse((string)el.created_time, CultureInfo.InvariantCulture);
if ((DateTime.Now - dateTime).TotalMinutes < 15)
{
return true;
}
}
return false;
}