[提交表单时codeigniter php中的Google Recaptcha错误

问题描述 投票:0回答:1

我已经在codeigniter中创建了一个表单并提供了Google验证码v2,我已经创建了站点密钥和秘密密钥,将其添加到配置文件中,还添加了js和recaptcha div(包括我的站点密钥)。以下是我在控制器中的验证码功能:

public function validate_captcha() {
          $recaptcha = trim($this->input->post('g-recaptcha-response'));
          $userIp= $this->input->ip_address();
          $secret='xxxxxxxxxxxx'; (i have given my scret key here)
          $secretdata = array(
              'secret' => "$secret",
              'response' => "$recaptcha",
              'remoteip' =>"$userIp"
          );

          $verify = curl_init();
          curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
          curl_setopt($verify, CURLOPT_POST, true);
          curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($secretdata));
          curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($verify, CURLOPT_RETURNTRANSFER, true);
          $response = curl_exec($verify);
          $status= json_decode($response, true);
          if(empty($status['success'])){
              return FALSE;
          }else{
              return TRUE;
          }
      }

以下是我在同一控制器中的注册表功能:

public function ajaxRegAction() {
			$this->load->library('session');
		header('Access-Control-Allow-Origin: *');
		header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
		header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
		$this->load->library('form_validation');
		$utype='W';
    $dhamu = $this->validate_captcha();
		$createddate  = date('Y-m-d h:i:s');
		$createdby = '0';
		$mobile = $this->input->post('phone');
		$form_data = array(
				'type' => $utype,
				'unique_id' => $this->mainModel->generateIndividualID(),
				'phone_num' => $mobile,
				'email' => $this->input->post('email'),
				'first_name' => $this->input->post('firstname'),
				'last_name' => $this->input->post('lastname'),
				'created_by' => $createdby,
				'created_date' => $createddate,
		);
		$name = $this->input->post('firstname')." ".$this->input->post('lastname');
		$access_info = array('user_type'=>$utype);

			$check = $this->mainModel->checkUserAvail($this->input->post('phone'),$this->input->post('email'));
			$checkauser = $this->mainModel->checkAjaxUser($this->input->post('phone'),$this->input->post('email'));
			if($check==0) {

        if($dhamu==1){

				$insert = $this->mainModel->ajaxRegInsertUser($form_data, $access_info,$this->input->post('password'));

				$message="Dear ".$this->input->post('firstname').", You have successfully registered with Book The Party. Thank You for coming On-Board. Contact us at 9666888000 for any queries - Team BTP";
				$email_message=$message;
				$message=rawurlencode($message);
				$this->mainModel->sendOtptoCustomer($mobile,$message);
				$this->mainModel->sendmailtoCustomer($this->input->post('email'),$email_message);

echo "success";
}

else{ echo "Captcha Error";}



}

else{
echo "Registration Failed !";

			}

即使我选中了Google Recaptcha框并按了Register,该窗体也会显示“ Captcha错误”,值也不会添加到数据库中。谁能告诉我这里可能出什么问题了,谢谢

php forms codeigniter controller recaptcha
1个回答
0
投票

步骤1:确保您已在Google Captcha V2仪表板的域中添加localhost

步骤2:

我正在修改您的功能,您可以像这样使用它:

public function validate_captcha() 
{
    if(isset($_POST['g-recaptcha-response']))
    {
        $captcha=$_POST['g-recaptcha-response'];
    }

    $secretKey = "Put your secret key here";
    $ip = $_SERVER['REMOTE_ADDR'];
    // post request to server
    $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secretKey) .  '&response=' . urlencode($captcha);
    $response = file_get_contents($url);
    $responseKeys = json_decode($response,true);
    // should return JSON with success as true
    if($responseKeys["success"]) {
        return TRUE;
    } else {
        return FALSE;
    }
}

代替CURL

让我知道这是否可行

© www.soinside.com 2019 - 2024. All rights reserved.