У меня есть два php-файла, первый имеет форму, которая собирает данные о платеже, а затем отправляет в другой файл для форматирования вызова SOAP для отправки информации о платеже в платежную службу. ReCaptcha вызывается в первом файле, а возвращенный токен передается во второй файл в сообщении, где я вызываю функцию проверки сайта Google.
Перед обработкой платежа я проверяю, чтобы значение успеха было равно trueи чтобы оценка соответствовала моему порогу.
По некоторым причинам, некоторые законные пользователи потерпят неудачу, большинство пройдет успешно. Когда они повторяются, они успешны.
Это часто встречается? Есть ли какие-либо методы, которые я должен рассмотреть, чтобы избежать этого или сделать его более понятным для пользователя?
Проверено, что это было связано с возвратом нулевых значений, а также с ошибкой возврата FALSE или с оценкой.
Исходный файл с формой оплаты
….
<script>
grecaptcha.ready(function() {
console.log("function");
grecaptcha.execute('************************', {action: 'usaepayform'}).then(function(token) {
console.log(token);
document.getElementById("token").value = token;
});
});
</script>
……
<form id="epayform" name="epayform" action="./transaction_soap.php" method="POST" autocomplete="off">
….
<input type="hidden" id="token" name="token">
</form>
<input type="button" id="submitbutton" name="submitbutton" data-plus-as-tab="false" value="Process Payment >>">
… ..
, затем в транзакции_soap.php
$tokenn = $_POST['token'];
$ip = $_SERVER['REMOTE_ADDR'];
if(isset($_POST["TotalAmount"])) {
$url = "https://www.google.com/recaptcha/api/siteverify";
$data = array(
'secret' => "##################",
'response' => $_POST['token'],
'remoteip' => $ip
);
$verify = curl_init();
curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($verify, CURLOPT_POST, true);
curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($verify, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($verify);
$responseKeys = json_decode($res, true);
//get response along side with all results
if($responseKeys['success'] == true) {
if ($responseKeys['score'] >= 0.3){
……...
} else {
echo "Recaptcha Score Not Met";
}
} else {
echo "Recaptcha not successfully validated. Please, try again before reporting as an error.";
}
}```
I would expect a return of true from real uesers.