如何为Authorize.net遗留支付表单添加Captcha验证
给遗留支付表单添加Captcha验证的PHP实现
情况1:使用Google reCAPTCHA v2(常见第三方Captcha)
在authorize_sim_send.php的最开头插入以下代码,确保支付逻辑执行前先完成Captcha验证:
// 1. 获取前端提交的Captcha响应值 $captchaResponse = $_POST['g-recaptcha-response'] ?? ''; // 2. 调用验证接口校验有效性 $secretKey = '你的reCAPTCHA密钥'; // 替换为你在Google后台获取的密钥 $verifyData = http_build_query([ 'secret' => $secretKey, 'response' => $captchaResponse, 'remoteip' => $_SERVER['REMOTE_ADDR'] ]); $verifyResult = file_get_contents( 'https://www.google.com/recaptcha/api/siteverify', false, stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $verifyData ] ]) ); $verifyResult = json_decode($verifyResult, true); // 3. 验证失败则终止流程 if (!$verifyResult['success']) { die('验证码验证失败,请返回重试。'); // 也可跳转回表单页面: // header('Location: 表单页面地址.php?error=captcha'); // exit; }
注意:替换$secretKey为你实际的reCAPTCHA密钥,前端已能显示Captcha的话,这部分无需额外调整。
情况2:使用自定义本地图片验证码
如果是自己开发的图片验证码,验证逻辑为对比用户输入与Session存储的验证码:
// 1. 获取用户输入和Session中的验证码(统一转小写避免大小写问题) $userInput = strtolower(trim($_POST['captcha_input'] ?? '')); $sessionCode = strtolower($_SESSION['captcha_code'] ?? ''); // 2. 校验一致性,验证后销毁Session中的验证码防止重复使用 if (empty($userInput) || $userInput !== $sessionCode) { unset($_SESSION['captcha_code']); die('验证码错误,请重新输入。'); // 或跳转回表单: // header('Location: 表单页面地址.php?error=captcha'); // exit; } // 验证通过后销毁Session验证码 unset($_SESSION['captcha_code']);
注意:确保你的验证码生成脚本已将正确值存入$_SESSION['captcha_code'],且前端输入框的name属性与$_POST['captcha_input']一致。
核心注意点
- 验证逻辑必须放在所有支付处理代码之前,拦截无效请求
- 终止脚本时记得用
exit或die,避免后续代码继续执行 - 错误提示尽量简洁明确,帮助用户快速修正问题
内容的提问来源于stack exchange,提问作者CJ Catalano
相关产品推荐
相关产品推荐

