Утвердить резюме ajax и codeigniter - PullRequest
0 голосов
/ 22 января 2019

Я использую Codeigniter и Ajax для проверки и отправки формы электронной почты.Я перепробовал много методов, он продолжает давать мне результат {"sent": false}, он прекрасно работал до того, как я добавил строки recaptcha.

вот мой код:

custom.script.js

$("#ajax-contact-form").submit(function() {
    var href = 'http://localhost:8888/en/send';
    var name = $("#form-name").val();
    var email = $("#email").val();
    var phone = $("#phone").val();
    var title = $("#form-title").val();
    var message = $("#form-message").val();
    $.ajax({
        type: "POST",
        url: href ,
        dataType: "json",
        data: {
            name: name,
            email: email,
            phone: phone,
            title: title,
            message: message,
            //UPDATE from recaptcha without quotes to 'g-recaptcha-response'
            'g-recaptcha-response': grecaptcha.getResponse()
          },

        success: function(msg) {
            if(msg.sent) {
                console.log("Successssssssssss");
                $('#result').addClass('success'); 
                $('#result').html('Email was sent successfully!');
            } else {
                $('#result').addClass('error'); 
                $('#result').html('Email was NOT sent!'); 
            }
        }
    });
    return false;
});

En.php

function send()
{
    $this->load->helper('form');
    $this->load->library('form_validation');

    $google_url="https://www.google.com/recaptcha/api/siteverify";
    //UPDATE from recaptcha to 'g-recaptcha-response'
    $str = $this->input->post('g-recaptcha-response');
    $secret = 'GOOGLE_SECRET_KEY';
    $url=$google_url."?secret=".$secret."&response=".$str;
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch);      
    $status= json_decode($output, true);


    if ($status['success']) {


    $this->load->library('email');

    $config['mailtype'] = 'html';
    $config['charset'] = 'utf-8';
    $config['wordwrap'] = TRUE;

    $this->email->initialize($config);

    $body    = 'ANY TEXT';
    $emailto = "email@domain.com";

    $this->email->from($this->input->post("email"), $this->input->post("name"));
    $this->email->to($emailto);
    $this->email->subject('New Request');
    $this->email->message($body);

    if($this->email->send()){
    echo json_encode(array("sent"=>TRUE));
    }

}
else{
    echo json_encode(array("sent"=>FALSE));
}}

Ключи Google верны, я не знаю, почему не получаетсяк истинному утверждению if.

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Наконец-то сработало это окончательный код:

function send()
{
    $this->load->helper('form');
    $this->load->library('form_validation');


$google_url="https://www.google.com/recaptcha/api/siteverify";
$str = $this->input->post('g-recaptcha-response');



$secret = 'GOOGLE SECRET KEY';
$url=$google_url."?secret=".$secret."&response=".$str;


$response = json_decode(file_get_contents($url), true);
if ($response["success"] != false) {




    $this->load->library('email');

    $config['mailtype'] = 'html';
    $config['charset'] = 'utf-8';
    $config['wordwrap'] = TRUE;

    $this->email->initialize($config);

    $body    = 'ANY TEXT';

    $emailto = "email@domain.com";

    $this->email->from($this->input->post("email"), $this->input->post("name"));
    $this->email->to($emailto);

    $this->email->subject('New Request');
    $this->email->message($body);

    if($this->email->send()){
    echo json_encode(array("sent"=>TRUE));
    }
}
    else{
    echo json_encode(array("sent"=>FALSE));
     }
    }
0 голосов
/ 23 января 2019

Если вы используете 'g-recaptcha-response' и $ status ['success'] возвращает null в вашей заданной реализации, может быть лучше использовать метод запроса cURL, как показано ниже:

$google_url = "https://www.google.com/recaptcha/api/siteverify";
$secret_key = 'YOUR_SECRET_KEY';

$response = $_POST['g-recaptcha-response']; 

$message  = 'Google reCaptcha Test';

if(!empty($response))
{
    $url = $google_url."?secret=".$secret_key."&response=".$response;

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_TIMEOUT, 15);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, TRUE); 
    $curlData = curl_exec($curl);

    curl_close($curl);

    $res = json_decode($curlData, TRUE);
    if($res['success'] == 'true') 
        $message = "Success!";
    else
        $message = "Enter captcha again!";
}
0 голосов
/ 22 января 2019

Здравствуйте, давайте обсудим это.Похоже, что возвращаемые данные $ status ['success'] необходимо сравнить с необходимыми значениями с помощью оператора "==".Вы можете проверить это следующим образом.

if ($status['success'] == true) {


$this->load->library('email');

$config['mailtype'] = 'html';
$config['charset'] = 'utf-8';
$config['wordwrap'] = TRUE;

$this->email->initialize($config);

$body    = 'ANY TEXT';
$emailto = "email@domain.com";

$this->email->from($this->input->post("email"), $this->input->post("name"));
$this->email->to($emailto);
$this->email->subject('New Request');
$this->email->message($body);

if($this->email->send()){
echo json_encode(array("sent"=>TRUE));
}

}

Также, пожалуйста, различайте значения, прежде чем ставить их в условие (если оператор else).

...