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.