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>