代码改动长这样
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script><button id="login-btn">Sign in</button>
<script src="https://cdn.captcha-cdn.net/captchala-loader.js"></script>
<script>
loadCaptchala(() => Captchala.init({ appKey: 'YOUR_APP_KEY', action: 'login' })
.onSuccess(res => onToken(res.token))
.bindTo('#login-btn'));
</script>const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
secret: process.env.TURNSTILE_SECRET,
response: req.body['cf-turnstile-response'],
}),
})
const data = await res.json()
if (!data.success) return res.status(400).json({ error: 'bot' })const res = await fetch('https://apiv1.captcha.la/v1/validate', {
method: 'POST',
headers: {
'X-App-Key': process.env.CAPTCHALA_APP_KEY,
'X-App-Secret': process.env.CAPTCHALA_APP_SECRET,
'Content-Type': 'application/json',
},
body: JSON.stringify({ pass_token: req.body['captchala-token'] }),
})
const { data } = await res.json()
if (!data || !data.valid) return res.status(400).json({ error: 'bot' })迁移步骤
- 1
注册并取得你的 App Key + Secret
创建免费 CaptchaLa 账号、添加一个站点,拷贝 App Key(公开)与 App Secret(服务器端)。无需 Cloudflare 账号。
- 2
替换组件标签
把 cf-turnstile 换成 captchala,data-sitekey 换成 data-app-key,并把 script src 改成我们的 CDN。组件形态(一个 div 占位 + 一个 script 标签)维持不变。
- 3
更新隐藏字段名称
Turnstile 会注入 cf-turnstile-response,CaptchaLa 注入 captchala-token。多数表单处理程序不会依名称读取该字段,但如果你的会,改一处常数即可。
- 4
更新服务器验证调用
将端点改为 apiv1.captcha.la/v1/validate。我们接受 JSON(Turnstile 用 form-urlencoded),因此要更新 Content-Type 与 body 结构。回应仍回传 valid 旗标(data.valid)供你的分支逻辑使用。
- 5
逐步上线
多数表单先维持 Turnstile,先在一个低流量表单上换成 CaptchaLa。观察一天的转化与验证率,满意后再扩大——没有最低消费、没有合约。
常见问题
我可以保留 Cloudflare CDN 同时使用 CaptchaLa 吗?
可以。CaptchaLa 独立于任何 CDN——我们多数客户保留 Cloudflare 做 CDN,并用 CaptchaLa 做验证。两层互不冲突。
我的 Cloudflare 机器人检测规则还会生效吗?
会——那些是 Cloudflare WAF/Bot Management 功能,与 Turnstile 分开。移除 Turnstile 组件不会影响你的 Cloudflare zone 设置。
如果我是通过 Cloudflare Workers 使用 Turnstile 呢?
在 Worker 端的迁移方式相同。把 Turnstile 的 fetch 换成 CaptchaLa 的 fetch。文档里有一段与 Workers runtime 兼容的程序片段。