CCAvenue CCNon-Seamless PG Integration
Date Posted: 22 Nov 2018

Prerequisite  :PHP Basics

SEAMLESS INTEGRATION

This is for Large Scale Product and organisations who have good finance team to jolt down the financials with the Banks for the DIRECT integrations and with PG Aggregators for the INDIRECT integrations and a good Dev team to integrate it neatly with your site/product.

If you have a Dev team for PG Integrations which can integrate multiple PGs for CREDIT/DEBIT and NETBANKING then you should go for SEAMLESS INTEGRATION where the payment options can be designed as per merchant’s choice and the look and feel can be retained as per the flavor of the website.

The seamless integration allows you to have less dependency on the PGs because you can change the PG on the run time to perform a payment transaction based on the success rate For eg. You have PAYU PG and CCAvenue PG as seamless integration for Credit/Debit Card if PAYU PG is down/fluctuating then you can always choose CCAvenue PG based on you configuration since the control is still at your (merchant’s end)

NON-SEAMLESS INTEGRATION

Based on the flexibility and scalibility of the solution i suggest Small Scalle Business to use Non-Seamless Integration like PAYU or CCAVenue because in this case merchant website just do one integration and rest is taken care at PG’s end from payment collection to completion.

Before following the step you can register with ccaveneue and get the necessary merchant id, access token, working keys. Please follow the steps and integrate the payment gateway option in your website.

Step 1: Create new file dataFrom.html and paste the following code.

<html>
<head>

  window.onload = function() {
    var d = new Date().getTime();
    document.getElementById("tid").value = d;
  };

</head>
<body>
  <form method="post" name="customerData" action="ccavRequestHandler.php">
    <table width="40%" height="100" border='1' align="center"><caption><font size="4" color="blue"><b>Integration Kit</b></font></caption></table>
      <table width="40%" height="100" border='1' align="center">
        <tr>
          <td>Parameter Name:</td><td>Parameter Value:</td>
        </tr>
        <tr>
          <td colspan="2"> Compulsory information</td>
        </tr>
        <tr>
          <td>TID	:</td><td><input type="text" name="tid" id="tid" readonly /></td>
        </tr>
        <tr>
          <td>Merchant Id	:</td><td><input type="text" name="merchant_id" value=""/></td>
        </tr>
        <tr>
          <td>Order Id	:</td><td><input type="text" name="order_id" value="123654789"/></td>
        </tr>
        <tr>
          <td>Amount	:</td><td><input type="text" name="amount" value="1.00"/></td>
        </tr>
        <tr>
          <td>Currency	:</td><td><input type="text" name="currency" value="INR"/></td>
        </tr>
        <tr>
          <td>Redirect URL	:</td><td><input type="text" name="redirect_url" value="http://localhost/Non_Seamless_kit/ccavResponseHandler.php"/></td>
        </tr>
       	<tr>
       		<td>Cancel URL	:</td><td><input type="text" name="cancel_url" value="http://localhost/Non_Seamless_kit/ccavResponseHandler.php"/></td>
       	</tr>
       	<tr>
          <td>Language	:</td><td><input type="text" name="language" value="EN"/></td>
        </tr>
         	<tr>
         		<td colspan="2">Billing information(optional):</td>
         	</tr>
            <tr>
            	<td>Billing Name	:</td><td><input type="text" name="billing_name" value="Charli"/></td>
            </tr>
            <tr>
            	<td>Billing Address	:</td><td><input type="text" name="billing_address" value="Room no 1101, near Railway station Ambad"/></td>
            </tr>
            <tr>
            	<td>Billing City	:</td><td><input type="text" name="billing_city" value="Indore"/></td>
            </tr>
            <tr>
            	<td>Billing State	:</td><td><input type="text" name="billing_state" value="MP"/></td>
            </tr>
            <tr>
            	<td>Billing Zip	:</td><td><input type="text" name="billing_zip" value="425001"/></td>
            </tr>
            <tr>
            	<td>Billing Country	:</td><td><input type="text" name="billing_country" value="India"/></td>
            </tr>
            <tr>
            	<td>Billing Tel	:</td><td><input type="text" name="billing_tel" value="9876543210"/></td>
            </tr>
            <tr>
            	<td>Billing Email	:</td><td><input type="text" name="billing_email" value="test@test.com"/></td>
            </tr>
            <tr>
            	<td colspan="2">Shipping information(optional)</td>
            </tr>
            <tr>
            	<td>Shipping Name	:</td><td><input type="text" name="delivery_name" value="Chaplin"/></td>
            </tr>
            <tr>
            	<td>Shipping Address	:</td><td><input type="text" name="delivery_address" value="room no.701 near bus stand"/></td>
            </tr>
            <tr>
            	<td>shipping City	:</td><td><input type="text" name="delivery_city" value="Hyderabad"/></td>
            </tr>
            <tr>
            	<td>shipping State	:</td><td><input type="text" name="delivery_state" value="Andhra"/></td>
            </tr>
            <tr>
            	<td>shipping Zip	:</td><td><input type="text" name="delivery_zip" value="425001"/></td>
            </tr>
            <tr>
            	<td>shipping Country	:</td><td><input type="text" name="delivery_country" value="India"/></td>
            </tr>
            <tr>
            	<td>Shipping Tel	:</td><td><input type="text" name="delivery_tel" value="9876543210"/></td>
            </tr>
            <tr>
            	<td>Merchant Param1	:</td><td><input type="text" name="merchant_param1" value="additional Info."/></td>
            </tr>
            <tr>
            	<td>Merchant Param2	:</td><td><input type="text" name="merchant_param2" value="additional Info."/></td>
            </tr>
        <tr>
          <td>Merchant Param3	:</td><td><input type="text" name="merchant_param3" value="additional Info."/></td>
        </tr>
        <tr>
          <td>Merchant Param4	:</td><td><input type="text" name="merchant_param4" value="additional Info."/></td>
        </tr>
        <tr>
          <td>Merchant Param5	:</td><td><input type="text" name="merchant_param5" value="additional Info."/></td>
        </tr>
        <tr>
          <td>Promo Code	:</td><td><input type="text" name="promo_code" value=""/></td>
        </tr>
        <tr>
          <td>Vault Info.	:</td><td><input type="text" name="customer_identifier" value=""/></td>
        </tr>
            <tr>
            	<td></td><td><INPUT TYPE="submit" value="CheckOut"></td>
            </tr>
        	</table>
        </form>
  </body>
</html>


Step 2: Create new file Crypto.php and paste the following code. This code included in the ccavRequestHandler.php and  ccavResponseHandler.php.

<?php

  error_reporting(0);

  function encrypt($plainText,$key)
  {
    $secretKey = hextobin(md5($key));
    $initVector = pack("C*", 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
    	$openMode = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '','cbc', '');
    	$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, 'cbc');
    $plainPad = pkcs5_pad($plainText, $blockSize);
    	if (mcrypt_generic_init($openMode, $secretKey, $initVector) != -1) 
    {
          $encryptedText = mcrypt_generic($openMode, $plainPad);
        	      mcrypt_generic_deinit($openMode);
          			
    } 
    return bin2hex($encryptedText);
  }

  function decrypt($encryptedText,$key)
  {
    $secretKey = 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);
    	$openMode = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '','cbc', '');
    mcrypt_generic_init($openMode, $secretKey, $initVector);
    $decryptedText = mdecrypt_generic($openMode, $encryptedText);
    $decryptedText = rtrim($decryptedText, "\0");
   	mcrypt_generic_deinit($openMode);
    return $decryptedText;
    
  }
  //*********** Padding Function *********************

   function pkcs5_pad ($plainText, $blockSize)
  {
      $pad = $blockSize - (strlen($plainText) % $blockSize);
      return $plainText . str_repeat(chr($pad), $pad);
  }

  //********** Hexadecimal to Binary function for php 4.0 version ********

  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 3: Create new file ccavRequestHandler.php and paste the following code.

<html>
<head>
<title> Non-Seamless-kit</title>
</head>
<body>
<center>

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

  error_reporting(0);
  
  $merchant_data='';
  $working_key='';//Shared by CCAVENUES
  $access_code='';//Shared by CCAVENUES
  
  foreach ($_POST as $key => $value){
    $merchant_data.=$key.'='.$value.'&';
  }

  $encrypted_data=encrypt($merchant_data,$working_key); // Method for encrypting the data.

?>
<form method="post" name="redirect" action="https://secure.ccavenue.com/transaction/transaction.do?command=initiateTransaction"> 
<?php
echo "<input type=hidden name=encRequest value=$encrypted_data>";
echo "<input type=hidden name=access_code value=$access_code>";
?>
</form>
</center>
document.redirect.submit();
</body>
</html>

In the above code you can add the your working_key,access_code. There are two type form action url available

1) https://secure.ccavenue.com/transaction/transaction.do?command=initiateTransaction- This production mode

2) https://test.ccavenue.com/transaction/transaction.do?command=initiateTransaction- Testing mode.

If you want use testing mode you need whitelist the your ip address from ccavenue team.

Step 4: Create new file ccavReponseHandler.php and paste the following code.

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

  error_reporting(0);
  
  $workingKey='';		//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>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.";
    
  }
  else if($order_status==="Aborted")
  {
    echo "<br>Thank you for shopping with us.We will keep you posted regarding the status of your order through e-mail";
  
  }
  else if($order_status==="Failure")
  {
    echo "<br>Thank you for shopping with us.However,the transaction has been declined.";
  }
  else
  {
    echo "<br>Security Error. Illegal access detected";
  
  }

  echo "<br><br>";

  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>";
?>

In the above code you can add the your working_key. (Which was provided by ccavenue upon registration)

Once running the project must pass the redirection url, cancel url and merchant id.

If you are facing any problems, please contact to the ccavenue team and they will help you.

 

 

 

 

 

 

Leave a Reply