Razorpay Payment Gateway Integration In PHP Codeigniter 4

Apr 20, 2022 . Admin



Hi Dev,

This example is focused on razorpay payment gateway integration in php codeigniter 4. I’m going to show you about codeigniter 4 razorpay payment gateway integration tutorial. I’m going to show you about razorpay payment gateway integration in php code. We will look at example of how to integrate razorpay payment gateway in codeigniter 4.

This article will give you simple example of how to integrate razorpay payment gateway in codeigniter 4.

This tutorial will manual you little by little on a way to integrate the razorpay price gateway in CodeIgniter 4 app.

So let's start to the example.

Step 1: Install Codeigniter 4

This is optional; however, if you have not created the codeigniter app, then you may go ahead and execute the below command:

composer create-project codeigniter4/appstarter ci-news

After Download successfully, extract clean new Codeigniter 4 application.

Step 2 : Basic Configurations

So, we will now set basic configuration on the app/config/app.php file, so let’s implement to application/config/config.php and open this file on text editor.

app/config/app.php
public $baseURL = 'http://localhost:8080';
To
public $baseURL = 'http://localhost/example/';
Step 3 : Database Configurations application/config/database.php
public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'demo',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => (ENVIRONMENT !== 'production'),
    'cacheOn'  => false,
    'cacheDir' => '',
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
    'port'     => 3306,
];
Step 4 : Set Up Controller

Further, you need to generate a new controller that manages the online stripe transaction, hence create a Payment file and append the example code in..

app/Controllers/Payment.php
<?php
namespace App\Controllers;

class Razorpay extends BaseController {

    /**
     * Write code on Method
     *
     * @return response()
     */
    public function __construct() {
        $this->session   = \Config\Services::session();
    }

    /**
     * Write code on Method
     *
     * @return response()
     */
    public function index() {
        $data = [];
        $data['title'] = 'Checkout payment | Mywebtuts.com';  
        $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);
    }

    /**
     * Write code on Method
     *
     * @return response()
     */
    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";
        $ch = curl_init();
        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;
    }

    /**
     * Write code on Method
     *
     * @return response()
     */
    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);
                $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);
                    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 
'.$result; } } } 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!'; } } /** * Write code on Method * * @return response() */ public function success() { $data['title'] = 'Razorpay Success | Mywebtuts.com'; echo "

Your transaction is successful

"; echo "
"; echo "Transaction ID: ".$this->session->get('razorpay_payment_id'); echo "
"; echo "Order ID: ".$this->session->get('merchant_order_id'); } public function failed() { $data['title'] = 'Razorpay Failed | Mywebtuts.com'; echo "

Your transaction got Failed

"; echo "
"; echo "Transaction ID: ".$this->session->get('razorpay_payment_id'); echo "
"; echo "Order ID: ".$this->session->get('merchant_order_id'); } }
Step 5 : Set Up View

Head over to application/views/ folder, create a new checkout file. Likewise, open and add the suggested code example in application/views/checkout.php file:

application/views/checkout.php
<!DOCTYPE html>
<html>
<head>
    <title>Codeigniter 4 Razorpay Payment Gateway - Mywebtuts.com</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" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
</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   = 'David Chase';
$email              = 'Mywebtuts@gmail.com';
$phone              = '8780395141';
$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>

/*------------------------------------------
--------------------------------------------
About 
--------------------------------------------
--------------------------------------------*/
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()
        }
    }
};

/*------------------------------------------
--------------------------------------------
Razorpay Submit
--------------------------------------------
--------------------------------------------*/
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>
Step 6 : Run Codeigniter App:

All the required steps have been done, now you have to type the given below command and hit enter to run the Codeigniter app:

php spark serve

Now, Go to your web browser, type the given URL and view the app output:

http://localhost:8080/

I hope it can help you...

#Codeigniter 4