MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/lms_cafsinfotech_in/application/controllers/Razorpay.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use Razorpay\Api\Api;

class Razorpay extends  Public_Controller{ //CI_Controller

	function __construct() {
		    	
        parent::__construct();
        
        $this->load->model('Payment_model');

		if(empty($this->user['id']))
		{
			$this->session->set_flashdata('error', 'Plz Login First');
			return redirect(base_url("login"));
		}
	}

    public function index($quiz_id)
	{

		$quiz_last_paymetn_status = $this->Payment_model->get_quiz_last_paymetn_status($quiz_id);
		if($quiz_last_paymetn_status)
		{
			return redirect(base_url("instruction/$quiz_id"));
		}

		$quiz_data =  $this->Payment_model->get_paid_quiz_by_id($quiz_id);

		if(empty($quiz_data))
		{
			return redirect(base_url('404_override'));
		}

		$razor_key_id = $this->settings->razorpay_key;
		$razor_secret = $this->settings->razorpay_secret_key;
		$api = new Api($razor_key_id, $razor_secret);

		$orderData = [
		    'receipt'         => time(), 
		    'amount'          => $quiz_data->price * 100, // 2000 rupees in paise
		    'currency'        => $this->settings->paid_currency,
		    'payment_capture' => 1 // auto capture
		];

		$razorpayOrder = $api->order->create($orderData);
		
		
		$get_max_invoice = $this->Payment_model->find_max_invoice_no();

	    if($get_max_invoice)
	    {
	    	$invoice_no = $get_max_invoice[0]->invoice_no+1;
	    	if($invoice_no < get_admin_setting('invoice_start_number'))
	    	{
	    		$invoice_no = get_admin_setting('invoice_start_number')+1;
	    	}
	    	else
	    	{
	    		$invoice_no = $invoice_no;
	    	}
	    	
	    }
	    else
	    {
	    	$invoice_no = get_admin_setting('invoice_start_number')+1;
	    }

		$razorpayOrderId = $razorpayOrder['id'];
		// insert into DB and customer_id = $razorpayOrderId 
		if($razorpayOrderId)
	    {
		    $payment_data = array();
		    $payment_data['user_id'] = $this->user['id'];
		    $payment_data['quiz_id'] = $quiz_id;
		    $payment_data['name'] = $this->user['first_name'].' '.$this->user['last_name'];
		    $payment_data['email'] = $this->user['email'];
		    $payment_data['item_name'] = $quiz_data->title;
		    $payment_data['item_price'] = $quiz_data->price;
		    $payment_data['item_price_currency'] = $this->settings->paid_currency;
		    $payment_data['customer_id'] = $razorpayOrderId;
		    $payment_data['payment_status'] = 'pending';
		    $payment_data['created'] = date("Y-m-d H:i:s");
		    $payment_data['modified'] = date("Y-m-d H:i:s");
		    $payment_data['payment_gateway'] = 'razorpay';
		    $payment_data['invoice_no'] = $invoice_no;

		    $payment_id = $this->Payment_model->insert_paypal_detail($payment_data);
		    return redirect(base_url('razorpay/quiz-payment/'.$payment_id));	   
		}

	}

	public function quiz_payment($payment_id)
	{
		$payment_data =  $this->Payment_model->get_payment_data_by_paymentid($payment_id);
		$quiz_data_by_payment = $this->Payment_model->get_paid_quiz_by_id($payment_data->quiz_id);
		
		if(isset($payment_data) && !empty($payment_data))
		{


			$razor_key_id = $this->settings->razorpay_key;
			$razor_secret = $this->settings->razorpay_secret_key;

			$form_data = [
			    "key"               => $razor_key_id,
			    "amount"            => $payment_data->item_price,
			    "name"              => $quiz_data_by_payment->title,
			    "description"       => $quiz_data_by_payment->title,
			    "image"             => base_url('/assets/images/logo/'.$this->settings->site_logo),
			    "prefill"           => [
			    "name"              => $this->user['first_name'].' '.$this->user['last_name'],
			    "email"             => $this->user['email'],
			    "contact"           => "",
			    ],
			    "notes"             => [
			    "address"           => "Hello World",
			    "merchant_order_id" => $payment_id,
			    ],
			    "theme"             => [
			    "color"             => "#7f67bb"
			    ],
			    "order_id"          => $payment_data->customer_id,
			];

			// $displayCurrency = "";
			// if ($displayCurrency !== 'INR')
			// {
			//     $form_data['display_currency']  = $displayCurrency;
			//     $form_data['display_amount']    = $orderData['amount'];
			// }

			// $json = json_encode($data);

			$content_data = array('data'=>$form_data, 'payment_id'=>$payment_id,'quiz_data' => $quiz_data_by_payment,'Page_message' => lang('welcome_to_online_quiz'), 'page_title' => lang('home'),);

	        $data = $this->includes;
			$data['content'] = $this->load->view('razor_payment', $content_data, TRUE);
	        
	        $this->load->view($this->template, $data);

		}
		else
		{
			$this->session->set_flashdata('error', lang('payment_not_done'));
			return redirect($_SERVER['HTTP_REFERER']);
		}
	}

	function verify($payment_id)
	{
		$payment_data =  $this->Payment_model->get_paypal_payment_by_id($payment_id);

		$quiz_data =  $this->Payment_model->get_paid_quiz_by_id($payment_data->quiz_id);

		if(empty($quiz_data))
		{
			return redirect(base_url('404_override'));
		}

		$success = true;

		$error = "Payment Failed";

		if (empty($_POST['razorpay_payment_id']) === false)
		{

			$keyId = $this->settings->razorpay_key;
			$keySecret = $this->settings->razorpay_secret_key;

		    $api = new Api($keyId, $keySecret);

		    try
		    {
		        // Please note that the razorpay order ID must
		        // come from a trusted source (session here, but
		        // could be database or something else)
		        $attributes = array(
		            'razorpay_order_id' => $payment_data->customer_id,
		            'razorpay_payment_id' => $_POST['razorpay_payment_id'],
		            'razorpay_signature' => $_POST['razorpay_signature']
		        );
		        

		        $api->utility->verifyPaymentSignature($attributes);
		    }
		    catch(SignatureVerificationError $e)
		    {
		        $success = false;
		        $error = 'Razorpay Error : ' . $e->getMessage();
		    }
		}

		$content_data = array('Page_message' => lang('welcome_to_online_quiz'), 'page_title' => lang('home'), 'payment_id' => $payment_id, 'quiz_data' => $quiz_data, 'payment_data' => $payment_data, 'quiz_id' => $quiz_data->id);

		 $data = $this->includes;
		if ($success === true)
		{
			// update payment table and set txn_id and payment_status
			$update_razorpay_payment = $this->Payment_model->update_razorpay_payment_detail($payment_id,$attributes['razorpay_payment_id']);

	        $data['content'] = $this->load->view('payment_success', $content_data, TRUE);
		}
		else
		{
		    $data['content'] = $this->load->view('payment_error', $content_data, TRUE);
		}

		$this->load->view($this->template, $data);
	}
}