Codeigniter 4 Razorpay Payment Gateway Integration Tutorial

Razorpay is a popular payment gateway service that allows businesses to accept online payments via credit card, debit card, net banking, UPI, and other methods. In this tutorial, you will learn how to integrate razorpay payment gateway into codeignitor 4 app.

Razorpay Payment Gateway Integration In PHP Codeigniter 4

To integrate razorpay payment gateway in php codeigniter 4 projects:

  • 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 https://codeigniter.com/download 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';
To
public $baseURL = 'http://localhost/demo/';

Step 3 – Setup Database Credentials

Go to application/config/ folder and open database.php file in text editor, and then add 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

Create a controller name Payment.php and add the following methods into it to handle online payment process in application:

<?php namespace App\Controllers;
class Razorpay extends BaseController {
public function __construct() {
$this->session = \Config\Services::session();
}
public function index() {
$data = [];
$data['title'] = 'Checkout payment | Tutsmake.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);
}
// 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 (!$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 | Tutsmake.com';
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 | Tutsmake.com';
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

Go to application/views/ folder and create checkout.php file to accept payment using razorpay from customers:

<!DOCTYPE html>
<html>
<head>
<title>Codeigniter 4 Razorpay Payment Gateway - Tutsmake.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">
<!-- 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="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 = '[email protected]';
$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>

Step 6 – Test Application

Run the following command to start development sever:

php spark serve

Open browser and test this application:

http://localhost:8080

Conclusion

Here, you have successfully implemented Razorpay payment gateway with Codeigniter 4 app.

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

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

Recommended Codeigniter 4 Tutorials

AuthorDevendra Dode

Greetings, I'm Devendra Dode, a full-stack developer, entrepreneur, and the proud owner of Tutsmake.com. 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 *