Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

dpakagarwal's avatar

recaptcha v3 not working on submit in laravel livewire

below are code for recaptcha to work with livewire

index.blade.php

<section class="single-items center-block parallax contact-us-sec" id="contact" style="background: url(assets/front/images/contact-us.png); box-shadow: rgba(0, 0, 0, 0.5) 0px 0px 0px 2000px inset;">
    <div class="container">
        <div class="align-items-baseline mb-5 row">
            <div class="col-12 col-lg-5 contact-box text-center text-md-left contact-box-shadow mr-5">
                @livewire('contact-form')
            </div>
		</div>
	</div>
</section>
contact-form.blade.php
<div>
    <div class="c-box wow fadeInRight">
        <h4 class="small-heading">Let's Get In <strong>Touch</strong></h4>
        @if (Session::has('success'))
            <div class="alert alert-success">{{ Session::get('success') }}</div>
        @endif
        @if (Session::has('failure'))
            <div class="alert alert-danger">{{ Session::get('failure') }}</div>
        @endif
        <form class="contact-form" wire:submit.prevent="submitForm" method="POST">
            @csrf
            <div class="row my-form">
                <div class="col-12">
                    <input type="text" class="form-control" wire:model.defer="userName" placeholder="Name" value="{{ old('userName') }}">
                    @error('userName')
                        <p class="text-danger">{{ $message }}</p>
                    @enderror
                </div>
                <div class="col-12 col-md-6">
                    <input type="email" class="form-control" wire:model.defer="userEmail" placeholder="Email" value="{{ old('userEmail') }}">
                    @error('userEmail')
                        <p class="text-danger">{{ $message }}</p>
                    @enderror
                </div>
                <div class="col-12 col-md-6">
                    <input type="text" class="form-control" wire:model.defer="userMobile" placeholder="Mobile No" value="{{ old('userMobile') }}">
                    @error('userMobile')
                        <p class="text-danger">{{ $message }}</p>
                    @enderror
                </div>
                <div class="col-12">
                    <textarea class="form-control" wire:model.defer="userMessage" placeholder="Message" rows="6">{{ old('userMessage') }}</textarea>
                    @error('userMessage')
                        <p class="text-danger">{{ $message }}</p>
                    @enderror
                </div>
                <div class="col-12">
                    <button type="submit" class="btn rounded-pill user-contact"><i class="fa fa-spinner fa-spin mr-2 d-none" aria-hidden="true"></i>Submit</button>
                </div>
            </div>
        </form>
    </div>
</div>

and i have also included below script in head tag

 <script src="https://www.google.com/recaptcha/api.js"></script>
contactForm.php

public $userName;
    public $userEmail;
    public $userMobile;
    public $userMessage;
    // public $g_recaptcha_response;

    public function submitForm(){
        $this->validate([
            'userName' => 'required',
            'userEmail' => 'required|email',
            'userMobile' => 'required',
            'userMessage' => 'required',
            // 'g_recaptcha_response' => 'required'
        ], [
            'userName.required' => 'Full Name is required',
            'userEmail.required' => "Email Address is required",
            'userEmail.required' => "Email Address should be proper email with '@' ",
            'userMobile.required' => 'Mobile No is required',
            'userMessage.required' => 'Message field is required',
            // 'g_recaptcha_response.required' => 'The google verification is required'
        ]);

        // $recaptcha = $_POST['g_recaptcha_response'];
        // $curl = curl_init();
        // curl_setopt_array($curl, array(
        //     CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
        //     CURLOPT_RETURNTRANSFER => true,
        //     CURLOPT_ENCODING => '',
        //     CURLOPT_MAXREDIRS => 10,
        //     CURLOPT_TIMEOUT => 0,
        //     CURLOPT_FOLLOWLOCATION => true,
        //     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        //     CURLOPT_CUSTOMREQUEST => 'POST',
        //     CURLOPT_POSTFIELDS => array(
        //         'secret' => config('services.recaptcha.secret_key'),
        //         'response' => $recaptcha
        //     )
        // ));

        // $responsejson = curl_exec($curl);
        // curl_close($curl);
        // $response = json_decode($responsejson);

        // if ($response->success && $response->success == 1) {
            $contact = new Contact();
            $contact->name = $this->userName;
            $contact->email = $this->userEmail;
            $contact->phone = $this->userMobile;
            $contact->message = $this->userMessage;
            $contact->save();
            $this->reset();
            if ($contact) {
                $details = [
                    'title' => 'You received a new message from Febber16 Productions site contact form :',
                    'full_name' => $this->userName,
                    'email' => $this->userEmail,
                    'mob_no' => $this->userMobile,
                    'msg' => $this->userMessage
                ];
                try {
                    Mail::to(config('mail.from.address'))->send(new ContactMailResponse($details));
                    return redirect()->back()->with('success', 'Thanks for contacting us. We will get back to you Shortly');
                } catch (\Throwable $th) {
                    Log::error('Error sending email: ' . $th->getMessage());
                    return redirect()->back()->with('failure', 'Something went wrong while submitting query. Please try again in few minutes!');
                }
            } else {
                return redirect()->back()->with('failure', 'Something went wrong, Please try again');
            }
        // } else {
        //     return redirect()->back()->with('failure', 'Google recaptcha verification failed. Please try again in few minutes!');
        // }

can anyone explain what is going wrong as it gives me error as

POST method is not supported for route '/' , supported methods are GET, HEAD.
0 likes
0 replies

Please or to participate in this conversation.