2017-01-19 5 views
-1

아래 코드에서 captcha가오고 있음을 입증 한 후에 우리는 로봇이 아니며 아무것도 발생하지 않았습니다. 공개 키와 비공개 키를 모두 추가했습니다.실버 스트라이프 코드에서 작동하는 Google captcha

또한 숨겨진 필드를 추가하면 오류가 발생하여 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

SilverStripe 양식에 Google의 NoCaptcha를 추가하는 방법에 대한 다음 답변을 살펴보십시오. http://stackoverflow.com/questions/41536338/add-google-recaptcha-on-a-silverstripe-form#answer-41684039 – 3dgoo

답변

2

"인쇄"또는 "에코"가 즉시 렌더링됩니다. 나머지 코드/템플릿은 나중에 렌더링되지 않습니다. html을 삽입하려면 양식에 LiteralField를 추가하는 것이 좋습니다.

사용하기 쉬운 양식 입력란에 recaptcha를 제공하는 모듈을 사용하는 것이 더 좋습니다. https://github.com/Level51/silverstripe-recaptcha

+0

너무 많이 선생님. ..하지만 루트에있는 전체 폴더를 업로드하거나 그냥 captcha를 만드는 coe를 복사해야합니다 suffch –

+0

yntax 오류, 예기치 않은 '$ captcha'(T_VARIABLE)오고있다 –

+0

선생님 아직도 선생님이 오류를 제거했습니다 Recaptcha 파일을 포함 시키지만 여전히 내가 captcha를 선택했는지 또는 제출하지 않았는지 여부 –