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
- Verifikasi jenis implementasi — periksa
enterprise.jsdi tag skrip - Tambahkan
enterprise=1ke request CaptchaAI Anda - Periksa
data-s— sertakan jika halaman memiliki atribut ini - 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