Chuyển từ Turnstile sang CaptchaLa
Thay thế trực tiếp trong chưa đến 10 phút. Giữ nguyên biểu mẫu, bỏ phụ thuộc vào Cloudflare, có thêm thử thách dự phòng và node tại Trung Quốc đại lục.
Thay đổi mã trông như thế nào
<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' })Các bước chuyển đổi
- 1
Đăng ký & lấy App Key + Secret
Tạo tài khoản CaptchaLa miễn phí, thêm một site, rồi sao chép App Key (công khai) và App Secret (phía máy chủ). Không cần tài khoản Cloudflare.
- 2
Đổi thẻ widget
Thay cf-turnstile bằng captchala và data-sitekey bằng data-app-key. Đổi script src sang CDN của chúng tôi. Hình thức widget (một div placeholder + một thẻ script) vẫn như cũ.
- 3
Cập nhật tên trường ẩn
Turnstile chèn cf-turnstile-response; CaptchaLa chèn captchala-token. Phần lớn trình xử lý biểu mẫu không đọc trường theo tên, nhưng nếu của bạn có, hãy đổi tên hằng số ở một chỗ.
- 4
Cập nhật lệnh gọi xác thực máy chủ
Đổi endpoint thành apiv1.captcha.la/v1/validate. Chúng tôi nhận JSON (Turnstile dùng form-urlencoded), nên hãy cập nhật Content-Type và hình thức body. Phản hồi vẫn trả về cờ valid (data.valid) cho mã rẽ nhánh của bạn.
- 5
Triển khai dần dần
Giữ Turnstile trên phần lớn biểu mẫu, đưa CaptchaLa vào một biểu mẫu lưu lượng thấp trước. Theo dõi tỷ lệ chuyển đổi và tỷ lệ thử thách trong một ngày. Mở rộng khi đã hài lòng — không có mức tối thiểu, không hợp đồng.
Nhanh hơn: dùng plugin
WordPress + WooCommerce
Nếu bạn đang dùng plugin Turnstile cộng đồng trên WordPress, hãy thay bằng plugin chính thức của chúng tôi. Đăng nhập, đăng ký, bình luận, thanh toán WooCommerce, CF7 / Gravity / WPForms — tất cả gói gọn trong một lần cài.
View integration →Flarum
Cài extension CaptchaLa qua Composer, bật trong trang quản trị, và mọi biểu mẫu Flarum (đăng ký, đăng nhập, đặt lại mật khẩu, trả lời bài viết) đều chạy qua CaptchaLa.
View integration →Câu hỏi thường gặp
Tôi có thể giữ CDN Cloudflare mà vẫn dùng CaptchaLa không?
Có. CaptchaLa độc lập với mọi CDN — phần lớn khách hàng của chúng tôi giữ Cloudflare làm CDN và dùng CaptchaLa để xác thực. Hai lớp này không xung đột.
Các quy tắc phát hiện bot của Cloudflare có còn áp dụng không?
Có — đó là các tính năng Cloudflare WAF / Bot Management, tách biệt với Turnstile. Gỡ widget Turnstile không ảnh hưởng đến cấu hình zone Cloudflare của bạn.
Nếu tôi đang dùng Turnstile qua Cloudflare Workers thì sao?
Việc chuyển đổi phía Worker cũng tương tự. Thay lệnh fetch Turnstile bằng lệnh fetch CaptchaLa. Chúng tôi có đoạn mã trong tài liệu tương thích với runtime của Workers.