Проверка 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 - ключ сервера