Course Content
Introduction to CodeIgniter 4
CodeIgniter is an Application Development Framework. CodeIgniter is a popular and powerful MVC (Model-View-Controller) framework that is used to develop web applications. It is a free and Open-source PHP framework.
0/5
MVC (Model-View-Controller)
MVC stands for Model-View-Controller. MVC is an application design model consisting of three interconnected parts. They include the model (data), the view (user interface), and the controller (processes that handle input).
0/6
Sessions
The Session class allows you to maintain a user’s "state" and track their activity while they browse your site.
0/1
URI Routing
There is a one-to-one relationship between a URL string and its corresponding controller class/method.
0/2
Working with Database
Like any other framework, we need to interact with the database very often and CodeIgniter makes this job easy for us. It provides a rich set of functionalities to interact with the database.
0/5
Spreadsheet
PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Importing Excel and CSV into MySQL help to save the user time and avoid repetitive work.
0/1
CodeIgniter 4
About Lesson

RazorPay is a well-known payment gateway platform in India. Razorpay provides clean, secure, and fast payments services with hassle-free integration with developer-friendly APIs. It supports various payment modes such as Cards, Net-banking, Wallets & UPI.

Setup Razorpay Account

1. Copy and Paste the following lines in app/Config/Routes.php

$routes->get('/', 'Razorpay::index');

2. Create a controller file Razorpay.php in the app/Controllers/ directory.

<?php namespace App\Controllers;

class Razorpay extends BaseController {

	public function __construct() {
		$this->session 	= ConfigServices::session();
	}

	public function index() {
		$data = [];
		$data['title']              = 'Checkout payment | Infovistar';  
        $data['callback_url']       = base_url().'/razorpay/callback';
        $data['surl']               = base_url().'/razorpay/success';;
        $data['furl']               = base_url().'/razorpay/failed';;
        $data['currency_code']      = 'INR';
		echo view("checkout", $data);
	}

	// initialized cURL Request
    private function curl_handler($payment_id, $amount)  {
        $url    = 'https://api.razorpay.com/v1/payments/'.$payment_id.'/capture';
        $key_id         = "YOUR_KEY_ID";
        $key_secret     = "YOUR_SECRET";
        $fields_string  = "amount=$amount";
        //cURL Request
        $ch = curl_init();
        //set the url, number of POST vars, POST data
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERPWD, $key_id.':'.$key_secret);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        return $ch;
    }   

    // callback method
    public function callback() {   
    	if (!empty($this->request->getPost('razorpay_payment_id')) && 
            !empty($this->request->getPost('merchant_order_id'))) {

    		$razorpay_payment_id 	= $this->request->getPost('razorpay_payment_id');
            $merchant_order_id 		= $this->request->getPost('merchant_order_id');

            $this->session->set('razorpay_payment_id', $this->request->getPost('razorpay_payment_id'));
            $this->session->set('merchant_order_id', $this->request->getPost('merchant_order_id'));
            $currency_code = 'INR';
            $amount = $this->request->getPost('merchant_total');

            $success = false;
            $error = '';
            try {                
                $ch = $this->curl_handler($razorpay_payment_id, $amount);
                //execute post
                $result = curl_exec($ch);
                $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                if ($result === false) {
                    $success = false;
                    $error = 'Curl error: '.curl_error($ch);
                } else {
                    $response_array = json_decode($result, true);
                        //Check success response
                        if ($http_status === 200 and isset($response_array['error']) === false) {
                            $success = true;
                        } else {
                            $success = false;
                            if (!empty($response_array['error']['code'])) {
                                $error = $response_array['error']['code'].':'.
                                        $response_array['error']['description'];
                            } else {
                                $error = 'RAZORPAY_ERROR:Invalid Response <br/>'.$result;
                            }
                        }
                }
                //close curl connection
                curl_close($ch);
            } catch (Exception $e) {
                $success = false;
                $error = 'Request to Razorpay Failed';
            }

            if ($success === true) {
                if(!empty($this->session->get('ci_subscription_keys'))) {
                    $this->session->unset('ci_subscription_keys');
                }
                if (!$order_info['order_status_id']) {
                    return redirect()->to($this->request->getPost('merchant_surl_id'));
                } else {
                    return redirect()->to($this->request->getPost('merchant_surl_id'));
                }

            } else {
                return redirect()->to($this->request->getPost('merchant_furl_id'));
            }
    	} else {
            echo 'An error occured. Contact site administrator, please!';
        }
    }

    public function success() {
        $data['title'] = 'Razorpay Success | infovistar';
        echo "<h4>Your transaction is successful</h4>";  
        echo "<br/>";
        echo "Transaction ID: ".$this->session->get('razorpay_payment_id');
        echo "<br/>";
        echo "Order ID: ".$this->session->get('merchant_order_id');
    }  
    public function failed() {
        $data['title'] = 'Razorpay Failed | infovistar';  
        echo "<h4>Your transaction got Failed</h4>";            
        echo "<br/>";
        echo "Transaction ID: ".$this->session->get('razorpay_payment_id');
        echo "<br/>";
        echo "Order ID: ".$this->session->get('merchant_order_id');
    }

}

3. Create a checkout.php file in the app/Views/ directory.

<!DOCTYPE html>
<html>
<head>
    <title>Razorpay Payment Gateway</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="stylesheet" 
        href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>

<?php
$description        = "Product Description";
$txnid              = date("YmdHis");     
$key_id             = "YOUR_KEY_ID";
$currency_code      = $currency_code;            
$total              = (1* 100); // 100 = 1 indian rupees
$amount             = 1;
$merchant_order_id  = "ABC-".date("YmdHis");
$card_holder_name   = 'Junaid Shaikh';
$email              = 'coexistech@gmail.com';
$phone              = '9158876092';
$name               = "RazorPay Infovistar";
?>

    <div class="container">
        <div class="page-header">
            <h1>Pay with Razorpay</h1>
        </div>
        <div class="page-body">
            <form name="razorpay-form" id="razorpay-form" action="<?php echo $callback_url; ?>" 
                method="POST">
                <input type="hidden" name="razorpay_payment_id" id="razorpay_payment_id" />
                <input type="hidden" name="merchant_order_id" id="merchant_order_id" 
                value="<?php echo $merchant_order_id; ?>"/>
                <input type="hidden" name="merchant_trans_id" id="merchant_trans_id" 
                value="<?php echo $txnid; ?>"/>
                <input type="hidden" name="merchant_product_info_id" id="merchant_product_info_id" 
                value="<?php echo $description; ?>"/>
                <input type="hidden" name="merchant_surl_id" id="merchant_surl_id" 
                value="<?php echo $surl; ?>"/>
                <input type="hidden" name="merchant_furl_id" id="merchant_furl_id" 
                value="<?php echo $furl; ?>"/>
                <input type="hidden" name="card_holder_name_id" id="card_holder_name_id" 
                value="<?php echo $card_holder_name; ?>"/>
                <input type="hidden" name="merchant_total" id="merchant_total" 
                value="<?php echo $total; ?>"/>
                <input type="hidden" name="merchant_amount" id="merchant_amount" 
                value="<?php echo $amount; ?>"/>
            </form>

            <table width="100%">
                <tr>
                    <th>No.</th>
                    <th>Product Name</th>
                    <th class="text-right">Cost</th>
                </tr>
                <tr>
                    <td>1</td>
                    <td>HeadPhones</td>
                    <td class="text-right">₹ 1.00</td>
                </tr>
            </table>
            <div class="mt-2 text-right">
                <input  id="pay-btn" type="submit" onclick="razorpaySubmit(this);" 
                value="Buy Now" class="btn btn-primary" />
            </div>
        </div>
    </div>

    

    

    <script src="https://checkout.razorpay.com/v1/checkout.js"></script>
    <script>
        var options = {
            key:            "<?php echo $key_id; ?>",
            amount:         "<?php echo $total; ?>",
            name:           "<?php echo $name; ?>",
            description:    "Order # <?php echo $merchant_order_id; ?>",
            netbanking:     true,
            currency:       "<?php echo $currency_code; ?>", // INR
            prefill: {
                name:       "<?php echo $card_holder_name; ?>",
                email:      "<?php echo $email; ?>",
                contact:    "<?php echo $phone; ?>"
            },
            notes: {
                soolegal_order_id: "<?php echo $merchant_order_id; ?>",
            },
            handler: function (transaction) {
                document.getElementById('razorpay_payment_id').value = transaction.razorpay_payment_id;
                document.getElementById('razorpay-form').submit();
            },
            "modal": {
                "ondismiss": function(){
                    location.reload()
                }
            }
        };

        var razorpay_pay_btn, instance;
        function razorpaySubmit(el) {
            if(typeof Razorpay == 'undefined') {
                setTimeout(razorpaySubmit, 200);
                if(!razorpay_pay_btn && el) {
                    razorpay_pay_btn    = el;
                    el.disabled         = true;
                    el.value            = 'Please wait...';  
                }
            } else {
                if(!instance) {
                    instance = new Razorpay(options);
                    if(razorpay_pay_btn) {
                    razorpay_pay_btn.disabled   = false;
                    razorpay_pay_btn.value      = "Pay Now";
                    }
                }
                instance.open();
            }
        }  
    </script>

</body>
</html>