JFIF  x x C         C     "        } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        w !1AQ aq"2B #3Rbr{ gilour

File "PaymentGatewayController.php"

Full Path: /var/www/laravel_filter/Modules/PaymentGateway/Http/Controllers/PaymentGatewayController.php
File size: 18.04 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace Modules\PaymentGateway\Http\Controllers;

use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use App\Models\Product;

use Exception;
use Redirect;
use Carbon\Carbon;
use Session;
use Luigel\Paymongo\Facades\Paymongo;
use Modules\PaymentGateway\Entities\MercadoPagoPayment;

class PaymentGatewayController extends Controller
{

    public function pay_with_paymongo($public_key, $secret_key, $webhook_sig, $payable_amount, $payable_currency, $after_success_url, $after_faild_url, $card_info){

        $success_url = route('paymongo-payment-success');
        $faild_url = route('paymongo-payment-cancled');

        config(['paymongo.public_key' => $public_key]);
        config(['paymongo.secret_key' => $secret_key]);
        config(['paymongo.webhook_signatures.payment_paid' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_failed' => $webhook_sig]);
        config(['paymongo.webhook_signatures.source_chargeable' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refunded' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refund_updated' => $webhook_sig]);


        // create payment method
         try{
            $paymentMethod = Paymongo::paymentMethod()->create([
                'type' => 'card',
                'details' => [
                    'card_number' => $card_info['card_number'],
                    'exp_month' => $card_info['month'],
                    'exp_year' => $card_info['year'],
                    'cvc' => $card_info['cvc'],
                ]
            ]);

        }catch (Exception $e) {
            $after_faild_url = Session::get('after_faild_url');
            return redirect($after_faild_url);
        }

        $payment_method_id = $paymentMethod->id;

        $paymentIntent = Paymongo::paymentIntent()->create([
            'amount' => $payable_amount,
            'payment_method_allowed' => [
                'card'
            ],
            'payment_method_options' => [
                'card' => [
                    'request_three_d_secure' => 'automatic'
                ]
            ],
            'description' => env('APP_NAME'),
            'statement_descriptor' => env('APP_NAME'),
            'currency' => $payable_currency,
        ]);

        $payment_intent_id = $paymentIntent->id;
        Session::put('paymentIntentId', $payment_intent_id);
        Session::save();

        $code = base64_encode($secret_key);
        require_once('vendor/autoload.php');
        $client = new \GuzzleHttp\Client();
        $response = $client->request('POST', 'https://api.paymongo.com/v1/payment_intents/'.$payment_intent_id.'/attach', [
        'body' => '{"data":{"attributes":{"payment_method":"'.$payment_method_id.'","return_url":"'.route('paymongo-verify').'"}}}',
        'headers' => [
            'Accept' => 'application/json',
            'Authorization' => 'Basic '.$code.'',
            'Content-Type' => 'application/json',
        ],
        ]);

        $response = json_decode($response->getBody(), true);

        if($response['data']['attributes']['status'] == 'succeeded'){

            session()->put('after_success_url', $after_success_url);
            session()->put('after_faild_url', $after_faild_url);
            session()->put('payable_amount', $payable_amount);
            session()->put('payable_currency', $payable_currency);
            session()->put('public_key', $public_key);
            session()->put('secret_key', $secret_key);
            session()->put('webhook_sig', $webhook_sig);
            Session::put('after_success_gateway', 'Paymongo');
            Session::put('after_success_transaction', $response['data']['id']);

            return redirect($after_success_url);

        }elseif($response['data']['attributes']['status'] == 'awaiting_next_action'){

            session()->put('after_success_url', $after_success_url);
            session()->put('after_faild_url', $after_faild_url);
            session()->put('payable_amount', $payable_amount);
            session()->put('payable_currency', $payable_currency);
            session()->put('public_key', $public_key);
            session()->put('secret_key', $secret_key);
            session()->put('webhook_sig', $webhook_sig);
            Session::put('after_success_gateway', 'Paymongo');

            $checkout_url = $response['data']['attributes']['next_action']['redirect']['url'];
            return redirect()->to($checkout_url);

        }else{
            $after_faild_url = Session::get('after_faild_url');
            return redirect($after_faild_url);
        }
    }


    public function paymongo_verify(Request $request){

        $payable_amount = Session::get('payable_amount');
        $payable_currency = Session::get('payable_currency');
        $after_success_url = Session::get('after_success_url');
        $after_faild_url = Session::get('after_faild_url');
        $public_key = Session::get('public_key');
        $secret_key = Session::get('secret_key');
        $webhook_sig = Session::get('webhook_sig');

        config(['paymongo.public_key' => $public_key]);
        config(['paymongo.secret_key' => $secret_key]);
        config(['paymongo.webhook_signatures.payment_paid' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_failed' => $webhook_sig]);
        config(['paymongo.webhook_signatures.source_chargeable' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refunded' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refund_updated' => $webhook_sig]);

        require_once('vendor/autoload.php');
        $client = new \GuzzleHttp\Client();
        $paymentIntentId = Session::get('paymentIntentId');
        $code = base64_encode($secret_key);

        $response = $client->request('GET', 'https://api.paymongo.com/v1/payment_intents/'.$paymentIntentId, [
            'headers' => [
                'Accept' => 'application/json',
                'Authorization' => 'Basic '.$code.'',
            ],
        ]);

        $response = json_decode($response->getBody(), true);

        if($response['data']['attributes']['status'] == 'succeeded'){

            Session::put('after_success_transaction', $response['data']['id']);

            return redirect($after_success_url);

        }else{
            return redirect($after_faild_url);
        }


    }

    public function pay_with_grabpay($public_key, $secret_key, $webhook_sig, $payable_amount, $payable_currency, $after_success_url, $after_faild_url){

        config(['paymongo.public_key' => $public_key]);
        config(['paymongo.secret_key' => $secret_key]);
        config(['paymongo.webhook_signatures.payment_paid' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_failed' => $webhook_sig]);
        config(['paymongo.webhook_signatures.source_chargeable' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refunded' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refund_updated' => $webhook_sig]);


        $gcashSource = Paymongo::source()->create([
            'type' => 'grab_pay',
            'amount' => $payable_amount,
            'currency' => $payable_currency,
            'redirect' => [
                'success' => route('paymongo-payment-success'),
                'failed' => route('paymongo-payment-cancled')
            ]
        ]);

        $gcashSourceId = $gcashSource->id;
        session()->put('gcashSourceId', $gcashSourceId);
        session()->put('payableAmount', $payable_amount);

        session()->put('after_success_url', $after_success_url);
        session()->put('after_faild_url', $after_faild_url);
        session()->put('payable_amount', $payable_amount);
        session()->put('payable_currency', $payable_currency);
        session()->put('public_key', $public_key);
        session()->put('secret_key', $secret_key);
        session()->put('webhook_sig', $webhook_sig);
        Session::put('after_success_gateway', 'Grab Pay');

        return redirect($gcashSource->redirect['checkout_url']);
    }


    public function pay_with_gcash($public_key, $secret_key, $webhook_sig, $payable_amount, $payable_currency, $after_success_url, $after_faild_url){

        config(['paymongo.public_key' => $public_key]);
        config(['paymongo.secret_key' => $secret_key]);
        config(['paymongo.webhook_signatures.payment_paid' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_failed' => $webhook_sig]);
        config(['paymongo.webhook_signatures.source_chargeable' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refunded' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refund_updated' => $webhook_sig]);


        $gcashSource = Paymongo::source()->create([
            'type' => 'gcash',
            'amount' => $payable_amount,
            'currency' => $payable_currency,
            'redirect' => [
                'success' => route('paymongo-payment-success'),
                'failed' => route('paymongo-payment-cancled')
            ]
        ]);

        $gcashSourceId = $gcashSource->id;
        session()->put('gcashSourceId', $gcashSourceId);
        session()->put('payableAmount', $payable_amount);

        session()->put('after_success_url', $after_success_url);
        session()->put('after_faild_url', $after_faild_url);
        session()->put('payable_amount', $payable_amount);
        session()->put('payable_currency', $payable_currency);
        session()->put('public_key', $public_key);
        session()->put('secret_key', $secret_key);
        session()->put('webhook_sig', $webhook_sig);
        Session::put('after_success_gateway', 'GCash');

        return redirect($gcashSource->redirect['checkout_url']);
    }

    public function paymongo_payment_success(Request $request){

        $payable_amount = Session::get('payable_amount');
        $payable_currency = Session::get('payable_currency');
        $after_success_url = Session::get('after_success_url');
        $after_faild_url = Session::get('after_faild_url');
        $public_key = Session::get('public_key');
        $secret_key = Session::get('secret_key');
        $webhook_sig = Session::get('webhook_sig');

        $gcashSourceId = Session::get('gcashSourceId');
        $payableAmount = Session::get('payableAmount');
        Session::forget('gcashSourceId');
        Session::forget('payableAmount');

        config(['paymongo.public_key' => $public_key]);
        config(['paymongo.secret_key' => $secret_key]);
        config(['paymongo.webhook_signatures.payment_paid' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_failed' => $webhook_sig]);
        config(['paymongo.webhook_signatures.source_chargeable' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refunded' => $webhook_sig]);
        config(['paymongo.webhook_signatures.payment_refund_updated' => $webhook_sig]);

        try{
            $payment = Paymongo::payment()
            ->create([
                'amount' => $payable_amount,
                'currency' => $payable_currency,
                'description' => env('APP_NAME'),
                'statement_descriptor' => env('APP_NAME'),
                'source' => [
                    'id' => $gcashSourceId,
                    'type' => 'source'
                ]
            ]);

            Session::put('after_success_transaction', $payment->id);

            return redirect($after_success_url);

        }catch(Exception $e){

            return redirect($after_faild_url);
        }
    }

    public function paymongo_payment_cancled(Request $request){
        $after_faild_url = Session::get('after_faild_url');
        return redirect($after_faild_url);
    }

    public function pay_with_iyzico(Request $client_request, $iyzipay_api_key, $iyzipay_secret_key, $iyzipay_account_mode, $payable_amount, $payable_currency, $after_success_url, $after_faild_url, $user, $custom_items){

        $name = $user->name;
        $email = $user->email;
        $phone = $user->phone ? $user->phone : '1234569877';
        $address = $user->address ? $user->address : 'test address';
        $country = $user->country ? $user->country : 'test country';
        $city = $user->city ? $user->city : 'test ciy';

        $options = new \Iyzipay\Options();
        $options->setApiKey($iyzipay_api_key);
        $options->setSecretKey($iyzipay_secret_key);
        if($iyzipay_account_mode == 'Sandbox'){
            $options->setBaseUrl("https://sandbox-api.iyzipay.com");
        }else{
            $options->setBaseUrl("https://api.iyzipay.com");
        }

        $request = new \Iyzipay\Request\CreatePaymentRequest();
        $request->setLocale(\Iyzipay\Model\Locale::TR);
        $request->setConversationId("123456789");
        $request->setPrice($payable_amount);
        $request->setPaidPrice($payable_amount);
        $request->setCurrency(\Iyzipay\Model\Currency::TL);
        $request->setInstallment(1);
        $request->setBasketId(rand ( 10000 , 99999));
        $request->setPaymentChannel(\Iyzipay\Model\PaymentChannel::WEB);
        $request->setPaymentGroup(\Iyzipay\Model\PaymentGroup::PRODUCT);

        try{
            $expiry = explode(' / ', $client_request->expiry);

            $holder_name = $client_request->holder_name;
            $card_digit = str_replace(' ', '', $client_request->card_digit);
            $month = $expiry[0];
            $year = $expiry[1];
            $cvc = $client_request->cvc;

            $paymentCard = new \Iyzipay\Model\PaymentCard();
            $paymentCard->setCardHolderName($holder_name);
            $paymentCard->setCardNumber($card_digit);
            $paymentCard->setExpireMonth($month);
            $paymentCard->setExpireYear($year);
            $paymentCard->setCvc($cvc);
            $paymentCard->setRegisterCard(0);
            $request->setPaymentCard($paymentCard);

        }catch (Exception $e) {

            $notification= trans('user_validation.Please provide valid card information');
            $notification=array('messege'=>$notification,'alert-type'=>'error');

            return redirect()->back()->with($notification);
        }

        $buyer = new \Iyzipay\Model\Buyer();
        $buyer->setId("BY789");
        $buyer->setName($name);
        $buyer->setSurname($name);
        $buyer->setGsmNumber($phone);
        $buyer->setEmail($email);
        $buyer->setIdentityNumber("74300864791");
        $buyer->setRegistrationAddress($address);
        $buyer->setCity($city);
        $buyer->setCountry($country);
        $request->setBuyer($buyer);

        $shippingAddress = new \Iyzipay\Model\Address();
        $shippingAddress->setContactName($name);
        $shippingAddress->setCity($city);
        $shippingAddress->setCountry($country);
        $shippingAddress->setAddress($address);
        $shippingAddress->setZipCode("34742");
        $request->setShippingAddress($shippingAddress);

        $billingAddress = new \Iyzipay\Model\Address();
        $billingAddress->setContactName($name);
        $billingAddress->setCity($city);
        $billingAddress->setCountry($country);
        $billingAddress->setAddress($address);
        $request->setBillingAddress($billingAddress);

        $basketItems = array();

        foreach($custom_items as $index => $custom_item){
            $firstBasketItem = new \Iyzipay\Model\BasketItem();
            $random_id = rand ( 1000 , 9999).$index;
            $firstBasketItem->setId($random_id);
            $firstBasketItem->setName($custom_item->name);
            $firstBasketItem->setCategory1($custom_item->category);
            $firstBasketItem->setItemType(\Iyzipay\Model\BasketItemType::PHYSICAL);
            $firstBasketItem->setPrice($custom_item->price);
            $basketItems[] = $firstBasketItem;
        }

        $request->setBasketItems($basketItems);
        $payment = \Iyzipay\Model\Payment::create($request, $options);
        if($payment->getStatus() == 'success'){

            session()->put('after_success_url', $after_success_url);
            session()->put('after_faild_url', $after_faild_url);
            session()->put('payable_amount', $payable_amount);
            session()->put('payable_currency', $payable_currency);
            Session::put('after_success_gateway', 'Iyzico');
            Session::put('after_success_transaction', $payment->getPaymentId());

            return redirect($after_success_url);
        }else{
            return redirect($after_faild_url);
        }
    }

    public function pay_with_mercadopago(Request $request, $public_key, $access_token, $payable_amount, $payable_currency, $after_success_url, $after_faild_url, $user){

        require_once 'vendor/autoload.php';
        \MercadoPago\SDK::setAccessToken($access_token);

        try{
            $payment = new \MercadoPago\Payment();
            $payment->transaction_amount = $request->transaction_amount;
            $payment->token = $request->token;
            $payment->description = env('APP_NAME');
            $payment->installments = $request->installments;
            $payment->payment_method_id = $request->payment_method_id;
            $payment->payer = array(
            "email" => $request->payer['email']
            );
            $payment->save();
        }catch(Exception $ex){
            $notification = trans('user_validation.Payment Faild');
            return response()->json(['message' => $ex->getMessage()], 403);
        }

        if($payment->status == 'approved'){

            session()->put('after_success_url', $after_success_url);
            session()->put('after_faild_url', $after_faild_url);
            session()->put('payable_amount', $payable_amount);
            session()->put('payable_currency', $payable_currency);
            Session::put('after_success_gateway', 'Mercado pago');
            Session::put('after_success_transaction', $payment->id);

            $notification= trans('user_validation.Congratulations! Your order has been submited');
            return response()->json(['message' => $notification]);

        }else{
            $notification= trans('user_validation.Payment Faild');
            return response()->json(['message' => $notification], 403);
        }


    }
}