82 lines
2.7 KiB
C#
82 lines
2.7 KiB
C#
using System;
|
|
using System.Configuration;
|
|
using System.Web;
|
|
using Newtonsoft.Json;
|
|
|
|
/// <summary>
|
|
/// recaptcha 的摘要描述
|
|
/// </summary>
|
|
|
|
namespace MyWeb
|
|
{
|
|
public class Recaptcha : function
|
|
{
|
|
public string Sitekey { get; set; }
|
|
public string Secret { get; set; }
|
|
|
|
public Recaptcha()
|
|
{
|
|
Sitekey = ConfigurationManager.AppSettings["recaptchaSitekey"].ToString();
|
|
Secret = ConfigurationManager.AppSettings["recaptchaSecret"].ToString();
|
|
}
|
|
|
|
public bool Used
|
|
{
|
|
get { return !isStrNull(Sitekey) && !isStrNull(Secret) ? true : false; }
|
|
}
|
|
|
|
public string HeaderCode(bool inUpdatePanel = false)
|
|
{
|
|
//若要指定語系,在api.js加上 hl=語系代碼
|
|
string js = "<script src=\"https://www.google.com/recaptcha/api.js" + (inUpdatePanel ? "?onload=onloadCallback&render=explicit" : "") + "\" async defer></script>";
|
|
if (inUpdatePanel)
|
|
js += "<script> var onloadCallback = function () {grecaptcha.render('recaptcha', {'sitekey': '" + Sitekey + "' }); };</script>";
|
|
return js;
|
|
}
|
|
|
|
public string Embed()
|
|
{
|
|
return "<div id=\"recaptcha\" class=\"g-recaptcha\" data-sitekey=\"" + Sitekey + "\"></div>";
|
|
}
|
|
|
|
public bool Verification(System.Web.UI.UpdatePanel upl = null)
|
|
{
|
|
if (upl != null)
|
|
AjaxRecaptcha(upl);
|
|
|
|
if (!isStrNull(HttpContext.Current.Request["g-recaptcha-response"]))
|
|
{
|
|
string postData = "response=" + HttpContext.Current.Request["g-recaptcha-response"].ToString() + "&secret=" + Secret; //要post的資料
|
|
WreqInfo info = WRequest("https://www.google.com/recaptcha/api/siteverify", Method.POST, postData);
|
|
if (isStrNull(info.log))
|
|
{
|
|
Json result = JsonConvert.DeserializeObject<Json>(info.data);
|
|
if (result.success)
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
//Response.Write(info.log);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void AjaxRecaptcha(System.Web.UI.UpdatePanel upl)
|
|
{
|
|
System.Web.UI.ScriptManager.RegisterStartupScript(upl, upl.GetType(), "loadCaptcha", "grecaptcha.render('recaptcha', {'sitekey': '" + Sitekey + "' });", true);
|
|
}
|
|
|
|
public class Json
|
|
{
|
|
public bool success { get; set; }
|
|
public DateTime challenge_ts { get; set; }
|
|
public string hostname { get; set; }
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|