getPaymentAmountForBooking($booking); return $payment > 0; } // $payment es la cantidad a pagar que puede venir desde el widget fijada por un custom layout // si no viene es porque hay que aplicar las reglas de pago normales public function gatewayPaymentDetails($service, $booking, $payment = null) { $restaurant = $booking->restaurant; // Calculo la cantidad a pagar segun las reglas $payment_calculated = $service->getPaymentAmountForBooking($booking); // Si no hay que pagar por las reglas entonces no hay que pagar el custom layout?? // no es cierto porque puede que no haya que pagar por dos comensales segun las reglas pero sin embargo si haya que pagar por la mesa // Por eso compruebo tambien que la mesa tiene una cantidad asignada que viene en payment if (($payment == null || $payment == 0) && $payment_calculated <= 0) { return false; } // Aplicar reglas de pago, precio por asiento, etc. if ($payment == null || $payment == 0) { $payment = $payment_calculated; } // Desde la vista booking view cojo el que ya esta calculado if ($booking->status == \Alexr\Enums\BookingStatus::PENDING_PAYMENT) { $payment = 0.01 * intval($booking->amount); //ray('STATUS => ' . $payment); } //ray('PAYMENT: ' . $payment); if ($payment > 0) { // Token needed for return url for gateways $token = \Evavel\Support\Str::upper(\Evavel\Support\Str::random(12)); $booking->gateway_token = $token; $booking->save(); $payment_gateways = []; // Stripe $stripe_args = $this->getStripePaymentArgs($booking); if ($stripe_args) { $payment_gateways['stripe'] = $stripe_args; } // Redsys $redsys_args = $this->getRedsysPaymentArgs($booking, $payment); if ($redsys_args) { $payment_gateways['redsys'] = $redsys_args; } // Paypal $paypal_args = $this->getPaypalPaymentArgs($booking); if ($paypal_args) { $payment_gateways['paypal'] = $paypal_args; } // MercadoPago $mercadopago_args = $this->getMercadopagoPaymentArgs($booking); if ($mercadopago_args) { $payment_gateways['mercadopago'] = $mercadopago_args; } // Mollie $mollie_args = $this->getMolliePaymentArgs($booking); if ($mollie_args) { $payment_gateways['mollie'] = $mollie_args; } // Square $square_args = $this->getSquarePaymentArgs($booking); if ($square_args) { $payment_gateways['square'] = $square_args; } // Xendit $xendit_args = $this->getXenditPaymentArgs($booking); if ($xendit_args) { $payment_gateways['xendit'] = $xendit_args; } // Save amount required inside the booking if ($payment > 0) { $booking->amount = intval(100 * $payment); $booking->save(); } return [ 'payment_gateways' => $payment_gateways, 'required' => $payment > 0, // Define is the gateway has the option to capture cards 'is_capture_card' => $service->isPaymentToCapture(), 'amount' => $payment, 'currency' => strtolower($restaurant->currency), 'currency_symbol' => \Alexr\Enums\CurrencyType::symbolFor($restaurant->currency), 'message' => $service->getPaymentMessage(), 'return_url' => add_query_arg(['payment' => 'confirm'],evavel_view_booking_url($booking->uuid)), ]; } return false; } public function webhook() { // @TODO para mercadopago die(); } }