Khắc Phục Sự Cố

Các lỗi và cách sửa lỗi phổ biến của reCAPTCHA v2 Enterprise

reCAPTCHA v2 Enterprise không thành công vì những lý do tương tự như phiên bản 2 tiêu chuẩn — sai khóa trang web, URL trang không hợp lệ, mã thông báo đã hết hạn — cùng với một số vấn đề dành riêng cho Doanh nghiệp. Vấn đề lớn nhất của Enterprise là xác định sai cách triển khai: sử dụng các tham số v2 tiêu chuẩn đối với tiện ích Enterprise hoặc ngược lại. Nếu bạn gửi method=userrecaptcha mà không có cờ enterprise=1 cho tiện ích Doanh nghiệp, mã thông báo được trả về sẽ bị chương trình phụ trợ của trang đích từ chối.

Hướng dẫn này bao gồm mọi lỗi thường gặp khi giải reCAPTCHA v2 Enterprise thông qua API CaptchaAI. Nếu bạn không chắc mình đang làm việc với tiêu chuẩn hay Doanh nghiệp, hãy đọcCách xác định việc triển khai reCAPTCHA EnterpriseĐầu tiên.


reCAPTCHA v2 Enterprise khác với tiêu chuẩn như thế nào

tính năng Tiêu chuẩn v2 Doanh nghiệp v2
URL tập lệnh google.com/recaptcha/api.js google.com/recaptcha/enterprise.js
đối tượng JS grecaptcha grecaptcha.enterprise
Điểm cuối xác minh google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com
Tham số CaptchaAI method=userrecaptcha method=userrecaptcha + enterprise=1
Tham số data-s Chưa bao giờ sử dụng Đôi khi hiện diện (mã thông báo bổ sung)

Lỗi dành riêng cho doanh nghiệp

Gửi tham số tiêu chuẩn cho tiện ích Doanh nghiệp

Triệu chứng: API trả về mã thông báo nhưng trang đích từ chối mã đó.

Lý do: Bạn đã gửi nhiệm vụ mà không có enterprise=1. CaptchaAI đã giải quyết nó dưới dạng v2 tiêu chuẩn, nhưng phần phụ trợ xác minh dựa trên API doanh nghiệp — từ chối mã thông báo tiêu chuẩn.

Khắc phục: Thêm enterprise=1 vào yêu cầu của bạn:

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;

Thiếu tham số dữ liệu

Triệu chứng: ERROR_BAD_PARAMETERS hoặc mã thông báo bị trang web từ chối.

Lý do: Một số hoạt động triển khai Enterprise bao gồm thuộc tính data-s trên div reCAPTCHA. Đây là mã thông báo phiên bổ sung cần thiết để giải quyết. Nếu có, bạn phải bao gồm nó.

Khắc phục: Kiểm tra trang data-s và đưa nó vào nếu tìm thấy:

# 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
})

Nhận dạng tập lệnh sai

Triệu chứng: Mã thông báo hoạt động không nhất quán hoặc luôn bị từ chối.

Lý do: Bạn đã xác định tiện ích này là tiêu chuẩn khi là Doanh nghiệp (hoặc ngược lại).

Khắc phục: Kiểm tra nguồn tập lệnh trong trang 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(...)

Lỗi chung (chia sẻ với tiêu chuẩn v2)

Mã lỗi nguyên nhân sửa chữa
ERROR_WRONG_USER_KEY Định dạng khóa API không hợp lệ Xác minh tạicaptchaai.com/api.php
ERROR_KEY_DOES_NOT_EXIST Không tìm thấy khóa API Kiểm tra khoảng trống thừa hoặc ký tự bị thiếu
ERROR_ZERO_BALANCE Không có số dư Nạp tiền vào tài khoản của bạn
ERROR_PAGEURL Thiếu pageurl Thêm URL trang đầy đủ
ERROR_GOOGLEKEY Khóa trang web không đúng định dạng Trích xuất lại từ data-sitekey
ERROR_BAD_TOKEN_OR_PAGEURL Sitekey/URL không khớp Kiểm tra bối cảnh iframe
CAPCHA_NOT_READY Vẫn đang giải quyết Đợi 5 giây, thăm dò lại
ERROR_CAPTCHA_UNSOLVABLE Không thể giải quyết được Gửi nhiệm vụ mới

Hoàn thành quy trình giải quyết với xử lý lỗi

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");
}

Câu hỏi thường gặp

Làm cách nào để biết một trang web sử dụng reCAPTCHA Enterprise hay tiêu chuẩn?

Kiểm tra thẻ script trong HTML. Doanh nghiệp tải recaptcha/enterprise.js trong khi tải tiêu chuẩn recaptcha/api.js. Đối tượng JavaScript cũng khác: Doanh nghiệp sử dụng grecaptcha.enterprise trong khi tiêu chuẩn sử dụng grecaptcha.

Tôi có cần thay đổi lệnh gọi API cho Doanh nghiệp không?

Vâng. Thêm enterprise=1 vào yêu cầu CaptchaAI của bạn. Nếu không có cờ này, mã thông báo sẽ được tạo cho v2 tiêu chuẩn mà phần phụ trợ của Doanh nghiệp từ chối.

Tham số data-s là gì?

Một số triển khai Enterprise bao gồm thuộc tính data-s trên div reCAPTCHA. Đây là mã thông báo phiên bổ sung. Nếu có trên trang, hãy đưa nó vào yêu cầu API của bạn.

Tại sao mã thông báo Doanh nghiệp của tôi bị từ chối ngay cả khi doanh nghiệp=1?

Kiểm tra ba điều: (1) khóa trang web chính xác, (2) tham số data-s xuất hiện trên trang nhưng bị thiếu trong yêu cầu của bạn hoặc (3) mã thông báo đã hết hạn trước khi bạn gửi biểu mẫu.

Tôi có thể sử dụng cùng một mã cho phiên bản Standard và Enterprise v2 không?

Có — thêm enterprise=1 để chuyển đổi. Mọi thứ khác (tên phương thức, tham số, bỏ phiếu) vẫn giữ nguyên.


Sửa quy trình làm việc Doanh nghiệp của bạn

  1. Xác minh loại triển khai — kiểm tra enterprise.js trong thẻ tập lệnh
  2. Thêm enterprise=1 vào yêu cầu CaptchaAI của bạn
  3. Kiểm tra data-s — thêm nó nếu trang có thuộc tính này
  4. Gửi mã thông báo ngay lập tức — Mã thông báo doanh nghiệp cũng hết hạn sau ~2 phút

Nhận khóa API của bạn tạicaptchaai.com/api.php.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.