0

Quiero enviar un pedido a través de WhatsApp; estoy usando laravel y livewire. Tengo un componente y una vista del mismo componente, ambos en livewire.

Este es mi componente de livewire:

<?php
    
    namespace App\Http\Livewire;
    
    use Livewire\Component;
    use Cart;
    
    class CheckoutComponent extends Component
    {
        public $name;
        public $phone;
        public $cartItems;
        public $cartTotal;
    
        public function render()
        {
            // Assign the products to $this->cartItems
            $this->cartItems = Cart::instance('cart')->content();
            // Assign the cart total to $this->cartTotal
            $this->cartTotal = Cart::instance('cart')->subtotal();
    
            return view('livewire.checkout-component');
        }
    
        public function sendOrderByWhatsApp()
        {
            // Lógica para construir el mensaje de WhatsApp
            $mensajeWhatsApp = "Hola, mi nombre es {$this->name} y quiero realizar una compra con los siguientes productos:";
    
            foreach ($this->cartItems as $item) {
                // Accede a las claves del array de manera segura
                $productName = $item['name'] ?? '';
                $quantity = $item['qty'] ?? '';
                $price = $item['price'] ?? '';
                $subtotal = $item['subtotal'] ?? '';
                $image = isset($item['model']['image']) ? asset('assets/imgs/products') . '/' . $item['model']['image'] : '';
    
                // Agrega la información al mensaje de WhatsApp
                $mensajeWhatsApp .= "\n{$productName} - Cantidad: {$quantity} - Precio unitario: {$price} - Precio total: {$subtotal} - Imagen: {$image}";
            }
    
            // Agrega el total del carrito al mensaje
            $mensajeWhatsApp .= "\nTotal: {$this->cartTotal}";
    
            // Número de teléfono para el enlace de WhatsApp (reemplaza con tu número real)
            $phoneNumber = '4471157701';
    
            // Enlace de WhatsApp con el número de teléfono y mensaje
            $whatsAppLink = "https://wa.me/{$phoneNumber}?text=" . urlencode($mensajeWhatsApp);
        
            // Muestra un mensaje de éxito a través de Livewire
            session()->flash('success_message', 'Tu pedido ha sido enviado con éxito!');
        
            // Emite un evento de Livewire para abrir el enlace de WhatsApp
            $this->dispatchBrowserEvent('openWhatsApp', [
                'whatsAppLink' => $whatsAppLink,
            ]);
    
            // Limpia el formulario
            $this->name = '';
            $this->phone = '';
    
    
            // Clear the cart (if needed)
            Cart::instance('cart')->destroy();
        }
    }

y esta es mi vista de livewire:

<div>
    <main class="main">
        <div class="page-header breadcrumb-wrap">
            <div class="container">
                <div class="breadcrumb">
                    <a href="/" rel="nofollow" style="color: rgb(255, 255, 255);">Inicio</a>
                    <span style="color: rgb(255, 255, 255);">Tu carrito</span>
                    <span style="color: rgb(255, 255, 255);">Tu compra</span>
                </div>
            </div>
        </div>
        <section class="mt-50 mb-50">
            <div class="container">
                <div class="row">
                    <div class="col-md-6">
                        <div class="mb-25">
                            <h4>Datos del Comprador:</h4>
                            <form wire:submit.prevent="procesarCompra">
                                <div class="form-group">
                                    <input wire:model="name" type="text" required="" name="fname"
                                        placeholder="Nombre Completo">
                                </div>
                                <div class="form-group">
                                    <input wire:model="phone" required="" type="text" name="phone"
                                        placeholder="Número de celular">
                                </div>
                            </form>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="order_review">
                            <div class="mb-20">
                                <h4>Tu Orden</h4>
                            </div>
                            <div class="table-responsive order_table text-center">
                                <table class="table">
                                    <thead>
                                        <tr>
                                            <th colspan="2">Imagen</th>
                                            <th colspan="2">Producto</th>
                                            <th colspan="2">Código</th>
                                            <th colspan="6">Total</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        @if($cartItems)
                                        @foreach ($cartItems as $item)
                                        <tr>
                                            <!-- Mostrar la información del carrito -->
                                            <td colspan="2" class="image product-thumbnail"><img
                                                    src="{{ asset('assets/imgs/products')}}/{{$item->model->image}}"
                                                    alt=""></td>
                                            <td colspan="2">
                                                <h5><a href="#">{{$item->model->name}}</a></h5>
                                                <span class="product-qty">{{$item->qty}}</span>
                                            </td>
                                            <td colspan="2" class="SKU">{{$item->model->SKU}}</td>
                                            <td colspan="6">${{$item->subtotal}}</td>
                                        </tr>
                                        @endforeach
                                        <tr>
                                            <th colspan="2" scope="row">Total</th>
                                            <td colspan="6" class="product-subtotal">${{ Cart::subtotal() }}</td>
                                        </tr>
                                        @else
                                        <tr>
                                            <td colspan="9">No hay productos en el carrito.</td>
                                        </tr>
                                        @endif
                                    </tbody>

                                </table>
                            </div>

                            <a href="#" wire:click.prevent="sendOrderByWhatsApp" class="btn whatsapp-btn">
                                <i class="fi-rs-box-alt mr-10"></i>Realizar Pedido vía WhatsApp
                            </a>
                            @section('scripts')
                            @parent
                            <script>
                                document.addEventListener('livewire:load', function () {
            Livewire.on('openWhatsApp', (parameters) => {
                var whatsAppLink = parameters.whatsAppLink;

                // Abre el enlace de WhatsApp en una nueva ventana
                window.open(whatsAppLink, '_blank');

                // Muestra un mensaje de éxito al usuario (puedes personalizar esto)
                alert('Tu pedido ha sido enviado con éxito!');
            });
        }); 
                            </script>
                            @endsection
                        </div>
                    </div>
                </div>
            </div>
        </section>
    </main>
</div>

Necesito que envíe el pedido a través de WhatsApp con los datos que tiene la vista. No envía nada y no muestra el mensaje de que el pedido se envió.

0

Examina otras preguntas con la etiqueta o formula tu propia pregunta.