Руководство по миграции

Переход с GeeTest на CaptchaLa

Самостоятельные цены, документация на английском в первую очередь и единый токен вместо четырёх скрытых полей. Переход менее чем за 10 минут.

GeeTestCurrent setup~10 minCaptchaLaDrop-in target

Как выглядит изменение кода

До — 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>
После — 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>
До — серверная проверка GeeTest (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' })
После — серверная проверка CaptchaLa (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. 1

    Зарегистрируйтесь и получите App Key + Secret

    Создайте бесплатный аккаунт CaptchaLa — без звонка продажам, без контактной формы. Добавьте сайт, скопируйте App Key (публичный) и App Secret (серверный).

  2. 2

    Удалите JS-инициализацию GeeTest

    Удалите вызов initGeetest4 и его колбэк onSuccess. Уберите четыре скрытых input (lot_number, captcha_output, pass_token, gen_time), которые вы заполняли.

  3. 3

    Добавьте тег виджета CaptchaLa

    Замените весь блок GeeTest нашими div + script. Настройка JS не нужна — виджет самоинициализируется из data-app-key.

  4. 4

    Упростите серверную проверку

    Замените проверку GeeTest (с её вычислением HMAC sign_token, телом из четырёх полей и проверкой строки result) одним JSON POST к apiv1.captcha.la/v1/validate и флагом valid (data.valid).

  5. 5

    Разворачивайте постепенно

    Переключайте по одной форме за раз. Следите за конверсией и частотой проверок. Минимума или контракта нет, так что поэтапный запуск бесплатен.

Частые вопросы

Будет ли CaptchaLa так же хорошо работать в материковом Китае?

Да. Мы используем нативные точки доступа внутри материкового Китая — ту же проверку с низкой задержкой, что реальные пользователи получают в других местах. Без отдельного SDK, без отдельного биллинга.

А что со слайдер-UX GeeTest, к которому привыкла моя команда?

CaptchaLa включает слайдер как один из типов проверки в адаптивной системе — он не по умолчанию, но доступен. Большинство команд находят, что вариант по умолчанию (невидимый для низкого риска + клик для более высокого) конвертирует лучше, чем слайдер в первую очередь.

Есть ли различия в чувствительности оценки риска?

Модель риска GeeTest настроена под паттерны трафика APAC. Модель CaptchaLa — глобальная. Если ваш трафик в основном APAC, ожидайте сопоставимого поведения. Если вы за пределами APAC, вы можете увидеть заметное снижение ложных срабатываний.