WBCP

کپچای رایگان و سازگار با reCAPTCHA

برای سایت‌هایی که باید در زمان قطعی اینترنت جهانی هم کار کنند.

چطور کار می‌کند؟

سه قدم ساده. بدون پازل تصویری و بدون سرویس خارجی.

  1. ویجت را به صفحه اضافه کنید

    یک خط اسکریپت و یک تکه HTML بگذارید. همان کدی که برای reCAPTCHA می‌نویسید.

  2. بازدیدکننده تیک می‌زند

    مرورگر او چند ثانیه یک محاسبهٔ کوچک انجام می‌دهد. لازم نیست عکسی انتخاب کند. بر خلاف گوگل، کوکی هم ندارد.

  3. سرور شما پاسخ را بررسی می‌کند

    توکن را به آدرس siteverify بفرستید. wbcp می‌گوید موفق بود یا نه.

مهاجرت از reCAPTCHA گوگل

اگر از reCAPTCHA v2 استفاده می‌کنید، فقط آدرس‌ها و کلیدها را عوض کنید. بقیهٔ کد همان می‌ماند.

  1. کلید بگیرید

    وارد شوید، یک سایت بسازید و دامنه‌اش را بنویسید. wbcp دو کلید می‌دهد: کلید سایت (Site key) برای صفحه و کلید خصوصی (Secret) برای سرور. کلید خصوصی فقط یک بار نشان داده می‌شود، پس همان لحظه آن را نگه دارید.

  2. آدرس اسکریپت را در صفحه عوض کنید

    آدرس گوگل را با آدرس wbcp عوض کنید و کلید سایت را بگذارید.

    <script src="https://www.google.com/recaptcha/api.js" async defer></script><script src="https://wbcp.ir/recaptcha/api.js" async defer></script><div class="g-recaptcha" data-sitekey="SITE_KEY"></div>
  3. پاسخ را در سرور بررسی کنید

    این قدم در سرور شما انجام می‌شود، نه در مرورگر. وقتی فرم ارسال می‌شود، مرورگر مقدار g-recaptcha-response را همراه فرم می‌فرستد. کدی که فرم را دریافت می‌کند (مثلاً ثبت‌نام یا تماس) باید پیش از ذخیره یا ارسال، این مقدار را از wbcp بپرسد. اگر جواب success نبود، فرم را رد کنید.

    اگر کد گوگل را از قبل دارید، فقط آدرس و کلید خصوصی را عوض کنید:

    POST https://www.google.com/recaptcha/api/siteverifyPOST https://wbcp.ir/recaptcha/api/siteverifysecret=SECRET&response=TOKEN

    اگر ندارید، یکی از این نمونه‌ها را در همان فایلی بگذارید که فرم را پردازش می‌کند. کلید خصوصی را هرگز در صفحه یا جاوااسکریپت نگذارید.

    PHP
    $token = $_POST['g-recaptcha-response'] ?? '';
    
    $body = http_build_query(['secret' => 'SECRET', 'response' => $token]);
    $reply = file_get_contents('https://wbcp.ir/recaptcha/api/siteverify', false, stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => 'Content-Type: application/x-www-form-urlencoded',
            'content' => $body,
        ],
    ]));
    
    if (! (json_decode($reply, true)['success'] ?? false)) {
        http_response_code(422);
        exit('تایید کپچا ناموفق بود.');
    }
    // اینجا فرم را ذخیره یا ارسال کنید
    Node.js
    const token = req.body['g-recaptcha-response'];
    
    const reply = await fetch('https://wbcp.ir/recaptcha/api/siteverify', {
      method: 'POST',
      body: new https://wbcp.irSearchParams({ secret: 'SECRET', response: token }),
    });
    const { success } = await reply.json();
    
    if (!success) {
      return res.status(422).send('تایید کپچا ناموفق بود.');
    }
    // اینجا فرم را ذخیره یا ارسال کنید
    Python
    import requests
    
    token = request.form['g-recaptcha-response']
    
    reply = requests.post('https://wbcp.ir/recaptcha/api/siteverify',
                          data={'secret': 'SECRET', 'response': token})
    
    if not reply.json().get('success'):
        return 'تایید کپچا ناموفق بود.', 422
    # اینجا فرم را ذخیره یا ارسال کنید
    ASP.NET Core (C#)
    string token = Request.Form["g-recaptcha-response"].ToString();
    
    using var http = new HttpClient();
    var reply = await http.PostAsync("https://wbcp.ir/recaptcha/api/siteverify",
        new FormUrlEncodedContent(new Dictionary<string, string>
        {
            ["secret"] = "SECRET",
            ["response"] = token,
        }));
    
    using var json = JsonDocument.Parse(await reply.Content.ReadAsStringAsync());
    if (!json.RootElement.GetProperty("success").GetBoolean())
    {
        return BadRequest("تایید کپچا ناموفق بود.");
    }
    // اینجا فرم را ذخیره یا ارسال کنید

    پاسخ wbcp این شکل است:

    { "success": true, "challenge_ts": "…", "hostname": "example.ir" }
  4. امتحان کنید

    فرم را باز کنید، تیک بزنید و ارسال کنید. اگر success برابر true بود، کار تمام است. هنگام توسعه در تنظیمات سایت «اجازهٔ localhost» را روشن کنید.

همان می‌ماند

g-recaptcha، data-sitekey، data-callback، grecaptcha.render و reset، فیلد g-recaptcha-response، و حالت چک‌باکس و نامرئی.

پشتیبانی نمی‌شود

reCAPTCHA v3 (امتیاز)، نسخهٔ Enterprise و چالش تصویری. اگر سایت شما از این‌ها استفاده می‌کند، مهاجرت ممکن نیست.