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

hoki311

hoki311

hoki311

hoki311

hoki311

hoki311

hoki311

hoki311

hoki311

hoki311

hoki311

KUPU178

KUPU178

KUPU178

hoki311

hoki311

hoki311

hoki311

hoki311

RATU311

KUPU178

HOKI311

THOR311

THOR311

login hoki311

daftar hoki311

hoki 311

link hoki311

hoki311

RATU311

hoki311

hoki311

hoki311

hoki311

KUPU178

thor311

thor311

thor311

ceri188

ceri188

KUPU178

ceri188

ceri188

link ceri188

KUPU178

KUPU178

KUPU178

kupu178

ceri188

ceri188

ceri188

ceri188

ceri188

THOR311

ceri188

games online ceri188

link login ceri188

ceri188

thor311

RATU311

RATU311

RATU311

sbobet88

sbobet

parlay

mix parlay

judi bola online

thor311

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

THOR311

THOR311

THOR311

THOR311

thor311 RTP

thor311

slot gacor

kupu178

slot mahjong

ceri188

sabung ayam

ratu311

THOR311

THOR311

THOR311

thor311 aplikasi

ratu311 sabung ayam

slot gacor

RATU311

ceri188

ceri188

ceri188

ceri188

KUPU178

RATU311

RATU311

RATU311

RATU311

RATU311

RATU311

ceri188

ceri188

ceri188 alternatif

ceri188

link ceri188

ceri188

RATU311

THOR311

THOR311

THOR311

RATU311

RATU311

RATU311

Togel Online

KUPU178

Situs Togel

KUPU178

ceri188

ceri188

KUPU178

KUPU178

ceri188

ceri188

ratu311

ceri188

ceri188

ratu311

KUPU178

THOR311

ceri188

ceri188

THOR311

THOR311

RATU311

thor311 tajen bali

thor311 alternatif

situs toto4d

thor311 toto4d

thor311 akses

ceri188

daftar ceri188

cery188

ceri188

slot gacor

kupu 178

kupu178

ceri1888

ceri188

slot online

hoki311

togel online

ceri188

ding dong

ratu311

slot gacor

kupu178

live casino

kupu178

mix parlay

ceri188

judi bola online

thor311 slot

THOR311

RATU311

KUPU178

THOR311

ceri188

ratu311

slot online

hoki311

kupu178

togel online

kupu178

slot gacor

ceri188

judi bola online

ceri188

ratu311

kupu178

RATU311

RATU311

live casino roullete

ceri188

slot pg soft

kupu178

KUPU178

THOR311

RATU311

KUPU178

THOR311

THOR311

thor311 domino qq

thor311 akses

thor dingdong

ceri188

ceri188

kupu178

kupu178

togel

kupu178

mix parlay

ceri188

slot online

kupu178

THOR311

THOR311

KUPU178

kupu178

hoki311

togel online

kupu178

ceri188

ceri188

www.vrcorporate.in

phbalance.vn

togel hongkong

kupu178

slot gacor

kupu178

kupu178

ceri188

kupu178

KUPU178

RATU311

slot online

kupu178

THOR311

KUPU178

slot mahjong ways

hoki311

slot gacor

ceri188

kupu178

Casino Baccarat Online

kupu178

kupu178

ceri188

toto macau

KUPU178

Slot Gacor

KUPU178

RATU311

Mahjong ways

KUPU178

KUPU178

KUPU178

RATU311

RATU311

Toto Togel

KUPU178

CERI188

Slot Sweet Bonanza 2500

KUPU178

RATU311

KUPU178 X SLOT777

judi bola online

THOR311

KUPU178 SLOT TERPERCAYA

KUPU178 TOGEL

TOTO 4D MACAU

KUPU178

THOR311

HOKI311

KUPU178

Slot Mahjong Ways

KUPU178

CERI188

Slot Online Resmi

KUPU178

RATU311 SLOT ONLINE

KUPU178

KUPU178: Link Akses Resmi

KUPU178: Strategi Menang Di Game Live Casino

KUPU178

KUPU178: Minimal 200 Rupiah

THOR311

THOR311

THOR311

THOR311

THOR311

KUPU178

Slot Thailand

CERI188

CERI188

THOR311 RTP

RATU311

CERI188

KUPU178 TOTO SLOT

CERI188 TOTO Singapore

THOR311

CERI188

RATU311: Alternatif karnpuracollege

Thor311 Terbaru

THOR311 MAHJONG

RATU311: BONUS SABUNG AYAM

CERI188: Masuk Akun Slot Super Cepat

THOR311

HOKI311

HOKI311

RATU311

HOKI311

KUPU178

RATU311

RATU311

THOR311

CERI188

CERI188

RATU311

RATU311

RATU311

Game Thor311

HOKI311

HOKI311

RATU311

HOKI311

HOKI311

RATU311 NONTON BOLA

HOKI311 Link QRIS EWALLET

RATU311

HOKI311 Link Apk Resmi

RATU311 judi bola

KUPU178

HOKI311

RATU311

THOR311

HOKI311

KUPU178

KUPU178

RATU311

RATU311

KUPU178

THOR311

KUPU178

RATU311

THOR311