Quantcast
Viewing latest article 28
Browse Latest Browse All 212

¿Por qué no me muestra la pasarela de pago de "Mercado Pago" después de crear el PreferenceClient?

Tengo un proyecto en Laravel 11 al cual quiero integrar Mercado Pago, tengo un carrito de compras que tiene un botón "finalizar compra", este botón debe insertar la compra con sus detalles en la base de datos, asimismo, recuperar esos datos para enviarlos a la pasarela de pago de Mercado Pago directamente, sin mostrar el botón. el problema que tengo es que me sale el siguiente error: "Hubo un problema al generar el pago: Error al crear la preferencia de pago: Api error. Check response for details" y no logro darle solución. El carrito está hecho en un archivo "carrito-productos.blade" el cual tiene insertado un componente livewire 3 de nombre "CarritoProductos" en donde está el botón "finalizar compra", este componente llama a un helper donde está la lógica para procesar el finalizado de la compra y que a su vez llama a un service que crea la preferencia para Mercado Pago.

Componente livewireCarritoProductos.php

        public function finalizarCompra(): void{    CarritoFacade::finalizarCompraCarrito();}

Helper CarritoCarrito.php

protected $mercadoPagoService;public function __construct(){    if ($this->getCarrito() === null)        $this->setCarrito($this->empty());    // Instancia directamente la clase de servicio    $this->mercadoPagoService = new MercadoPagoService();}public function finalizarCompraCarrito(){    $carrito = $this->getCarrito();    $comprobantePago = new ComprobantePago();    $comprobantePago->tipo_comprobante_id = 1;    $num = ComprobantePago::where('tipo_comprobante_id', $comprobantePago->tipo_comprobante_id)->count() + 1;    $añoActual = date('Y');    $comprobantePago->numero = $num . $añoActual;    $comprobantePago->forma_pago_id = 1;    $comprobantePago->user_id = Auth::user()->id;    $comprobantePago->observacion = "Compra realizada en tienda";    $comprobantePago->estado = 'Pendiente';    $comprobantePago->save();    $comprobantePagoId = ComprobantePago::latest('id')->first()->id;    foreach ($carrito['productos'] as $item) {        $detalleComprobantePago = new DetalleComprobantePago();        $detalleComprobantePago->comprobante_pago_id = $comprobantePagoId;        $detalleComprobantePago->producto_id = $item['id'];        $detalleComprobantePago->periodo = $item['periodo'];        $detalleComprobantePago->cantidad = $item['cantidad'];        $detalleComprobantePago->precio_unitario = $item['costo'];        $detalleComprobantePago->descuento = $item['descuento'];        $detalleComprobantePago->save();    }    // Recuperar el último comprobante con sus detalles    $latestOrder = ComprobantePago::with('detalleComprobantePago')->latest('id')->first();    $this->getUrlPreference($latestOrder);}public function getUrlPreference($latestOrder){    if (!$latestOrder) {        throw new \Exception("No hay compras registradas.");    }    $preferenceData = $latestOrder->detalleComprobantePago->map(function ($detalle) {        return ['title' => $detalle->producto->nombre,'quantity' => $detalle->cantidad,'unit_price' => $detalle->precio_unitario,'currency_id' => 'PEN'        ];    })->toArray();    // Crear la preferencia de pago mediante el servicio    $mercadoPagoService = new MercadoPagoService();    try {        $urlPago = $mercadoPagoService->createPreference(            $preferenceData,            //auth()->user()->email,            //$latestOrder->id,            //$backUrls        );        // Redirigir al cliente a Mercado Pago        return redirect($urlPago);        //return $urlPago;    } catch (\Exception $e) {        throw new \Exception("Hubo un problema al generar el pago: " . $e->getMessage());    }    $this->clear();}

ServiceMercadoPagoService.php

/** * Create a new class instance. */protected $preferenceClient;public function __construct(){    try {        MercadoPagoConfig::setAccessToken(config('mercadopago.access_token'));    }catch (\Exception $e) {        echo "Error inesperado: " . $e->getMessage();    }}public function createPreference($preferenceData){    try {        $this->preferenceClient = new PreferenceClient();        // Crear la preferencia usando el cliente        $preference = $this->preferenceClient->create(            ['items' => $preferenceData,                //'external_reference' => (string)$compraId,            ]        );         return $preference['sandbox_init_point']; // URL para redirigir al cliente    } catch (\Exception $e) {        throw new \Exception("Error al crear la preferencia de pago: " . $e->getMessage());    }}

Viewing latest article 28
Browse Latest Browse All 212

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>