يعود معظم رفض رموز 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، ما الذي أتحقق منه؟
راجع ثلاثة أمور يفسّر أحدها غالبية حالات الرفض:
- صحة مفتاح الموقع المستخرَج من
data-sitekey. - وجود معلمة
data-sعلى الصفحة وغيابها عن طلبك. - توقيت الإرسال، إذ قد تنتهي صلاحية الرمز قبل تقديم النموذج.
كيف أفرّق بين خطأ في الـ API ورفض من الموقع نفسه؟
الفرق في مصدر الفشل:
- خطأ في الـ API: يعود رمز خطأ صريح مثل
ERROR_GOOGLEKEY؛ المشكلة في طلبك. - رفض من الموقع: يعود رمز ناجح يرفضه الموقع؛ الخلل في نوع التنفيذ أو
data-s.
هل يشمل دعم CaptchaAI النسخة غير المرئية من reCAPTCHA v2 Enterprise؟
نعم، يُحلّها CaptchaAI عبر الطريقة userrecaptcha نفسها مع enterprise=1، بما فيها النسخة غير المرئية. المسار البرمجي واحد؛ ما يتغيّر هو تشغيل الأداة لا إرسال المهمة.
قائمة تحقق سريعة لإصلاح سير عمل Enterprise
- تأكّد من نوع التنفيذ — ابحث عن
enterprise.jsوعنgrecaptcha.enterprise. - أضِف
enterprise=1إلى طلب CaptchaAI ليُنتج رمزاً تقبله واجهة Enterprise. - افحص وجود
data-sوأدرِجه في الطلب إن حملته الصفحة. - أرسِل الرمز فوراً — تنتهي صلاحيته بعد نحو دقيقتين مثل القياسي.
أنشئ مفتاح الـ API من captchaai.com/api.php وطبّق الخطوات على بيئتك.