استكشاف الأخطاء

أخطاء وإصلاحات reCAPTCHA v2 Enterprise الشائعة

يعود معظم رفض رموز reCAPTCHA v2 Enterprise إلى سبب واحد: إرسال الطلب بمعلمات الإصدار القياسي دون العلامة enterprise=1. عالِج غالبية الحالات بثلاث خطوات:

  • أضِف enterprise=1 إلى طلب CaptchaAI.
  • التقط معلمة data-s إن وُجدت على الصفحة.
  • أرسِل الرمز فور استلامه قبل انتهاء صلاحيته.

أمّا الباقي فيشترك مع الإصدار القياسي: مفتاح موقع خاطئ، أو عنوان صفحة غير مطابق، أو رمز منتهي الصلاحية. والمشكلة الأهمّ ليست في الكود بل في التشخيص؛ إذ يعامل كثير من المطوّرين أداة Enterprise كأنها قياسية فيحصلون على رمز يُرفض. إن لم تتأكد من نوع التنفيذ فابدأ من دليل التعرّف على تنفيذ reCAPTCHA Enterprise.


كيف تعرف أنك أمام reCAPTCHA v2 Enterprise لا القياسي

يحدّد الفرق بين الإصدارين المعلمة والواجهة المتحققة من الرمز. قارن شيفرة الصفحة بالجدول:

الميزة القياسي v2 Enterprise v2
عنوان URL للبرنامج النصي google.com/recaptcha/api.js google.com/recaptcha/enterprise.js
كائن JS grecaptcha grecaptcha.enterprise
نقطة نهاية التحقق google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com
معلمة CaptchaAI method=userrecaptcha method=userrecaptcha + enterprise=1
معلمة data-s لا تُستخدم إطلاقاً موجودة أحياناً — رمز إضافي

أوضح إشارتين للتمييز السريع:

  • مصدر البرنامج النصي: enterprise.js مؤسسي، وapi.js قياسي.
  • كائن JavaScript: grecaptcha.enterprise للمؤسسي وgrecaptcha للقياسي.

رموز الأخطاء العامة المشتركة مع الإصدار القياسي

قبل تفاصيل Enterprise، استبعد الأخطاء العامة غير المرتبطة بنوع الأداة. تظهر مع أيّ طلب reCAPTCHA:

رمز الخطأ السبب الإصلاح
ERROR_WRONG_USER_KEY تنسيق مفتاح API غير صالح تحقّق منه في captchaai.com/api.php
ERROR_KEY_DOES_NOT_EXIST لم يُعثر على مفتاح API افحص المسافات الزائدة أو الأحرف الناقصة
ERROR_ZERO_BALANCE لا يوجد رصيد اشحن رصيد حسابك
ERROR_PAGEURL pageurl مفقود أضِف عنوان URL الكامل للصفحة
ERROR_GOOGLEKEY مفتاح الموقع تالف أعِد استخراجه من data-sitekey
ERROR_BAD_TOKEN_OR_PAGEURL عدم تطابق مفتاح الموقع مع عنوان الصفحة تحقّق من سياق الـ iframe
CAPCHA_NOT_READY الحل ما زال جارياً انتظر 5 ثوانٍ ثم استطلِع النتيجة مجدداً
ERROR_CAPTCHA_UNSOLVABLE تعذّر الحل أرسِل مهمة جديدة

إن غاب رمز الخطأ ورُفض الرمز، فالمشكلة على الأرجح خاصة بـ Enterprise.


الأخطاء الخاصة بـ reCAPTCHA v2 Enterprise وإصلاحاتها

تنشأ هذه الأخطاء من تنفيذ Enterprise، وتتكرر في ثلاث حالات:

إرسال معلمات الإصدار القياسي إلى أداة Enterprise

  • العَرَض: يُرجع الـ API رمزاً، لكن الموقع يرفضه.
  • السبب: أُرسلت المهمة دون enterprise=1، فحُلّت كإصدار قياسي ترفضه واجهة Enterprise الخلفية.
  • الإصلاح: أضِف enterprise=1 إلى طلبك:
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://example.com/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://example.com/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;

غياب معلمة data-s

  • العَرَض: ظهور ERROR_BAD_PARAMETERS، أو رفض الموقع للرمز.
  • السبب: تُضيف بعض تطبيقات Enterprise سمة data-s إلى عنصر reCAPTCHA، وهي رمز جلسة لازم للحل؛ فإن غاب خرج الرمز ناقصاً.
  • الإصلاح: ابحث في الصفحة عن data-s وأدرِجه إن وُجد:
# 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
})

الخلط في تحديد نوع البرنامج النصي

  • العَرَض: يعمل الرمز بشكل متقطّع أو يُرفض دائماً.
  • السبب: حدّدت الأداة على أنها قياسية وهي مؤسسية، أو العكس.
  • الإصلاح: تحقّق من مصدر البرنامج النصي في شيفرة 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(...)

سيناريو تطبيقي من السوق العربي

تخيّل فريق ضبط جودة في متجر إلكتروني بالخليج يؤتمت اختبارات تسجيل الدخول على بوابة دفع تعتمد reCAPTCHA v2 Enterprise. كانت الاختبارات تنجح على بيئة التطوير وتفشل على الإنتاج، لأن الإنتاج يحمّل enterprise.js بينما التطوير على api.js. أضاف الفريق enterprise=1 والتقط data-s، فعاد معدل النجاح فوراً. والدرس: افحص شيفرة كل بيئة على حدة قبل الحل.


تدفق حل reCAPTCHA v2 Enterprise كاملاً مع معالجة الأخطاء

يجمع الكود التالي ما سبق في دالة واحدة: يرسل المهمة بـ enterprise=1، ويضيف data-s إن توفّر، ثم يستطلع النتيجة حتى يعود الرمز أو تنتهي المهلة — بلغتي Python وNode.js:

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://example.com/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");
}

أسئلة شائعة حول أخطاء reCAPTCHA v2 Enterprise

كم من الوقت يبقى رمز reCAPTCHA v2 Enterprise صالحاً؟

يبقى رمز Enterprise صالحاً نحو دقيقتين بعد الحل، مثل القياسي. أرسِله فور استلامه؛ فتخزينه لإعادة استخدامه لاحقاً سبب شائع للرفض.

هل تكلفة حل reCAPTCHA v2 Enterprise أعلى من الإصدار القياسي في CaptchaAI؟

لا. يعتمد CaptchaAI التسعير حسب عدد المسارات (Threads) المتزامنة مع حلول غير محدودة لكل مسار، دون رسوم بحسب نوع الـ CAPTCHA. تبدأ الخطط من BASIC بسعر ‎$15 شهرياً و5 مسارات، ويُحلّ Enterprise بالسعر ذاته.

الموقع يرفض الرمز رغم إضافة enterprise=1، ما الذي أتحقق منه؟

راجع ثلاثة أمور يفسّر أحدها غالبية حالات الرفض:

  1. صحة مفتاح الموقع المستخرَج من data-sitekey.
  2. وجود معلمة data-s على الصفحة وغيابها عن طلبك.
  3. توقيت الإرسال، إذ قد تنتهي صلاحية الرمز قبل تقديم النموذج.

كيف أفرّق بين خطأ في الـ API ورفض من الموقع نفسه؟

الفرق في مصدر الفشل:

  • خطأ في الـ API: يعود رمز خطأ صريح مثل ERROR_GOOGLEKEY؛ المشكلة في طلبك.
  • رفض من الموقع: يعود رمز ناجح يرفضه الموقع؛ الخلل في نوع التنفيذ أو data-s.

هل يشمل دعم CaptchaAI النسخة غير المرئية من reCAPTCHA v2 Enterprise؟

نعم، يُحلّها CaptchaAI عبر الطريقة userrecaptcha نفسها مع enterprise=1، بما فيها النسخة غير المرئية. المسار البرمجي واحد؛ ما يتغيّر هو تشغيل الأداة لا إرسال المهمة.


قائمة تحقق سريعة لإصلاح سير عمل Enterprise

  1. تأكّد من نوع التنفيذ — ابحث عن enterprise.js وعن grecaptcha.enterprise.
  2. أضِف enterprise=1 إلى طلب CaptchaAI ليُنتج رمزاً تقبله واجهة Enterprise.
  3. افحص وجود data-s وأدرِجه في الطلب إن حملته الصفحة.
  4. أرسِل الرمز فوراً — تنتهي صلاحيته بعد نحو دقيقتين مثل القياسي.

أنشئ مفتاح الـ API من captchaai.com/api.php وطبّق الخطوات على بيئتك.


أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.