Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 3.14.245.172
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/wavevlvu/book24.ng/modules/Booking/Gateways/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/wavevlvu/book24.ng/modules/Booking/Gateways/StripeCheckoutGateway.php
<?php


namespace Modules\Booking\Gateways;


use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Mockery\Exception;
use Modules\Booking\Gateways\BaseGateway;
use Modules\Booking\Models\Booking;
use Modules\Booking\Models\Payment;

class StripeCheckoutGateway extends BaseGateway
{
    protected $id = 'stripe_checkout';

    public $name = 'Stripe Checkout V2';

    protected $gateway;

    public function getOptionsConfigs()
    {
        return [
            [
                'type'  => 'checkbox',
                'id'    => 'enable',
                'label' => __('Enable Stripe Checkout V2?')
            ],
            [
                'type'  => 'input',
                'id'    => 'name',
                'label' => __('Custom Name'),
                'std'   => __("Stripe"),
                'multi_lang' => "1"
            ],
            [
                'type'  => 'upload',
                'id'    => 'logo_id',
                'label' => __('Custom Logo'),
            ],
            [
                'type'  => 'editor',
                'id'    => 'html',
                'label' => __('Custom HTML Description'),
                'multi_lang' => "1"
            ],
            [
                'type'       => 'input',
                'id'        => 'stripe_secret_key',
                'label'     => __('Secret Key'),
            ],
            [
                'type'       => 'input',
                'id'        => 'stripe_publishable_key',
                'label'     => __('Publishable Key'),
            ],
            [
                'type'       => 'checkbox',
                'id'        => 'stripe_enable_sandbox',
                'label'     => __('Enable Sandbox Mode'),
            ],
            [
                'type'       => 'input',
                'id'        => 'stripe_test_secret_key',
                'label'     => __('Test Secret Key'),
            ],
            [
                'type'       => 'input',
                'id'        => 'stripe_test_publishable_key',
                'label'     => __('Test Publishable Key'),
            ],
            [
                'type'       => 'input',
                'id'        => 'endpoint_secret',
                'label'     => __('Webhook Secret'),
                'desc'     => __('Webhook url: <code>:code</code>',['code'=>$this->getWebhookUrl()]),
            ]
        ];
    }


    public function process(Request $request, $booking, $service)
    {
        $this->setupStripe();

        if (in_array($booking->status, [
            $booking::PAID,
            $booking::COMPLETED,
            $booking::CANCELLED
        ])) {

            throw new Exception(__("Booking status does need to be paid"));
        }
        if (!$booking->pay_now) {
            throw new Exception(__("Booking total is zero. Can not process payment gateway!"));
        }
        $payment = new Payment();
        $payment->booking_id = $booking->id;
        $payment->payment_gateway = $this->id;
        $payment->status = 'draft';
        $payment->amount = (float) $booking->pay_now;

        $stripe_customer_id =  $this->tryCreateUser($booking);
        $session_data = [
            'mode' => 'payment',
            'customer' => $stripe_customer_id,
            'success_url' => $this->getReturnUrl() . '?c=' . $booking->code.'&session_id={CHECKOUT_SESSION_ID}',
            'cancel_url' => $this->getCancelUrl() . '?c=' . $booking->code,
            'line_items'=>[
                [
                    'price_data'=>[
                        'currency'=>setting_item('currency_main'),
                        'product_data'=>[
                            'name'=>$booking->service->title ?? '',
                            'images'=>[get_file_url($booking->service->image_id ?? '')]
                        ],
                        'unit_amount'=>(float) $booking->pay_now * 100
                    ],
                    'quantity'=>1
                ]
            ]
        ];
        if(empty($session_data['customer'])){
            unset($session_data['customer']);
        }
        $session = \Stripe\Checkout\Session::create($session_data);
        $payment->addMeta('stripe_session_id',$session->id);

        $booking->status = $booking::UNPAID;
        $booking->payment_id = $payment->id;
        $booking->save();

        $booking->addMeta('stripe_session_id',$session->id);


        return response()->json(['url'=>$session->url ?? $booking->getDetailUrl()])->send();
    }

    public function tryCreateUser(Booking $booking){

        $user = auth()->user();
        if($user and $user->stripe_customer_id){
            return $user->stripe_customer_id;
        }

        try {
            $customer = \Stripe\Customer::create([
                'address'=>$booking->address,
                'email'=>$booking->email,
                'phone'=>$booking->phone,
                'name'=>$booking->first_name.' '.$booking->last_name,
            ]);
        }catch (\Exception $e){

        }

        if(!empty($customer->id)){
            if($user) {
                $user->stripe_customer_id = $customer->id;
                $user->save();
            }
            return $customer->id;
        }
        return null;


    }

    public function cancelPayment(Request $request)
    {
        $c = $request->query('c');
        $booking = Booking::where('code', $c)->first();
        if (!empty($booking) and in_array($booking->status, [$booking::UNPAID])) {
            $payment = $booking->payment;
            if ($payment) {
                $payment->status = 'cancel';
                $payment->logs = \GuzzleHttp\json_encode([
                    'customer_cancel' => 1
                ]);
                $payment->save();
            }

            // Refund without check status
            $booking->tryRefundToWallet(false);

            return redirect($booking->getDetailUrl())->with("error", __("You cancelled the payment"));
        }
        if (!empty($booking)) {
            return redirect($booking->getDetailUrl());
        } else {
            return redirect(url('/'));
        }
    }

    public function setupStripe(){
        \Stripe\Stripe::setApiKey($this->getSecretKey());
    }

    public function getPublicKey(){
        if($this->getOption('stripe_enable_sandbox'))
        {
            return $this->getOption('stripe_test_publishable_key');
        }
        return $this->getOption('stripe_public_key');
    }

    public function getSecretKey(){
        if($this->getOption('stripe_enable_sandbox'))
        {
            return $this->getOption('stripe_test_secret_key');
        }
        return $this->getOption('stripe_secret_key');
    }

    public function confirmPayment(Request $request)
    {
        $c = $request->query('c');
        $booking = Booking::where('code', $c)->first();
        $this->setupStripe();
        $session_id = $request->query('session_id');

        $session = \Stripe\Checkout\Session::retrieve($session_id);
        if(empty($session)){
            return redirect($booking->getDetailUrl(false));
        }

        if (!empty($booking) and in_array($booking->status, [$booking::UNPAID])) {

            $session_id = $request->query('session_id');
            if(empty($session_id)){
                return redirect($booking->getDetailUrl(false));
            }

            $session = \Stripe\Checkout\Session::retrieve($session_id);
            if(empty($session)){
                return redirect($booking->getDetailUrl(false));
            }

            if($session->payment_status == 'paid'){
                $booking->paid += (float)$booking->pay_now;
                $booking->markAsPaid();
                $booking->addMeta('session_data',$session);
                $booking->addMeta('stripe_setup_intent',$session->setup_intent);
                $booking->addMeta('stripe_cs_complete',1);
            }
            if($session->payment_status == 'no_payment_required'){
                $booking->pay_now = 0;
                $booking->save();
                $booking->addMeta('session_data',$session);
                $booking->addMeta('stripe_setup_intent',$session->setup_intent);
                $booking->addMeta('stripe_cs_complete',1);

            }

            return redirect($booking->getDetailUrl(false));

        }
        if (!empty($booking)) {
            return redirect($booking->getDetailUrl(false));
        } else {
            return redirect(url('/'));
        }
    }

    public function callbackPayment(Request $request){
        return $this->callback($request);
    }
    public function callback(Request $request)
    {
        $this->setupStripe();
        $endpoint_secret = $this->getOption('endpoint_secret');
        $payload = @file_get_contents('php://input');
        $event = NULL;

        if ($endpoint_secret and !empty($sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'])) {
            try {
                $event = \Stripe\Webhook::constructEvent(
                    $payload, $sig_header, $endpoint_secret
                );
            } catch (\Stripe\Exception\SignatureVerificationException $e) {
                return response()->json(['message' => __('Webhook error while validating signature.')], 400);
            }
        }

        switch ($event->type) {
            case 'payment_intent.succeeded':
                $paymentIntent = $event->data->object; // contains a \Stripe\PaymentIntent
                $payment = Payment::whereHas('meta', function ($query) use($paymentIntent){
                    $query->where('stripe_intent_id',$paymentIntent->id);
                })->first();
                if (!$payment) {
                    return response()->json(['message' => __('Payment not found')], 400);
                }
                $booking = $payment->booking;
                if ($booking) {
                    $booking->paid += (float)$paymentIntent->amount / 100;
                    $booking->markAsPaid();

                }
                if (!empty($paymentIntent->charges->data)) {
                    $chargeArr= [];
                    foreach ($paymentIntent->charges->data as $charge) {
                        if ($charge['paid'] == true) {
                            $chargeArr[]=  $charge['id'];
                        }
                    }
                    if(!empty($chargeArr)){
                        $payment->addMeta('stripe_charge_id',$chargeArr);
                    }
                }
                $payment->status = 'completed';
                $payment->logs = \GuzzleHttp\json_encode($paymentIntent);
                $payment->save();
                break;
            default:
                return response()->json(['message' => __('Received unknown event type')], 400);
        }
    }

    public function processNormal($payment)
    {
        $this->setupStripe();
        $session = \Stripe\Checkout\Session::create([
            'mode'        => 'payment',
            'success_url' => $this->getReturnUrl(true).'?pid='.$payment->code.'&session_id={CHECKOUT_SESSION_ID}',
            'cancel_url'  => $this->getCancelUrl(true).'?pid='.$payment->code,
            'line_items'  => [
                [
                    'price_data' => [
                        'currency'    => setting_item('currency_main'),
                        'unit_amount' => (float) $payment->amount * 100
                    ],
                    'quantity'   => 1
                ],
            ]
        ]);
        $payment->addMeta('stripe_session_id',$session->id);
        if (!empty($session->url)) {
            return [true, false, $session->url];
        }
        return [true];
    }
    public function confirmNormalPayment()
    {
        /**
         * @var Payment $payment
         */
        $request = \request();
        $c = $request->query('pid');
        $payment = Payment::where('code', $c)->first();


        if (!empty($payment) and in_array($payment->status, ['draft'])) {
            $this->setupStripe();
            $session_id = $request->query('session_id');
            if (empty($session_id)) {
                return [false];
            }
            $session = \Stripe\Checkout\Session::retrieve($session_id);
            if (empty($session)) {
                return [false];
            }
            if ($session->payment_status == 'paid') {
                return $payment->markAsCompleted($session);
            } else {
                return $payment->markAsFailed($session);
            }
        }
        if ($payment) {
            if ($payment->status == 'cancel') {
                return [false, __("Your payment has been canceled")];
            }
        }
        return [false];
    }



}

Youez - 2016 - github.com/yon3zu
LinuXploit