마이그레이션 가이드

GeeTest에서 CaptchaLa로 마이그레이션

셀프서비스 가격, 영어 우선 문서, 그리고 네 개의 숨김 필드 대신 단일 토큰. 10분 이내에 전환하세요.

GeeTestCurrent setup~10 minCaptchaLaDrop-in target

코드 변경 예시

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. 1

    가입하고 App Key + Secret 받기

    무료 CaptchaLa 계정을 만드세요. 영업 통화도 문의 양식도 없습니다. 사이트를 추가하고 App Key(공개)와 App Secret(서버용)을 복사하세요.

  2. 2

    GeeTest 초기화 JS 제거

    initGeetest4 호출과 onSuccess 콜백을 삭제하세요. 채우던 네 개의 숨김 입력(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 문자열 검사 포함)을 apiv1.captcha.la/v1/validate로의 단일 JSON POST와 valid 플래그(data.valid)로 교체하세요.

  5. 5

    점진적으로 배포

    한 번에 하나의 폼씩 전환하세요. 전환율과 챌린지 비율을 지켜보세요. 최소 사용량도 계약도 없으므로 단계적 배포가 무료입니다.

자주 묻는 질문

CaptchaLa가 중국 본토에서도 똑같이 잘 작동하나요?

네, 다만 한 가지는 솔직히 밝힙니다. 저희는 중국 본토 안에 노드를 운영하지 않으며, 그렇다고 주장하지도 않습니다. 실제로 중요한 것은 저희 엔드포인트가 그곳에서 차단되지 않는다는 점입니다 — 구글의 것과 달리 — 따라서 고객의 폼은 계속 동작합니다. 본토 트래픽은 가장 가까운 아시아 엣지(베트남, 싱가포르, 홍콩)에서 처리됩니다. 지연 시간은 해당 시장 내 사용자보다 길고 국경 간 라우팅에 따라 변동하므로, 책임질 수 없는 수치는 제시하지 않습니다. 별도의 SDK, 계정, 청구 방식은 필요 없습니다.

우리 팀이 익숙한 GeeTest의 슬라이더 UX는 어떻게 되나요?

CaptchaLa는 적응형 시스템의 챌린지 유형 중 하나로 슬라이더를 포함합니다. 기본값은 아니지만 사용할 수 있습니다. 대부분의 팀은 기본값(저위험은 비표시 + 고위험은 클릭)이 슬라이더 우선 방식보다 전환율이 더 좋다고 느낍니다.

위험 점수 민감도에 차이가 있나요?

GeeTest의 위험 모델은 APAC 트래픽 패턴에 맞춰 조정되어 있습니다. CaptchaLa는 글로벌입니다. 트래픽이 APAC 중심이라면 비슷한 동작을 기대할 수 있습니다. APAC 외부라면 오탐(false positive)이 의미 있게 줄어드는 것을 볼 수 있습니다.