Проверка Yandex SmartCaptcha на PHP

Внедрение на сайт Yandex SmartCaptcha на PHP
17 Августа 2024
php

Чтобы внедрить Yandex SmartCaptcha (капчу) на сайт необходимо:

  1. Зарегистрировать капчу, получить ключ клиента и ключ сервера

  2. Подключить на странице скрипт яндекс капчи

    <script src="https://smartcaptcha.yandexcloud.net/captcha.js" defer></script>
    
  3. Вставить блок, где должна появиться капча, заменив XXX на ключ клиента

    <div class="smart-captcha" data-sitekey="XXX"></div>
    
  4. Проверка ключа осуществляется путем отправки на сайт smartcaptcha.yandexcloud.net/validate, запроса, с GET переменными:

    • secret - ключ сервера
    • token - input генерируемый js
    • ip - IP сервера
    $ response = json_decode(file_get_contents("https://smartcaptcha.yandexcloud.net/validate?secret=YYY&token=".$ _POST['smart-token']."&ip=".$ _SERVER['REMOTE_ADDR']), true);
    if($ response['status'] !== "ok"){ 
        return false;
    } 

    ИЛИ

    $ ch=curl_init();
    $ args=http_build_query([
        "secret" => "YYY",
        "token" => $ _POST["smart-token"],
        "ip" => $ _SERVER['REMOTE_ADDR'],
    ]);
    curl_setopt($ ch, CURLOPT_URL, "https://smartcaptcha.yandexcloud.net/validate?$ args");
    curl_setopt($ ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ ch, CURLOPT_TIMEOUT, 1);
    $ server_output = curl_exec($ ch);
    $ httpcode = curl_getinfo($ ch, CURLINFO_HTTP_CODE);
    curl_close($ ch);
    if ($ httpcode!==200){ 
        return false;
    } 
    $ resp=json_decode($ server_output);
    if($ resp->status !== "ok"){ 
        return false;
    } 

    где YYY - ключ сервера