reCAPTCHA v3集成报错:未捕获Promise错误(无效操作名)
问题根源分析
错误提示明确指出动作名仅允许包含A-Za-z或下划线,你的代码中action使用了连字符contact-form,这违反了reCAPTCHA v3的命名规则,这才是触发"Invalid action name"错误的直接原因,和邮箱、姓名中的符号无关。
解决步骤
1. 修改前端JS的action名称
在init.js中,将execute方法的action值从"contact-form"替换为"contact_form"(用下划线替代连字符):
grecaptcha.execute("my-own-site-key", { action: "contact_form" })
2. 修改后端PHP的action验证逻辑
在sendmail.php里,同步更新action的验证条件:
if($recaptcha->success == true && $recaptcha->score >= 0.5 && $recaptcha->action == "contact_form"){
3. 修复PHP代码的语法错误
你的PHP代码存在两处语法问题,虽不直接引发当前错误,但会导致后续功能异常:
$recaptcha_secret = "my-little-secret-key"末尾缺少分号,补充后:
$recaptcha_secret = "my-little-secret-key";
- else分支的echo语句末尾缺少分号,补充后:
echo "Vi tror att du är en robot, är du inte en robot så vänligen kontakta oss på följande mail. (axel@brannhult.se) ";
验证修改
完成上述调整后重新提交表单,reCAPTCHA的Promise错误将消失,邮件发送逻辑也能正常执行。
内容的提问来源于stack exchange,提问作者Theo Esberg
相关产品推荐
相关产品推荐

