代码改动长这样
Before — GeeTest GT4
<div id="captcha"></div>
<script src="https://static.geetest.com/v4/gt4.js"></script>
<script>
initGeetest4({ captchaId: 'YOUR_CAPTCHA_ID' }, function(captcha) {
captcha.appendTo('#captcha')
captcha.onSuccess(function() {
var result = captcha.getValidate()
document.getElementById('lot_number').value = result.lot_number
document.getElementById('captcha_output').value = result.captcha_output
document.getElementById('pass_token').value = result.pass_token
document.getElementById('gen_time').value = result.gen_time
})
})
</script>After — CaptchaLa
<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>Before — GeeTest server verify (Node)
const sign = crypto.createHmac('sha256', process.env.GEETEST_KEY)
.update(req.body.lot_number).digest('hex')
const res = await fetch(`https://gcaptcha4.geetest.com/validate?captcha_id=${process.env.GEETEST_ID}`, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
lot_number: req.body.lot_number,
captcha_output: req.body.captcha_output,
pass_token: req.body.pass_token,
gen_time: req.body.gen_time,
sign_token: sign,
}),
})
const data = await res.json()
if (data.result !== 'success') return res.status(400).json({ error: 'bot' })After — CaptchaLa server verify (Node)
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(服务器端)。
- 2
移除 GeeTest 初始化 JS
删除 initGeetest4 的调用与其 onSuccess 回呼。拿掉你原本填入的四个隐藏 input(lot_number、captcha_output、pass_token、gen_time)。
- 3
加入 CaptchaLa 组件标签
用我们的 div + script 替代整个 GeeTest 区块。无需 JS 设置——组件会依 data-app-key 自我初始化。
- 4
简化服务器验证
把 GeeTest 的验证(含 HMAC sign_token 计算、四字段 body 与结果字符串检查)换成对 apiv1.captcha.la/v1/validate 的单次 JSON POST 与一个 valid 旗标(data.valid)。
- 5
逐步上线
一次切换一个表单。观察转化与验证率。没有最低消费或合约,分阶段上线完全免费。
常见问题
CaptchaLa 在中国大陆也能运作得一样好吗?
可以,但有一点要如实说明:我们在中国大陆境内没有自建节点,也不会这样宣称。实际有意义的是——我们的端点在大陆没有被封锁(Google 的则不然),所以你的表单照常可用。大陆流量由我们就近的亚洲边缘节点(越南、新加坡、香港)承接。延迟会高于这些市场当地的用户,且随跨境路由波动,因此我们不给出自己兜不住的数字。无需另外的 SDK、账号或计费安排。
我团队习惯的 GeeTest 滑块体验呢?
CaptchaLa 在自适应系统中把滑块纳为验证类型之一——它不是默认,但可用。多数团队发现默认(低风险隐形 + 较高风险点击)比滑块优先转化更好。
风险打分的灵敏度有差异吗?
GeeTest 的风险模型针对亚太流量型态调校。CaptchaLa 的是全球性的。如果你的流量以亚太为主,预期行为相当。如果你在亚太之外,可能会看到误判明显下降。