Я пытаюсь добавить gcaptcha на устаревшую системную страницу с отправкой данных. Эта страница использует поля данных в таблице и кнопку отправки, которая не выполняет постбэк. На странице нет элемента формы, и он имеет код vb. net.
Код gcaptcha внешнего интерфейса работает визуально на странице. Однако серверный метод не вызывается при проверке gcaptcha и не влияет на отправку.
Какой метод реализации gcaptcha подходит для данного типа приложения и настройки?
Вот код клиента:
<script>
function printMe() {
try {
window.print();
} catch (e) { }
}
var expiredCallback = function () {
grecaptcha.reset();
}
var onloadCallback = function () {
grecaptcha.render('gCaptcha', {
'sitekey': '<sitekey>',
'theme': 'light',
'size': 'normal',
'type': 'image',
'expired-callback': expiredCallback
});
};
</script>
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?
onload=onloadCallback&render=explicit" defer="defer"></script>
<tr>
<td>
<div id="gCaptcha" class="g-recaptcha">
</div>
<asp:TextBox ID="txtCaptcha" runat="server" Style="display: none" />
<asp:RequiredFieldValidaton ID = "rfvCaptcha" ErrorMessage="Captcha validation is
required." ControlToValidate="txtCaptcha"
runat="server" ForeColor = "Red" Display = "Dynamic" />
<div id="captchaErrorMsg" class="captchaErrorMsg" style="color:red;display:none;">
</div>
<br />
</td>
</tr>
<tr>
<td align="center">
<table width="350px" class="table">
...
<tr>
...
<td align="center">
<input type="button" id="btnSubmitPayment" value="Submit" class="button1"
data-bind="enable: enableSubmit, click: handleSubmit"/>
<%Else%>
...
</td>
</tr>
</table>
</td>
</tr>
Вот код сервера:
Sub reCaptcha_Click(ByVal sender As Object, ByVal e As EventArgs)
If (VerifyCaptcha()) Then
MsgBox("Valid Recaptcha")
Else
MsgBox("Not Valid Recaptcha")
End If
End Sub
Private Function VerifyCaptcha() As Boolean
Dim Response As String = Request("g-recaptcha-response")
Dim Valid As Boolean = False
Dim req As HttpWebRequest =
DirectCast(WebRequest.Create(Convert.ToString("https://www.google.com/recaptcha/api/siteverify?secret=<secret sitekey>&response=") & Response), HttpWebRequest)
Try
Using wResponse As WebResponse = req.GetResponse()
Using readStream As New StreamReader(wResponse.GetResponseStream())
Dim jsonResponse As String = readStream.ReadToEnd()
Dim js As New JavaScriptSerializer()
Dim data As MyObject = js.Deserialize(Of MyObject)(jsonResponse)
Valid = Convert.ToBoolean(data.success)
Return Valid
End Using
End Using
Catch ex As Exception
Return False
End Try
End Function
Public Class MyObject
Public Property success() As String
Get
Return m_success
End Get
Set(ByVal value As String)
m_success = value
End Set
End Property
Private m_success As String
End Class