Pemecahan Masalah

Kesalahan dan Perbaikan Umum reCAPTCHA v2 Enterprise

reCAPTCHA v2 Enterprise gagal karena alasan yang sama seperti v2 standar — sitekey salah, pageurl buruk, token kedaluwarsa — ditambah beberapa masalah khusus Enterprise. Masalah terbesar Enterprise adalah salah mengidentifikasi implementasi: menggunakan parameter v2 standar terhadap widget Enterprise, atau sebaliknya. Jika Anda mengirim method=userrecaptcha tanpa flag enterprise=1 untuk widget Enterprise, token yang dikembalikan akan ditolak oleh backend situs target.

Panduan ini mencakup setiap kegagalan umum saat solve reCAPTCHA v2 Enterprise via API CaptchaAI. Jika Anda tidak yakin apakah Anda berhadapan dengan standar atau Enterprise, baca Cara Mengidentifikasi Implementasi reCAPTCHA Enterprise terlebih dahulu.


Perbedaan reCAPTCHA v2 Enterprise dari Standar

Fitur Standar v2 Enterprise v2
URL skrip google.com/recaptcha/api.js google.com/recaptcha/enterprise.js
Objek JS grecaptcha grecaptcha.enterprise
Endpoint verifikasi google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com
Parameter CaptchaAI method=userrecaptcha method=userrecaptcha + enterprise=1
Parameter data-s Tidak pernah ada Kadang ada (token tambahan)

Error Khusus Enterprise

Mengirim Parameter Standar untuk Widget Enterprise

Gejala: API mengembalikan token, tapi situs target menolaknya.

Penyebab: Anda mengirimkan task tanpa enterprise=1. CaptchaAI menyelesaikannya sebagai v2 standar, tapi backend memverifikasi terhadap Enterprise API — yang menolak token standar.

Perbaikan: Tambahkan enterprise=1 ke request Anda:

import requests

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
    "pageurl": "https://staging.example.com/qa-login",
    "enterprise": 1,
    "json": 1
})

data = response.json()
task_id = data["request"]
const params = new URLSearchParams({
  key: "YOUR_API_KEY",
  method: "userrecaptcha",
  googlekey: "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
  pageurl: "https://staging.example.com/qa-login",
  enterprise: 1,
  json: 1,
});

const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const data = await res.json();
const taskId = data.request;

Parameter data-s Tidak Ada

Gejala: ERROR_BAD_PARAMETERS atau token ditolak situs.

Penyebab: Beberapa implementasi Enterprise menyertakan atribut data-s pada div reCAPTCHA. Ini adalah token sesi tambahan yang diperlukan untuk solve. Jika ada, Anda harus menyertakannya.

Perbaikan: Periksa halaman untuk data-s dan sertakan jika ditemukan:

# Look for: <div class="g-recaptcha" data-sitekey="..." data-s="..."></div>
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url,
    "enterprise": 1,
    "data-s": data_s_value,  # Include if present on the page
    "json": 1
})

Identifikasi Skrip Salah

Gejala: Token bekerja tidak konsisten atau selalu ditolak.

Penyebab: Anda mengidentifikasi widget sebagai standar padahal itu Enterprise (atau sebaliknya).

Perbaikan: Periksa sumber skrip di halaman HTML:

// Enterprise uses enterprise.js
// <script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>

// Standard uses api.js
// <script src="https://www.google.com/recaptcha/api.js"></script>

// Also check the JS object:
// Enterprise: grecaptcha.enterprise.render(...)
// Standard: grecaptcha.render(...)

Error Umum (Sama dengan v2 Standar)

Kode Error Penyebab Perbaikan
ERROR_WRONG_USER_KEY Format API key tidak valid Verifikasi di captchaai.com/api.php
ERROR_KEY_DOES_NOT_EXIST API key tidak ditemukan Periksa spasi atau karakter yang hilang
ERROR_ZERO_BALANCE Saldo habis Isi ulang akun Anda
ERROR_PAGEURL pageurl tidak ada Tambahkan URL halaman lengkap
ERROR_GOOGLEKEY Sitekey salah Ekstrak ulang dari data-sitekey
ERROR_BAD_TOKEN_OR_PAGEURL Sitekey/URL tidak cocok Periksa konteks iframe
CAPCHA_NOT_READY Masih dalam proses solve Tunggu 5 detik, polling lagi
ERROR_CAPTCHA_UNSOLVABLE Tidak dapat di-solve Submit task baru

Alur Solve dengan Error Handling

import requests
import time

def solve_recaptcha_v2_enterprise(api_key, sitekey, page_url, data_s=None):
    params = {
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "enterprise": 1,
        "json": 1
    }
    if data_s:
        params["data-s"] = data_s

    response = requests.get("https://ocr.captchaai.com/in.php", params=params)
    data = response.json()

    if data.get("status") != 1:
        raise RuntimeError(f"Submit failed: {data.get('request')}")

    task_id = data["request"]

    for _ in range(40):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id, "json": 1
        }).json()

        if result.get("status") == 1:
            return result["request"]
        if result.get("request") == "CAPCHA_NOT_READY":
            continue
        raise RuntimeError(f"Solve failed: {result.get('request')}")

    raise TimeoutError("Solve timed out after 200 seconds")

token = solve_recaptcha_v2_enterprise("YOUR_API_KEY", "SITEKEY", "https://staging.example.com/qa-login")
async function solveRecaptchaV2Enterprise(apiKey, sitekey, pageUrl, dataS) {
  const params = new URLSearchParams({
    key: apiKey, method: "userrecaptcha", googlekey: sitekey,
    pageurl: pageUrl, enterprise: 1, json: 1,
  });
  if (dataS) params.set("data-s", dataS);

  const submitRes = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
  const submitData = await submitRes.json();
  if (submitData.status !== 1) throw new Error(`Submit failed: ${submitData.request}`);

  const taskId = submitData.request;
  for (let i = 0; i < 40; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await fetch(`https://ocr.captchaai.com/res.php?${new URLSearchParams({
      key: apiKey, action: "get", id: taskId, json: 1,
    })}`);
    const data = await res.json();
    if (data.status === 1) return data.request;
    if (data.request === "CAPCHA_NOT_READY") continue;
    throw new Error(`Solve failed: ${data.request}`);
  }
  throw new Error("Timed out after 200s");
}

Pertanyaan Umum

Bagaimana saya tahu jika situs menggunakan reCAPTCHA Enterprise atau standar?

Periksa tag skrip di HTML. Enterprise memuat recaptcha/enterprise.js sedangkan standar memuat recaptcha/api.js. Objek JavaScript juga berbeda: Enterprise menggunakan grecaptcha.enterprise sedangkan standar menggunakan grecaptcha.

Apakah saya perlu mengubah API call untuk Enterprise?

Ya. Tambahkan enterprise=1 ke request CaptchaAI Anda. Tanpa flag ini, token dibuat untuk v2 standar, yang ditolak backend Enterprise.

Apa parameter data-s itu?

Beberapa implementasi Enterprise menyertakan atribut data-s pada div reCAPTCHA. Ini adalah token sesi tambahan. Jika ada di halaman, sertakan dalam request API Anda.

Mengapa token Enterprise saya ditolak bahkan dengan enterprise=1?

Periksa tiga hal: (1) sitekey sudah benar, (2) parameter data-s ada di halaman tapi tidak dalam request Anda, atau (3) token kedaluwarsa sebelum Anda mengirimkan form.

Bisakah saya menggunakan kode yang sama untuk v2 standar dan Enterprise?

Ya — tambahkan enterprise=1 untuk beralih. Selebihnya (nama method, parameter, polling) tetap sama.


Perbaiki Alur Kerja Enterprise Anda

  1. Verifikasi jenis implementasi — periksa enterprise.js di tag skrip
  2. Tambahkan enterprise=1 ke request CaptchaAI Anda
  3. Periksa data-s — sertakan jika halaman memiliki atribut ini
  4. Submit token segera — token Enterprise juga kedaluwarsa setelah ~2 menit

Dapatkan API key Anda di captchaai.com/api.php.


Panduan Terkait

  • Cara Solve reCAPTCHA v2 dengan API
  • Standar vs Enterprise reCAPTCHA v2
  • Referensi Kode Error CaptchaAI
Komentar dinonaktifkan untuk artikel ini.