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 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
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 | 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
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>
<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 – 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:
http://localhost:8080
Conclusion
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.
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.