php УстановкаreCAPTCHAv2насайт

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php УстановкаreCAPTCHAv2насайт相关的知识,希望对你有一定的参考价值。

<?php
/**
 * This is a PHP library that handles calling reCAPTCHA.
 *    - Documentation and latest version
 *          https://developers.google.com/recaptcha/docs/php
 *    - Get a reCAPTCHA API Key
 *          https://www.google.com/recaptcha/admin/create
 *    - Discussion group
 *          http://groups.google.com/group/recaptcha
 *
 * @copyright Copyright (c) 2014, Google Inc.
 * @link      http://www.google.com/recaptcha
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

/**
 * A ReCaptchaResponse is returned from checkAnswer().
 */
class ReCaptchaResponse
{
    public $success;
    public $errorCodes;
}

class ReCaptcha
{
    private static $_signupUrl = "https://www.google.com/recaptcha/admin";
    private static $_siteVerifyUrl =
        "https://www.google.com/recaptcha/api/siteverify?";
    private $_secret;
    private static $_version = "php_1.0";

    /**
     * Constructor.
     *
     * @param string $secret shared secret between site and ReCAPTCHA server.
     */
    function ReCaptcha($secret)
    {
        if ($secret == null || $secret == "") {
            die("To use reCAPTCHA you must get an API key from <a href='"
                . self::$_signupUrl . "'>" . self::$_signupUrl . "</a>");
        }
        $this->_secret=$secret;
    }

    /**
     * Encodes the given data into a query string format.
     *
     * @param array $data array of string elements to be encoded.
     *
     * @return string - encoded request.
     */
    private function _encodeQS($data)
    {
        $req = "";
        foreach ($data as $key => $value) {
            $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
        }

        // Cut the last '&'
        $req=substr($req, 0, strlen($req)-1);
        return $req;
    }

    /**
     * Submits an HTTP GET to a reCAPTCHA server.
     *
     * @param string $path url path to recaptcha server.
     * @param array  $data array of parameters to be sent.
     *
     * @return array response
     */
    private function _submitHTTPGet($path, $data)
    {
        $req = $this->_encodeQS($data);
        $response = file_get_contents($path . $req);
        return $response;
    }

    /**
     * Calls the reCAPTCHA siteverify API to verify whether the user passes
     * CAPTCHA test.
     *
     * @param string $remoteIp   IP address of end user.
     * @param string $response   response string from recaptcha verification.
     *
     * @return ReCaptchaResponse
     */
    public function verifyResponse($remoteIp, $response)
    {
        // Discard empty solution submissions
        if ($response == null || strlen($response) == 0) {
            $recaptchaResponse = new ReCaptchaResponse();
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = 'missing-input';
            return $recaptchaResponse;
        }

        $getResponse = $this->_submitHttpGet(
            self::$_siteVerifyUrl,
            array (
                'secret' => $this->_secret,
                'remoteip' => $remoteIp,
                'v' => self::$_version,
                'response' => $response
            )
        );
        $answers = json_decode($getResponse, true);
        $recaptchaResponse = new ReCaptchaResponse();

        if (trim($answers ['success']) == true) {
            $recaptchaResponse->success = true;
        } else {
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = $answers [error-codes];
        }

        return $recaptchaResponse;
    }
}

class ProjectReCaptcha extends ReCaptcha
{
    private static $publicKey = '6Lcgr1cUAAAAAC4mFIv7nooPk-o2UKNKzXjuHbI3';
    private static $secretKey = '6Lcgr1cUAAAAAB25cBJEmQttlVwe3cBGgqdDUhJF';

    /**
     * @return string
     */
    public static function getPublicKey()
    {
        return self::$publicKey;
    }

    /**
     * @return string
     */
    public static function getSecretKey()
    {
        return self::$secretKey;
    }

    function __construct()
    {
        parent::ReCaptcha(self::$secretKey);
    }

    public function check()
    {
        $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();

        $response = $_REQUEST['g-recaptcha-response'];
        $remoteIp = $request->getRemoteAddress();
        return self::verifyResponse($remoteIp, $response);
    }

    public static function widget($autoInitialize = true)
    {
        if ($autoInitialize)
        {
            return '<div class="js-recaptcha"></div>';
        }
        else
        {
            return sprintf('<div class="g-recaptcha" data-sitekey="%s"></div>', self::$publicKey);
        }
    }

    public static function scripts()
    {
        ?>
        <script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit"  async defer></script>
        <script type="text/javascript">
            var recaptchaId = 0;
            var CaptchaCallback = function() {
                // получить формы, отрендерить капчу
                $('.js-recaptcha').not('[id]').each(function(key, item) {
                    recaptchaId++;

                    var id = 'recaptcha_' + recaptchaId;
                    $(item).attr('id', id);
                    var reid = grecaptcha.render(id, {'sitekey' : '<?=self::$publicKey?>'});
                    $(item).attr('data-reid', reid);
                });
            };
        </script>
        <?
    }
}

?>

以上是关于php УстановкаreCAPTCHAv2насайт的主要内容,如果未能解决你的问题,请参考以下文章

php Обрезаемтекстдонужногокол-васимволов(учитываяокончанияизнаки)

php Выравниваниекартиноквстатьепоцентрустатьи

php Проверкауникальностимассива

php ОставляетуказанныегруппыполейACFнастраницеуказанныхтерминоввадминке,анаостальныхудаляет。

php Возвращаетданныеометкахпостов,входящихвуказанную(ые)рубрику(и)

php Возвращаетданныеометкахпостов,входящихвуказанную(ые)рубрику(и)