2017-01-19 5 views
-1

以下のコードでは、captchaが来ており、私たちがロボットではないことを証明した後、何も起こりませんでした。公開鍵と秘密鍵の両方を追加しました。Googleのcaptchaはシルバーストライプコードでは働いていません

また、隠しフィールドを追加すると、エラーが発生すると、キャプチャツールがヘッダーの上に表示されます。

<html> 
<head> 
<script src='https://www.g**le.com/recaptcha/api.js'></script> 
</head> 
<body> 
<?php 

class ContactPage extends Page 
{ 
    private static $db = array(
     'TelCustomerSupport' => 'Varchar', 
     'TelProjectSupport'  => 'Varchar', 
     'OfficeName'   => 'Text', 
     'OfficeStreetAddress' => 'Text', 
     'OfficeAddressLocality' => 'Text', 
     'OfficePostalCode'  => 'Varchar', 
     'OfficeMapLink'   => 'Text', 
     'OfficeLatitude'  => 'Text', 
     'OfficeLongitude'  => 'Text', 
    ); 

    public function getCMSFields() 
    { 
     $fields = parent::getCMSFields(); 
     // Add extra fields 
     $fields->addFieldToTab("Root.Main", new TextField('TelCustomerSupport', 'Phone - Customer, Trade & Retail Support'), "Content"); 
     $fields->addFieldToTab("Root.Main", new TextField('TelProjectSupport', 'Phone - Project Support'), "Content"); 

     $fields->addFieldToTab("Root.Main", new TextField('OfficeName'), "Content"); 
     $fields->addFieldToTab("Root.Main", new TextField('OfficeStreetAddress'), "Content"); 
     $fields->addFieldToTab("Root.Main", new TextField('OfficeAddressLocality'), "Content"); 
     $fields->addFieldToTab("Root.Main", new TextField('OfficePostalCode'), "Content"); 
     $fields->addFieldToTab("Root.Main", new TextField('OfficeMapLink'), "Content"); 
     $fields->addFieldToTab("Root.Main", new TextField('OfficeLatitude'), "Content"); 
     $fields->addFieldToTab("Root.Main", new TextField('OfficeLongitude'), "Content"); 

     return $fields; 
    } 

} 





class ContactPage_Controller extends NetSuitePage_Controller 
{ 
    private static $allowed_actions = array('ContactForm'); 

    // Generate the form 
    public function ContactForm() 
    { 
     // Create fields 
     $fields = new FieldList(
      TextField::create("FirstName")->setTitle(_t('Contact.FIRSTNAME')), 
      TextField::create("LastName")->setTitle(_t('Contact.LASTNAME')), 
      EmailField::create("Email")->setTitle(_t('Contact.EMAILADDRESS')), 
      TextField::create("Phone")->setTitle(_t('Contact.PHONENUMBER')), 
      DropdownField::create('Iam', _t('Contact.IAMA'), $this->translateNetsuiteConfigArray('Contact', 'Iam')), 
      TextField::create("SendSubject")->setTitle(_t('Contact.SUBJECT')), 
      HoneyPotField::create("Subject2")->setTitle('Subject2'), 
      TextareaField::create("Message")->setTitle(_t('Contact.MESSAGE'))->setColumns(30)->setRows(10) 
     ); 




     // Create actions 
     $submitbutton = new FormAction('doContactForm', _t('Contact.SEND')); 
     $submitbutton->addExtraClass('btn btn-black'); 
     $actions = new FieldList(
      $submitbutton 
     ); 



     $validator = ZenValidator::create(); 
     $validator->addRequiredFields(array('FirstName', 'LastName', 'Email', 'Phone', 'Iam', 'SendSubject', 'Message')); 
     $validator->setConstraint('FirstName', Constraint_length::create('max', 32)); 
     $validator->setConstraint('LastName', Constraint_length::create('max', 32)); 
     $validator->setConstraint('Phone', Constraint_length::create('min', 7)); 
     $validator->setConstraint('Email', Constraint_type::create('email')); 
     $validator->setConstraint('Phone', Constraint_type::create('digits')); 
print"<div class=\"g-recaptcha\" data-sitekey=\"6LdCAxEUAAAAAHSWL1xulOjZLv-6PPHTSQJdjpEu\"></div>" 
     $form = new Form($this, 'ContactForm', $fields, $actions, $validator); 
     $form->addExtraClass('contact-form'); 
     $form->setFormMethod('POST', true); 

     return $form; 
    } 
    // Deal with form submission 
    public function doContactForm($data, $form) 
    { 

     $submission = new ContactFormSubmission(); 
     $form->saveInto($submission); 
     $submission->write(); 

     $data['path'] = print_r($this->refererTracker->retrieveAll(), true); 

     $email = new Email(); 
     $email->setTemplate('ContactFormEmail'); 
     $email->populateTemplate($data); 
     $email->setTo($this->getNetsuiteConfig('Contact', 'Emails')); 
     $email->setFrom("[email protected]"); 
     $email->setSubject('[warmup.co.uk] New contact from the website'); 
     $email->populateTemplate($data); 
     $email->send(); 

     $post = $this->getNetsuiteConfig('Contact'); 

     $post->firstname     = $data['FirstName']; 
     $post->lastname      = $data['LastName']; 
     $post->email      = $data['Email']; 
     $post->phone      = $data['Phone']; 
     $post->custentity116    = $data['Iam']; 
     $post->custentitysubject_contact_us = $data['SendSubject']; 
     $post->custentitymessage_contact_us = $data['Message']; 

    if(isset($_POST['g-recaptcha-response'])&& $_POST['g-recaptcha-response']){ 
     var_dump($_POST); 
     $secret = " 6LdCAxEUAAAAAIss47kbDqOWVaf3H2ruMkgddKTa"; 
     $ip = $_SERVER['REMOTE_ADDR']; 
     $captcha = $_POST['g-recaptcha-response']; 
     $rsp = file_get_contents("https://www.***.com/recaptcha/api/siteverify?secret=$secret&response=$captcha&remoteip$ip"); 
     var_dump($rsp); 
     $arr = json_decode($rsp,TRUE); 
     if($arr['success']) 
{ 


     // Check for success 
     if ($this->queueNetSuitePost($post)) { 
      return $this->redirect(Director::get_current_page()->Link()."?success=1"); 
     } 
} 

else{ 
     // Redirect back with form data and error message 
     Session::set('FormInfo.' . $form->FormName() . '.data', $data); 
     Session::set('FormInfo.'.$form->FormName().'.errors', array()); 
     $form->sessionMessage("Netsuite error", 'bad'); 

     return $this->redirectBack(); 
} 
    } 



} 

// Returns true if form submitted successfully 
    public function Success() 
    { 
     return isset($_REQUEST['success']) && $_REQUEST['success'] == "1"; 
    } 

    public function getCurrentSubsite() 
    { 
     $subsite = Subsite::currentSubsite(); 

     if($subsite) { 
      return $subsite->Title; 
     } 
     return $subsite; 
    } 

} 
+3

文字通り、そのコードをテンプレートに入れましたか? –

+0

GoogleのNoCaptchaをSilverStripeフォームに追加する方法については、次の回答をご覧ください。 http://stackoverflow.com/questions/41536338/add-google-recaptcha-on-a-silverstripe-form#answer-41684039 – 3dgoo

答えて

2

「印刷」または「エコー」はすぐにレンダリングされます。残りのコード/テンプレートは後でレンダリングされません。 htmlを挿入する場合は、フォームにLiteralFieldを追加する方がよいでしょう。

さらに便利なのは、使いやすいフォームフィールドで再呼び出しを提供するモジュールを使用することです。 https://github.com/Level51/silverstripe-recaptcha

+0

ありがとうございます。しかし、私はルート内のフォルダ全体をアップロードするか、またはcoechを作成するためにcoeをコピーする必要があります。 –

+0

yntaxエラー、予期しない '$ captcha'(T_VARIABLE)が来ています –

+0

Sirまだ動作していません私はabvエラーRecaptchaファイルをインクルードしても、まだ私がcaptchaを選択したかどうかは依頼してください。 –

関連する問題