cc avanue integration with php

composer require kishanio/ccavenue
OR
# Login to ccavanue account and goto resources / web integrated kit option.
# Click download integration kit.
# Extract zip file and go to CUSTOM_CHECKOUT_FORM_KIT folder and 
open dataform.htm file in code editor.
# Rename dataform.htm into checkout.php.
# https://dashboard.ccavenue.com/settings/apiKeys.do go for cred.

checkout.php

<?php 
   require_once "config.php"; 
?> 

<h1>CCAvenue Payment Gateway Intgration</h1> 
<div id="ccav-payment-form"> 

<form name="frmPayment" action="ccavRequestHandler.php" method="POST"> 
  <input type="hidden" name="merchant_id" value="<?php echo CCA_MERCHANT_ID; ?>"> 
  <input type="hidden" name="language" value="EN"> 
  <input type="hidden" name="amount" value="1"> 
  <input type="hidden" name="currency" value="INR"> 
  <input type="hidden" name="redirect_url" value="http://youdomain.com/payment-response.php"> 
  <input type="hidden" name="cancel_url" value="http://youdomain.com/payment-cancel.php"> 

<div> 
  <input type="text" name="billing_name" value="" class="form-field" Placeholder="Billing Name"> 
  <input type="text" name="billing_address" value="" class="form-field" Placeholder="Billing Address"> 
</div> 

<div> 
   <input type="text" name="billing_state" value="" class="form-field" Placeholder="State"> 
   <input type="text" name="billing_zip" value="" class="form-field" Placeholder="Zipcode">
</div> 

<div> 
  <input type="text" name="billing_country" value="" class="form-field" Placeholder="Country"> 
  <input type="text" name="billing_tel" value="" class="form-field" Placeholder="Phone"> 
</div> 

<div> 
   <input type="text" name="billing_email" value="" class="form-field" Placeholder="Email"> 
</div> 

<div> 
   <button class="btn-payment" type="submit">Pay Now</button> 
</div> 

 </form> 
  </div>
ccavRequestHandler.php

<html>
<head>
<title> CCAvenue Payment Gateway Integration kit</title>
</head>
<body>
<center>

<?php include('Crypto.php')?>
<?php require_once "config.php"; ?>
<?php 

	error_reporting(0);
	
	$merchant_data='';
	$working_key = CCA_WORKING_KEY;
	$access_code = CCA_ACCESS_CODE;
	
	foreach ($_POST as $key => $value){
		$merchant_data.=$key.'='.$value.'&';
	}
	$merchant_data .= "order_id=".$orderId;
	
	$encrypted_data=encrypt($merchant_data,$working_key);

?>
<form method="post" name="redirect" 
action="https://test.ccavenue.com/transaction/transaction.do?command=initiateTransaction"> 
<!-- here set the path of test or live ccavanue -->

<?php
echo "<input type=hidden name=encRequest value=$encrypted_data>";
echo "<input type=hidden name=access_code value=$access_code>";
?>
</form>
</center>
<script language='javascript'>document.redirect.submit();</script>
</body>
</html>

This file contains the functions to encrypt or decrypt the payment information posted via the HTML form. It also includes util functions for padding and conversion.

crypto.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;
}
?>
For going live and use the CCAvenue secure production environment, the
https://test.ccavenue.com target should be replaced with 
https://secure.ccavenue.com.

Note: This file uses the deprecated function mcrypt_ function. These functions are deprecated as of PHP version 5.5.0 and it will not work in PHP 7. If you want a alternate for the encrypt decrypt utilities to be supported in latest PHP version, the following code will be helpful.

<?php 

  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); 
    $encryptedText = openssl_encrypt($plainText, "AES-128-CBC", $secretKey, OPENSSL_RAW_DATA, $initVector); 
    $encryptedText = bin2hex($encryptedText); 
    return $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); 
    $decryptedText = openssl_decrypt($encryptedText,"AES-128-CBC", $secretKey, OPENSSL_RAW_DATA, $initVector); 
    return $decryptedText; 
  } 
  ... 
  ... 

?>
config.php <?php define("CCA_MERCHANT_ID", "YOUR_MERCHANT_ID"); define("CCA_ACCESS_CODE", "YOUR_ACCESS CODE"); define("CCA_WORKING_KEY", "YOUR WORKING KEY");

 

 

Leave a Reply