Google reCaptcha Nasıl Doğrulanır?


10

Bize ulaşın formunda google recaptcha ekledim ama değer de captcha olmadan gönderiyor. İletişim sayfamda captcha için aşağıdaki kodları kullandım:

 <div class="g-recaptcha" data-sitekey="XXXXXXXXXX"></div> 
 <script src='https://www.google.com/recaptcha/api.js'></script>

Bu iki kod kullandım. lütfen bana captcha'yı nasıl doğrulayabilirim.




Yanıtlar:


9

Bu kodu denemelisiniz: Bunu sitemde kullanıyorum.

<script>
window.onload = function() {
  var recaptcha = document.forms["contactForm"]["g-recaptcha-response"];
  recaptcha.required = true;
  recaptcha.oninvalid = function(e) {

    alert("Please complete the captcha");
   }
}
</script> 

temasında yerleşik bize ulaşın sayfasında çalışacak mı?
Manish Gaur

evet .. işe yarayacaksa bana haber ver
NID

2
form-validate yerine contactForm
NID

1
Google Analytics için bir uzantı yükleyebilirsiniz. magentocommerce.com/magento-connect/… . Google, tüm bunları zaten izlemekte harika bir iş çıkarıyor. Daha sonra daha sağlam bir şey istiyorsanız, daha fazlasını yapan ücretli uzantılar vardır.
NID

1
belki bu yardımcı olabilir .. magento.stackexchange.com/questions/37363/…
NID

7

Bu komut dosyası, magento'nun varsayılan doğrulaması gibi google reCaptcha doğrulaması için kullanılır. lütfen kullanın.

<form name="freeeventForm" id="freeeventForm">
    <div id="RecaptchaField"></div>
    <input type="hidden" class="validate-reCAPTCHA">
</form>
        <script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>
    <script type="text/javascript">
        //< ![CDATA[
            var CaptchaCallback = function() {  
            grecaptcha.render('RecaptchaField', {'sitekey' : '6LeuiDwUAAAAALByt-xxxxxxxxxxx-xUsZHFkeEP'});
        };
        var customForm = new VarienForm('freeeventForm');
        Validation.add('validate-reCAPTCHA','reCAPTCHA is mandatory',function(){
            var response = grecaptcha.getResponse();
            if (response.length === 0) {
                    return false;
            }
            return true;
    });
        //]]>
    </script>

Çok teşekkür ederim, prototip / validate.js kullanarak magento'da reCaptcha'yı doğrulamak için doğru cevap. Bir cazibe gibi çalışmak!
Waleed Asender

Bu benim
amacım

burada aynı. Teşekkürler
biplab rout

Bunu billing.phtml dosyamda kullanmak istiyorum, lütfen bana bu kodu kullandığımı ancak recaptcha'ı doğrulamadığımı önerebilir misiniz? `<script> window.onload = function () {// var recaptcha = document.forms [" ortak faturalama formu "] [" g-recaptcha-response "]; var recaptcha = jQuery ('. g-recaptcha-response'). val (); recaptcha.required = true; recaptcha.oninvalid = function (e) {alert ("Lütfen captcha'yı tamamlayın"); yanlış döndür; }} </script> `
Abi Sharma

7

Yukarıdaki kabul edilen JavaScript çözümü kesinlikle bence değil. JS kullanmayan botlar (çoğu) doğrulama işleminizi atlar ve engellemeye çalıştığınız tüm spam'leri alırsınız. Her zaman daima sunucuda doğrulayın. JS doğrulaması sadece bir UX ilk adımıdır.

Her neyse, birden fazla çözüm var, ama uzun saatler süren araştırmaların ardından Magento 1.9'da benim için işe yarayan şey buydu. Bu aslında Mike'ın yukarıdaki cevabı üzerine inşa edilmiştir, ancak önceki işlev sunucu yapılandırmanıza bağlı olarak genellikle http sarmalayıcı hataları vereceğinden cURL için file_get_contents'i değiştirir.

Bir klasör / uygulama / kod / yerel / TedarikAdınız / ValidateCaptcha /

Yeni ValidateCaptcha klasörünüzde, Customer.php dosyasıyla bir Model klasörü ekleyin. Bu, Magento tarafından sağlanan temel Customer.php dosyasını geçersiz kılmak için kullanılacaktır.

Bu kodu kopyalayın ve yapıştırın:

<?php
class YourVendorName_ValidateCaptcha_Model_Customer extends Mage_Customer_Model_Customer {

    /**
     * Validate customer attribute values.
     *
     * @return bool
     */
    public function validate()
    {
        // This section is from the core file
        $errors = array();
        if (!Zend_Validate::is( trim($this->getFirstname()) , 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('The first name cannot be empty.');
        }

        if (!Zend_Validate::is( trim($this->getLastname()) , 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('The last name cannot be empty.');
        }

        if (!Zend_Validate::is($this->getEmail(), 'EmailAddress')) {
            $errors[] = Mage::helper('customer')->__('Invalid email address "%s".', $this->getEmail());
        }

        $password = $this->getPassword();
        if (!$this->getId() && !Zend_Validate::is($password , 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('The password cannot be empty.');
        }
        if (strlen($password) && !Zend_Validate::is($password, 'StringLength', array(6))) {
            $errors[] = Mage::helper('customer')->__('The minimum password length is %s', 6);
        }
        $confirmation = $this->getPasswordConfirmation();
        if ($password != $confirmation) {
            $errors[] = Mage::helper('customer')->__('Please make sure your passwords match.');
        }

        $entityType = Mage::getSingleton('eav/config')->getEntityType('customer');
        $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'dob');
        if ($attribute->getIsRequired() && '' == trim($this->getDob())) {
            $errors[] = Mage::helper('customer')->__('The Date of Birth is required.');
        }
        $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'taxvat');
        if ($attribute->getIsRequired() && '' == trim($this->getTaxvat())) {
            $errors[] = Mage::helper('customer')->__('The TAX/VAT number is required.');
        }
        $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'gender');
        if ($attribute->getIsRequired() && '' == trim($this->getGender())) {
            $errors[] = Mage::helper('customer')->__('Gender is required.');
        }

        // additional reCAPTCHA validation
        // this should actually be in it's own function, but I've added 
        // it here for simplicity

        // Magento uses this method for a few different requests, so make
        // sure it's limited only to the 'createpost' action
        $action = Mage::app()->getRequest()->getActionName();
        if ( $action == 'createpost' ) { // restrict to the registration page only
            $captcha = Mage::app()->getRequest()->getPost('g-recaptcha-response', 1);
            if ( $captcha == '' ) {
                // if the field is empty, add an error which will be
                // displayed at the top of the page
                $errors[] = Mage::helper('customer')->__('Please check the reCAPTCHA field to continue.');
            } else {
                $secret = 'your-secret-key-goes-here';
                $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $captcha . '&remoteip=' . $_SERVER["REMOTE_ADDR"];

                $ch = curl_init();
                // if you're testing this locally, you'll likely need to 
                // add your own CURLOPT_CAINFO parameter or you'll get
                // SSL errors
                curl_setopt( $ch, CURLOPT_URL, $url );
                curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
                $response = curl_exec( $ch );

                $result = json_decode( $response, true );
                if ( trim( $result['success'] ) != true ) {
                    // Add reCAPTCHA error
                    // This will be shown at the top of the registration page
                    $errors[] = Mage::helper('customer')->__('reCAPTCHA unable to verify.');
                }
            }
        }

        // now return the errors with your reCAPTCHA validation as well
        if (empty($errors)) {
            return true;
        }
        return $errors;
    }


}

Şimdi modülünüze bir etc klasörü ekleyin ve aşağıdakileri içeren bir config.xml dosyası oluşturun:

<?xml version="1.0"?>
<config>
    <modules>
        <YourVendorName_ValidateCaptcha>
            <version>1.0</version>
        </YourVendorName_ValidateCaptcha>
    </modules>

    <global>
       <models>
          <customer>
              <rewrite>
                  <customer>YourVendorName_ValidateCaptcha_Model_Customer</customer>
              </rewrite>
          </customer>
       </models>
    </global>
</config>

Ardından, JS'yi tema başlığınıza eklemeniz gerekir. App / design / frontend / default / YOURTHEME / template / page / html / head.phtml altına bunu en sonunda ekleyin. Bu dosyanız yoksa, temel dosyalardan kopyalayın. Ancak temel dosyaların üzerine yazmayın. Her zaman kendin yap!

<?php
/* reCAPTCHA */
if ( strpos( Mage::helper('core/url')->getCurrentUrl(), 'account/create') != false ) { ?>   
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<?php } ?>

Şimdi app / design / frontend / default / YOURTHEME / template / persistent / customer / form / register.phtml dosyasında, düğmenin alt kısmına yakın div düğmesinden hemen önce ekleyin:

    <div class="g-recaptcha" data-sitekey="your-site-key-goes-here"></div>
    <span id="captcha-required" style='display:none; color:#ff0000'><?php echo $this->__('Please Fill Recaptcha To Continue'); ?></span>

Neredeyse bitti! Şimdi aşağıdakileri içeren bir uygulama / etc / modules / YourVendorName / ValidateCaptcha.xml oluşturarak yeni modülünüzü kaydettirmeniz yeterlidir:

<?xml version="1.0"?>
<config>
    <modules>
        <YourVendorName_ValidateCaptcha>
            <active>true</active>
            <codePool>local</codePool>
        </YourVendorName_ValidateCaptcha>
    </modules>
</config>

SatıcıAdınızı istediğiniz her şeyle değiştirin. Nihai yapınız şöyle olmalıdır:

- app
  - code
    - local
      - YourVendorName
        - ValidateCaptcha
          - etc
            config.xml
          - Model
            Customer.php
- design
  - frontend
    - default
      - YOURTHEME
        - template
          - customer
            - form
              register.phtml
          - page
            - html
              head.phtml
          - persistent
            - customer
              - form
                register.phtml
- etc
  - modules
    YourVendorName_ValidateCaptcha.xml

6

İletişim formunda recaptcha kullandım ..

<form action="<?php echo Mage::getUrl('mcrecaptcha/index/save'); ?>" id="contactForm" method="post" onSubmit="return checkcaptcha() ;">
    <ul class="form-list">
            <li class="fields">
                <div class="field">
                    <div class="input-box">
                        <input placeholder="Name" name="name" id="name" title="<?php echo Mage::helper('contacts')->__('Name') ?>" value="<?php echo $this->escapeHtml($this->helper('contacts')->getUserName()) ?>" class="input-text required-entry" type="text" />
                    </div>
                </div>
                <div class="field">
                    <div class="input-box">
                        <input placeholder="Email" name="email" id="email" title="<?php echo Mage::helper('contacts')->__('Email') ?>" value="<?php echo $this->escapeHtml($this->helper('contacts')->getUserEmail()) ?>" class="input-text required-entry validate-email contact_us_margin_top" type="text" />
                    </div>
                </div>
            </li>
            <li>
                <div class="input-box">
                    <input placeholder="Telephone" name="telephone" id="telephone" title="<?php echo Mage::helper('contacts')->__('Telephone') ?>" value="" class="input-text contact_us_margin_top" type="text" />
                </div>
            </li>
            <li class="wide">
                <div class="input-box">
                    <textarea placeholder="Comment" name="comment" id="comment" title="<?php echo Mage::helper('contacts')->__('Comment') ?>" class="required-entry input-text contact_us_margin_top" cols="5" rows="3" style="width:100%;"></textarea>
                </div>
            </li>
               <li id="rcode">  
                        <div class="captcha">
                                <div class="g-recaptcha contact_us_margin_top" data-sitekey="6Ldi8xsUAAAAAHsK15YxKsdhIn6lGk-RUIk222-f"> </div>
                        </div>
                        <div class="buttons-set contact_us_margin_top">
                            <input type="text" name="hideit" id="hideit" value="" style="display:none !important;" />
                            <button type="submit" title="<?php echo Mage::helper('contacts')->__('Submit') ?>" class="button" onClick="_gaq.push(['_trackEvent', 'Submit', 'contacts click','Contact Us'])"><span><span><?php echo Mage::helper('contacts')->__('Submit') ?></span></span></button>
                        </div>
                        <span class='captcha-error'><?php echo Mage::helper('contacts')->__('Please check the the captcha form.') ?></span>
                </li>      
        </ul>
</form>

<script>
function checkcaptcha()
{
    if((jQuery('#g-recaptcha-response').val())=='')
    {
        jQuery('.captcha-error').css('display','block');
        return false;
    }
    else
    {
        jQuery('.captcha-error').css('display','none');
    }

}
</script>

Temanın inşa iletişim formunda captcha kodunu uyguladım .... lütfen buna göre temamı söyler misin. eflatun acemiyim bu yüzden lütfen bana yardım et
Manish Gaur

bu iletişim formu yerleşik iletişim formunda
Jigs Parmar

sadece bu kodu formunuza uygulamak ve sadece veri sitekey değiştirmek zorunda
Jigs Parmar

Cevabınızı alıyorsanız lütfen cevabımı kabul edin
Jigs Parmar


3

Captcha'yı doğrulamak için, form değerlerinizi ve ayrıca doğrulamayı kaydetmek için bir kayıt denetleyicisi oluşturun.

namespace Mike\SampleModule\Controller;

class Save extends \Magento\Framework\App\Action\Action
{
/**
* @var Google reCaptcha Options
*/
private static $_siteVerifyUrl = "https://www.google.com/recaptcha/api/siteverify?";
private $_secret;
private static $_version = "php_1.0";
/**
* Save Form Data
*
* @return array
*/
public function execute()
{
$captcha = $this->getRequest()->getParam('g-recaptcha-response');
$secret = "<--your secret key-->"; //Replace with your secret key
$response = null;
$path = self::$_siteVerifyUrl;
$dataC = array (
'secret' => $secret,
'remoteip' => $_SERVER["REMOTE_ADDR"],
'v' => self::$_version,
'response' => $captcha
);
$req = "";
foreach ($dataC as $key => $value) {
     $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
}
// Cut the last '&'
$req = substr($req, 0, strlen($req)-1);
$response = file_get_contents($path . $req);
$answers = json_decode($response, true);
if(trim($answers ['success']) == true) {
    // Captcha Validated
    // Save Form Data
}else{
    // Display Captcha Error
}
}
}

Yukarıdaki örnek kodlardaki site anahtarını ve gizli anahtarı değiştirdiğinizden emin olun.


Formumu bu dosyaya nasıl bağlarım? Form, POST yöntemiyle action = "<? Php echo $ this-> getPostActionUrl ()?>" Öğesine gider.
Fıstık

1

NID

ReCaptcha script snippit'iniz işe yarayacak gibi görünüyor ama Magento'nun kaynak head.phtml dosyasına girildiğini netleştirin? (veya form.phtml?) Magento'nun hemen altına yerleştirilmelidir.

Özellikle php girerken soru Magento aşağıdaki örnek gibi şablon kaynak sayfalarının çoğu için üst yerleştirir hemen php yorum bölümünden sonra girmek düzenli bir uygulama mı?

Magento Yasal Uyarı burada php etiketleri. RECAPTCHA BURADAN YER ALIN mı?

Ayrıca, aşağıdaki videoda bu reCaptcha yanıt doğrulama kodunu Magento'nun yöntem yapısına daha fazla hitap eden şey: Bu eğitici ilk satırda $ reCaptcha = $ _POST satırını kullanıyor ?

Son Soru alternatifi: Eğer php kullanırsam yapmak sürümünü kullanırsanız bu reCaptcha yanıt doğrulama php kod snippit bu gibi php üst magento varsayılan şablon yeşil yorum bölümünden sonra girilir

Bazı kod i ön ucunda görünen istemiyorum çünkü varsayılan contactForm zaten kullanıcı her alanın altında diyecek tüm bilgileri girmezse kırmızı uyarı verir, ben sadece bu contactForm çalışmak için reCaptcha almak istiyorum. Ama bir sonraki kullanım için de anlayacağım. Yolunuz geliştirici veya programcı olarak kendiniz mi yaratıldı?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.