Codeigniter 4 Razorpay Payment Gateway Integration Tutorial

Codeigniter 4 Razorpay Payment Gateway Integration Tutorial

Codeigniter 4 razorpay payment gateway integration tutorial. In this tutorial, you will learn how to integrate razorpay payment gateway into codeignitor 4 app.

This tutorial will guide you step by step on how to integrate the razorpay payment gateway in CodeIgniter 4 app with live demo.

Razorpay Payment Gateway Integration In PHP Codeigniter 4

Follow the below given steps and integrate razorpay payment gateway in php codeigniter 4 app:

  • Step 1 – Setup Codeigniter 4 Project
  • Step 2 – Basic Configurations
  • Step 3 – Setup Database Credentials
  • Step 4 – Create Controller
  • Step 5 – Create Views
  • Step 6 – Start Development server

Step 1 – Setup Codeigniter 4 Project

In this step, you will download the latest version of Codeigniter 4, Go to this link Download Codeigniter 4 fresh new setup and unzip the setup in your local system xampp/htdocs/ . And change the download folder name “demo”

Step 2 – Basic Configurations

Next, you will set some basic configuration on the app/config/app.php file, so let’s go to application/config/config.php and open this file on text editor.

Set Base URL like this

public $baseURL = 'http://localhost:8080';
public $baseURL = 'http://localhost/demo/';

Step 3 – Setup Database Credentials

In this step, you need to connect our project to database. you need to go application/config/ and open database.php file in text editor. After open the file in text editor, you need to setup database credential in this file like below.

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'demo',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE

Step 4 – Create Controller

In this step, you need to create a controller name Payment.php. And add the following code into it:

<?php namespace App\Controllers;

class Razorpay extends BaseController {

	public function __construct() {
		$this->session 	= \Config\Services::session();

	public function index() {
		$data = [];
		$data['title']              = 'Checkout payment |';  
        $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            = ''.$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
            } catch (Exception $e) {
                $success = false;
                $error = 'Request to Razorpay Failed';

            if ($success === true) {
                if(!empty($this->session->get('ci_subscription_keys'))) {
                if (!$response_array['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 |';
        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 |';  
        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');


Step 5 – Create Views

Now you need to create checkout.php. So visit application/views/ folder and create checkout.php file. And add the following code into it:

<!DOCTYPE html>
    <title>Codeigniter 4 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">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="stylesheet" href="" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">

$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              = '[email protected]';
$phone              = '9158876092';
$name               = "RazorPay Infovistar";

    <div class="container">
        <div class="page-header">
            <h1>Pay with Razorpay</h1>
        <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; ?>"/>

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

    <script src=""></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;
            "modal": {
                "ondismiss": function(){

        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";


Step 6 – Start Development Server

In this step, open your terminal and execute the following command to start development sever:

php spark serve

Then, Go to the browser and hit below the URL:



In this codeigniter razorpay payment gateway tutorial, you have successfully implemented Razorpay payment gateway with Codeigniter 4 app.

If you have any questions or thoughts to share, use the comment form below to reach us.

Note : here is live payment key implement, so dummy credential not work here.

Recommended Codeigniter 4 Tutorials


Greetings, I'm Devendra Dode, a full-stack developer, entrepreneur, and the proud owner of My passion lies in crafting informative tutorials and offering valuable tips to assist fellow developers on their coding journey. Within my content, I cover a spectrum of technologies, including PHP, Python, JavaScript, jQuery, Laravel, Livewire, CodeIgniter, Node.js, Express.js, Vue.js, Angular.js, React.js, MySQL, MongoDB, REST APIs, Windows, XAMPP, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL, and Bootstrap. Whether you're starting out or looking for advanced examples, I provide step-by-step guides and practical demonstrations to make your learning experience seamless. Let's explore the diverse realms of coding together.

2 replies to Codeigniter 4 Razorpay Payment Gateway Integration Tutorial

  1. its working good, but after payment completed through qr code its not showing the success message

    • Determine the success or failure path of the payment method when the payment is completed.

Leave a Reply

Your email address will not be published. Required fields are marked *