CCAvenue Payment Gateway Integration in PHP


Hi friends, in this tutorial you will learn how to do the CCAvenue payment gateway integration in PHP. CCAvenue is one of India’s top payment gateways, including multiple payment options such as 200+ Mastercard, visa, Rupay, Netbanking, Wallet payments, UPI payments, etc., along with multi-currency options.

This payment gateway is very fast, simple, and secure and sends the invoice as soon as the payment is done by the merchants. As we all know that we need some keys and credentials provided by the gateway provider while integrating payment gateways.

Also, read, Integrate Instamojo payment gateway in PHP step by step

Test and Production Environment

In every payment gateway, there have to be two types of environments. One is for testing and another is for the production environment as shown below

  • CCAvenue Test URL: https://test.ccavenue.com
  • CCAvenue Production URL: https://secure.ccavenue.com

Required steps for CCAvenue payment gateway integration in PHP

Step 1:- Go to the CCAvenue website and sign up for a Merchant account here as shown in the below screenshot.

CCAvenue Payment Gateway Integration in PHP

Now, provide your business details and bank details, and KYC to proceed and you will receive an email for account details.

Step 2:- Now, log in to your CCAvenue Merchant account and click on web integration kit under the resources tab.

Step 3:- On the left side, click on download integration kits and download the PHP kit as shown below.

CCAvenue Payment Gateway Integration in PHP

Step 4:- Now, unzip the downloaded file and you will see three types of kits as given below

. CUSTOM_CHECKOUT_FORM_KIT
. IFRAME_KIT
. NON_SEAMLESS_KIT

We will go with the IFRAME_KIT.

Step 5:- Now, put this IFRAME_KIT folder inside the root directory of your local server which means WAMP, XAMPP, etc.

Step 6:- Get the API keys from the settings tab in your Merchant dashboard as shown below.

CCAvenue Payment Gateway Integration in PHP

Step 7:- Open the dataFrom.htm file and modify it as given below.

<html>
<head>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<script>
	window.onload = function() {
		var d = new Date().getTime();
		document.getElementById("tid").value = d;
	};
</script>
</head>
<body>
	<form method="post" name="customerData" action="ccavRequestHandler.php">
		<h3 class="text-center">CC Avenue Payment Gateway Integration in PHP</h3>
		<!-- <table width="40%" height="100" border='1' align="center"><caption><font size="4" color="blue"><b>Integration Kit</b></font></caption></table> -->
		<div class="container">
			<div class="row">
				<div class="col-sm-12">
					<table class="table table-bordered">
						<tr class="bg-dark text-white">
							<td colspan="2"> Payment Details</td>
						</tr>
						<tr style="display: none;">
							<td>TID	:</td><td><input type="text" class="form-control form-control-sm" name="tid" id="tid" readonly /></td>
						</tr>
						<tr style="display: none;">
							<td>Merchant Id	:</td><td><input type="text" class="form-control form-control-sm" name="merchant_id" value="your merchant id"/></td>
						</tr>
						<tr style="display: none;">
							<td>Order Id	:</td><td><input type="text" class="form-control form-control-sm" name="order_id" value="123654789"/></td>
						</tr>
						<tr>
							<td>Amount	:</td><td><input type="text" class="form-control form-control-sm" name="amount" value="1.00"/></td>
						</tr>
						<tr style="display: none;">
							<td>Currency	:</td><td><input type="text" class="form-control form-control-sm" name="currency" value="INR"/></td>
						</tr>
						<tr style="display: none;">
							<td>Redirect URL	:</td><td><input type="text" class="form-control form-control-sm" name="redirect_url" value="https://localhost/myprojects/ccavenue/IFRAME_KIT/ccavResponseHandler.php"/></td>
						</tr>
					 	<tr style="display: none;">
					 		<td>Cancel URL	:</td><td><input type="text" class="form-control form-control-sm" name="cancel_url" value="https://localhost/IFrame_PHP_kit/ccavResponseHandler.php"/></td>
					 	</tr>
					 	<tr style="display: none;">
							<td>Language	:</td><td><input type="text" class="form-control form-control-sm" name="language" value="EN"/></td>
						</tr>
				     	<tr>
				     		<td colspan="2" class="fw-bold">Billing information(optional):</td>
				     	</tr>
				        <tr>
				        	<td>Billing Name	:</td><td><input type="text" class="form-control form-control-sm" name="billing_name" value="Charli"/></td>
				        </tr>
				        <tr>
				        	<td>Billing Address	:</td><td><input type="text" class="form-control form-control-sm" name="billing_address" value="Room no 1101, near Railway station Ambad"/></td>
				        </tr>
				        <tr>
				        	<td>Billing City	:</td><td><input type="text" class="form-control form-control-sm" name="billing_city" value="Indore"/></td>
				        </tr>
				        <tr>
				        	<td>Billing State	:</td><td><input type="text" class="form-control form-control-sm" name="billing_state" value="MP"/></td>
				        </tr>
				        <tr>
				        	<td>Billing Zip	:</td><td><input type="text" class="form-control form-control-sm" name="billing_zip" value="425001"/></td>
				        </tr>
				        <tr>
				        	<td>Billing Country	:</td><td><input type="text" class="form-control form-control-sm" name="billing_country" value="India"/></td>
				        </tr>
				        <tr>
				        	<td>Phone Number	:</td><td><input type="text" class="form-control form-control-sm" name="billing_tel" value="9876543210"/></td>
				        </tr>
				        <tr>
				        	<td>Email	:</td><td><input type="text" class="form-control form-control-sm" name="billing_email" value="test@test.com"/></td>
				        </tr>
				        <tr style="display: none;">
				        	<td>Integration Type	:</td><td><input type="text" class="form-control form-control-sm" name="integration_type" value="iframe_normal"/></td>
				        </tr>
				        <tr>
				        	<td></td><td><INPUT TYPE="submit" class="btn btn-dark btn-sm" value="CheckOut"></td>
				        </tr>
		      		</table>
				</div>
			</div>
		</div>
    </form>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"></script>
</body>
</html>

In the above file, put the merchant id received from the API keys section. Please note that your access code and working key should be different for testing purposes and the merchant id will be the same. For the test environment, you should send an email to the support team of CCAvenue at support@ccavenue.com to activate the test environment.

After the activation, you will be able to use the CCAvenue testing payment gateway interface. If you run the above file in your local server then you will see the output on the browser as given below.

Step 8:- Now, open the ccavRequestHandler.php and put the access code, working key, and merchant data shared by CCAvenue, and change the production URL as given below.

$production_url='https://test.ccavenue.com/transaction/transaction.do?command=initiateTransaction&encRequest='.$encrypted_data.'&access_code='.$access_code;

Step 9:- Open ccavResponseHandler.php and put in the working key you received from CCAvenue as shown below.

<?php include('Crypto.php')?>
<?php

	error_reporting(0);
	
	$workingKey='working key';		//Working Key should be provided here.
	$encResponse=$_POST["encResp"];		//This is the response sent by the CCAvenue Server
	$rcvdString=decrypt($encResponse,$workingKey);		//Crypto Decryption used as per the specified working key.
	$order_status="";
	$decryptValues=explode('&', $rcvdString);
	$dataSize=sizeof($decryptValues);
	echo "<center>";
	for($i = 0; $i < $dataSize; $i++) 
	{
		$information=explode('=',$decryptValues[$i]);
		
		if($i==3)	$order_status=$information[1];

	}

	if($order_status==="Success")
	{
		echo "<br><b>Thank you for shopping with us. Your credit card has been charged and your transaction is successful. We will be shipping your order to you soon.<a href='https://localhost/myprojects/ccavenue/IFRAME_KIT/dataFrom.htm'>Back To Order Page</a></b>";
		
	}
	else if($order_status==="Aborted")
	{
		echo "<br><b>Thank you for shopping with us.We will keep you posted regarding the status of your order through e-mail</b>";
	
	}
	else if($order_status==="Failure")
	{
		echo "<br><b>Thank you for shopping with us.However,the transaction has been declined.</b>";
	}
	else
	{
		echo "<br><b>Security Error. Illegal access detected</b>";
	
	}

	echo "<br><br>";

	//print_r($dataSize);

	 echo "<table cellspacing=4 cellpadding=4>";
	 for($i = 0; $i < $dataSize; $i++) 
	 {
	 	$information=explode('=',$decryptValues[$i]);
	     	echo '<tr><td>'.$information[0].'</td><td>'.$information[1].'</td></tr>';
	 }

	 echo "</table><br>";
	 echo "</center>";
?>

Step 10:- Please do not forget to include the Crypto.php file in both the ccavRequestHandler.php and ccavResponseHandler.php as included because it encrypts the payment request sent to the bank and returns the response from the bank with the help of the decrypt() function. The Crypto.php file contains the below functions.

<?php
/*
* @param1 : Plain String
* @param2 : Working key provided by CCAvenue
* @return : Decrypted String
*/
function encrypt($plainText,$key)
{
	$key = hextobin(md5($key));
	$initVector = pack("C*", 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
	$openMode = openssl_encrypt($plainText, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $initVector);
	$encryptedText = bin2hex($openMode);
	return $encryptedText;
}

/*
* @param1 : Encrypted String
* @param2 : Working key provided by CCAvenue
* @return : Plain String
*/
function decrypt($encryptedText,$key)
{
	$key = hextobin(md5($key));
	$initVector = pack("C*", 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
	$encryptedText = hextobin($encryptedText);
	$decryptedText = openssl_decrypt($encryptedText, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $initVector);
	return $decryptedText;
}

function hextobin($hexString) 
 { 
	$length = strlen($hexString); 
	$binString="";   
	$count=0; 
	while($count<$length) 
	{       
	    $subString =substr($hexString,$count,2);           
	    $packedString = pack("H*",$subString); 
	    if ($count==0)
	    {
			$binString=$packedString;
	    } 
	    
	    else 
	    {
			$binString.=$packedString;
	    } 
	    
	    $count+=2; 
	} 
        return $binString; 
  } 
?>

Step 11:- After submission of consumer checkout, as shown above in step 7, you will see the CCAvenue payment interface as given below.

Now, select any of the payment methods and make payment and you will see the payment response as given below.

Step 12:- Now, click on return to merchant site as shown in the above screenshot and you will see the response as given below.

CCAvenue Payment Gateway Integration in PHP

Finally, the integration is done.

Also read, Razorpay payment gateway integration in PHP

Now, if you want to save the transaction details in the MySQL database then follow the below steps.

Establish the database connection as given below.

disconnect.php

<?php
$servername='localhost';
$username="root";
$password="";
try
{
	$con=new PDO("mysql:host=$servername;dbname=php_db",$username,$password);
	$con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
	//echo 'connected';
}
catch(PDOException $e)
{
	echo '<br>'.$e->getMessage();
}
?>

Create a table in your MySQL database as given below.

DDL information of the table

CREATE TABLE IF NOT EXISTS ccavenue_transaction_details (
id int NOT NULL AUTO_INCREMENT,
order_id varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
tracking_id varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
bank_ref_no varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
order_status varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
failure_message varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
payment_mode varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
status_message varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
currency text COLLATE utf8mb4_unicode_ci NOT NULL,
amount varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
billing_tel varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
billing_email varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
transaction_date varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Open the ccavResponseHandler.php and modify the file as given below.

<?php include('Crypto.php')?>
<?php include ('dbconnect.php');?>
<?php
	error_reporting(0);

	$workingKey='working key';		//Working Key should be provided here.
	$encResponse=$_POST["encResp"];		//This is the response sent by the CCAvenue Server
	$rcvdString=decrypt($encResponse,$workingKey);		//Crypto Decryption used as per the specified working key.
	$order_status="";
	$decryptValues=explode('&', $rcvdString);
	$dataSize=sizeof($decryptValues);
	for($i = 0; $i < $dataSize; $i++) 
	{
		$information=explode('=',$decryptValues[$i]);
		if($i==3)	$order_status=$information[1];
		if($i==0)	$order_id=$information[1];
		if($i==1)	$tracking_id=$information[1];
		if($i==2)	$bank_ref_no=$information[1];
		if($i==4)	$failure_message=$information[1];
		if($i==5)	$payment_mode=$information[1];
		if($i==8)	$status_message=$information[1];
		if($i==9)	$currency=$information[1];
		if($i==10)	$amount=$information[1];
		if($i==17)	$billing_tel=$information[1];
		if($i==18)	$billing_email=$information[1];
		if($i==40)	$transaction_date=$information[1];

	}

	if($order_status==="Success")
	{
		echo "<br><b>Thank you for shopping with us. Your credit card has been charged and your transaction is successful. We will be shipping your order to you soon.<a href='https://localhost/myprojects/ccavenue/IFRAME_KIT/dataFrom.htm'>Back To Order Page</a></b>";

		//insert data into mysql database
		 $sql = "INSERT INTO ccavenue_transaction_details(order_id,tracking_id,bank_ref_no,order_status,failure_message,payment_mode,status_message,currency,amount,billing_tel,billing_email,transaction_date) values('$order_id','$tracking_id','$bank_ref_no','$order_status','$failure_message','$payment_mode','$status_message','$currency','$amount','$billing_tel','$billing_email','$transaction_date')";
		 $stmt = $con->prepare($sql);
		 $stmt->execute();
		
	}
	else if($order_status==="Aborted")
	{
		echo "<br><b>Thank you for shopping with us.We will keep you posted regarding the status of your order through e-mail</b>";
	
	}
	else if($order_status==="Failure")
	{
		echo "<br><b>Thank you for shopping with us.However,the transaction has been declined.</b>";
	}
	else
	{
		echo "<br><b>Security Error. Illegal access detected</b>";
	
	}

	echo "<br><br>";
?>

In the above file, you have noticed that if the order status is a success then you can insert the transaction-related data such as order id, tracking id, bank ref number and payment mode, etc. in your database.

Conclusion:- I hope this tutorial will help you to understand the concept. If there is any doubt then please leave a comment below.


Leave a Comment

parlay

RATU311

KUPU178

RATU311

RATU311

RATU311

RATU311

RATU311

KUPU178

KUPU178

KUPU178

RATU311

RATU311

RATU311

CERI188

CERI188

CERI188

KUPU178

RATU311: Alternatif karnpuracollege

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

KUPU178

RATU311

RATU311

RATU311

judi bola

live casino

sv388

sv388

sabung ayam online

sabung ayam online

Thor311 Terbaru

CERI188: Taruhan Bola Sbobet

THOR311 DEMO SLOT

THOR311 MAHJONG

RATU311: BONUS SABUNG AYAM

CERI188

parlay

RATU311

KUPU178

RATU311

THOR311

RATU311

RATU311

RATU311

RATU311

RATU311

CERI188

CERI188: Masuk Akun Slot Super Cepat

KUPU178: Slot Online Mahjong Bet 200

THOR311 PRO

THOR311

CERI188

CERI188

CERI188

CERI188

CERI188

CERI188

CERI188

CERI188

CERI188

THOR311

HOKI311

HOKI311

RATU311

RATU311

KUPU178

THOR311

KUPU178

THOR311

RATU311

HOKI311

KUPU178

KUPU178

RATU311

THOR311 TOTO4D

KUPU178

Live Casino Roullate

RATU311

RATU311

RATU311

RATU311

THOR311

THOR311

THOR311

RATU311

CERI188

DAFTAR KUPU178

LINK DAFTAR CERI188

CERI188

APK KUPU178

KUPU178

CERI188

CERI188

RATU311

KUPU178

THOR311 DOMINO QQ

judi bola online

Mix Parlay

CERI188

CERI188

CERI188

RATU311

live casino online

RATU311

Mix Parlay

Sabung Ayam Online

Slot PG Soft

CERI188

RATU311

RATU311

CERI188

THOR311

CERI188

THOR311

Game Thor311

THOR311

HOKI311

live casino

sv388

HOKI311

HOKI311

slot mahjong

Thor311 Alternatif

RATU311

HOKI311

HOKI311

HOKI311

HOKI311

CERI188

THOR311 RESMI

THOR311 AKSES

THOR311

THOR311 RTP

THOR311

parlay

HOKI311

THOR311

Thor311 Aplikasi

RATU311 NONTON BOLA

CERI188 Link RTP LIVE

THOR311

Thor311 Live Casino

CERI188

akses VIP THOR311

THOR311

link daftar THOR311

THOR311

situs thor311

RATU311

HOKI311 Link SABUNG AYAM RESMI

HOKI311 Link QRIS EWALLET

RATU311

LINK CERI188

parlay

HOKI311 Link RTP Gacor

THOR311

HOKI311 Link Apk Resmi

CERI188

KUPU178 Link Daftar

CERI188

CERI188

CERI188

CERI188

CERI188

HOKI311

RATU311

RATU311

HOKI311 Lapak Arena Slot

RATU311 judi bola

HOKI311 Link Spaceman Online

HOKI311 Link Daftar Resmi

CERI188 Toto SGP Online

KUPU178

HOKI311 TEMBAK IKAN ONLINE

KUPU178

HOKI311 Link Login Alternatif

HOKI311 Live Casino Online

HOKI311 Situs Slot Gacor

THOR311

THOR311

situs judi bola

Ceri188 Game Online

CERI188

link login CERI188

link login CERI188

CERI188

THOR311

HOKI311

HOKI311

CERI188

parlay

THOR311

RATU311

HOKI311

HOKI311

HOKI311

RATU311

THOR311

KUPU178

HOKI311

KUPU178

KUPU178

HOKI311

parlay

slot gacor

kupu178 link alternatif

kupu178 slot

kupu178 daftar

kupu178 login

link daftar kupu178

judi bola

HOKI311

RATU311

link alternatif RATU311

Link daftar RATU311

link login RATU311

RATU311

RATU311

KUPU178

KUPU178

THOR311

KUPU178

KUPU178

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

THOR311

KUPU178

KUPU178

HOKI311

THOR311

KUPU178

THOR311

THOR311

slot thailand

judi bola

THOR311

THOR311

KUPU178

THOR311

THOR311

slot gacor

slot gacor

yakuza303

unobet77

slot gacor

slot gacor

RATU311

parlay

parlay

slot gacor

parlay

THOR311