Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

CCAvenue integration module convert zencart module to oscommerce


radhavallabh

Recommended Posts

Hi, I run a store http://www.krishnastores.com

I am integrating CCavnue module to my payments module section but it very scarcely coded-

Problems

1. It does not detect the converted currency from USD to INR but goes ahead with USD instead,

2. It does not create or update the order after confirmation on my oscommerce admin backend

3. No sort order given

4. Way feeble than Paypal Standard module coding

 

Please Please help me fix this code as zencart coding is much more advanced for CCavenue-

 

I am pasting code below that comes by default with the oscommerce

<?php
/*
$Id: cavenue.php,v 1.25 2002/11/01 05:04:31 hpdl Exp $
osCommerce, Open Source E-Commerce Solutions
[url="http://www.oscommerce.com"]http://www.oscommerce.com[/url]
Copyright © 2002 osCommerce
Released under the GNU General Public License
Modified By Praful Kumar
*/

class cavenue
{
var $code, $title, $description, $enabled;

// class constructor
function cavenue()
{
 $this->code = 'cavenue';
 $this->title = MODULE_PAYMENT_CCAVENUE_TEXT_TITLE;
 $this->description = MODULE_PAYMENT_CCAVENUE_TEXT_DESCRIPTION;
 $this->enabled = MODULE_PAYMENT_CCAVENUE_STATUS;
 $this->sort_order = MODULE_PAYMENT_CCAVENUE_SORT_ORDER;

$this->form_action_url = 'https://www.ccavenue.com/shopzone/cc_details.jsp';

}

// class methods
function javascript_validation()
{
 return false;
}

function selection()
{
 return array('id' => $this->code,
			 'module' => $this->title);
}

function pre_confirmation_check()
{
 return false;
}

function confirmation()
{
return false;

}

function process_button()
{
global $order, $currencies,$customer_id, $MerchantId, $Amount, $OrderId, $Url, $WorkingKey, $Checksum
;

$MerchantId = MODULE_PAYMENT_CCAVENUE_MERCHANT_ID;
$Amount = $order->info['total'];
$OrderId = $customer_id . '-' . date('Ymdhis');
$Url = tep_href_link(FILENAME_CHECKOUT_PROCESS,'','SSL',false);
$pattern='http://www\.';

if(!(Eregi($pattern,$Url,$reg)))
eregi_replace('http://', $pattern, $Url);
$WorkingKey = MODULE_PAYMENT_CCAVENUE_WORKING_KEY;
$str ="$MerchantId|$OrderId|$Amount|$Url|$WorkingKey";
$adler = 1;
$BASE = 65521 ;

$s1 = $adler & 0xffff ;
$s2 = ($adler >> 16) & 0xffff;
for($i = 0 ; $i < strlen($str) ; $i++)
{
	$s1 = ($s1 + Ord($str[$i])) % $BASE ;
	$s2 = ($s2 + $s1) % $BASE ;
		//echo "s1 : $s1 <BR> s2 : $s2 <BR>";

}

$str = $s2;
$num = 16;

$str = DecBin($str);

for( $i = 0 ; $i < (64 - strlen($str)) ; $i++)
	$str = "0".$str ;

for($i = 0 ; $i < $num ; $i++)
{
	$str = $str."0";
	$str = substr($str , 1 ) ;
	//echo "str : $str <BR>";
}
$num=$str;
for ($n = 0 ; $n < strlen($num) ; $n++)
{
 $temp = $num[$n] ;
 $dec = $dec + $temp*pow(2 , strlen($num) - $n - 1);
}
$Checksum = $dec + $s1;
$AuthDesc = 'N';

///// want to bypass customer billing info to the CCAvenue page.
$addQuery = tep_db_query("select ab.customers_id,
				ab.entry_postcode,
				ab.entry_city,
				ab.entry_state, 	
				ab.entry_country_id,										
				c.countries_name,
				cu.customers_telephone
				from " . TABLE_COUNTRIES . " c,
					 " . TABLE_CUSTOMERS . " cu,
					 " . TABLE_ADDRESS_BOOK . " ab
				where c.countries_id = ab.entry_country_id
				and cu.customers_id = ab.customers_id
				and cu.customers_id = " . $customer_id );

$addRow = tep_db_fetch_array($addQuery);

//echo $addResult . " <br>" . $addRow;

$cust_city = $addRow['entry_city'];
$cust_tele = $addRow['customers_telephone'];
$cust_state = $addRow['entry_state'];
$cust_zip = $addRow['entry_postcode'];
$cust_country = $addRow['countries_name'];

//echo "<br>Return URL: " . $Url;
///
 $process_button_string = tep_draw_hidden_field('Merchant_Id', $MerchantId) .
			 tep_draw_hidden_field('Order_Id', $OrderId) .
			 tep_draw_hidden_field('Amount', $Amount) .
			 tep_draw_hidden_field('billing_cust_name', $order->customer['firstname'].' '. $order->customer['lastname']) .
				tep_draw_hidden_field('billing_cust_address', $order->billing['street_address']) .
				tep_draw_hidden_field('billing_cust_country', $cust_country) .
				tep_draw_hidden_field('billing_cust_email', $order->customer['email_address']) .

				tep_draw_hidden_field('billing_cust_city', $cust_city) .					
				tep_draw_hidden_field('billing_cust_tel', $cust_tele) .
				tep_draw_hidden_field('billing_cust_state', $cust_state) .					
				tep_draw_hidden_field('billing_zip_code', $cust_zip) .
				tep_draw_hidden_field('billing_cust_notes', $order->info['comments']) .

				tep_draw_hidden_field('Checksum',$Checksum) .
				tep_draw_hidden_field('delivery_cust_name', $order->delivery['firstname'].' '.$order->delivery['lastname']) .
				tep_draw_hidden_field('delivery_cust_address', $order->delivery['street_address']) .
				tep_draw_hidden_field('delivery_cust_country', $cust_country) .					
				tep_draw_hidden_field('Redirect_Url',$Url);					

 return $process_button_string;
}

function before_process()
{
global $HTTP_POST_VARS, $customer_id, $MerchantId, $Amount, $OrderId, $WorkingKey, $Checksum,$AuthDesc,$sum
;

$MerchantId = $HTTP_POST_VARS['Merchant_Id'];
$Amount = $HTTP_POST_VARS['Amount'];
$OrderId = $HTTP_POST_VARS['Order_Id'];
$Checksum = $HTTP_POST_VARS['Checksum'];
$AuthDesc = $HTTP_POST_VARS['AuthDesc'];
$WorkingKey = MODULE_PAYMENT_CCAVENUE_WORKING_KEY;
$str ="$MerchantId|$OrderId|$Amount|$AuthDesc|$WorkingKey";
$adler = 1;
$BASE = 65521 ;

$s1 = $adler & 0xffff ;
$s2 = ($adler >> 16) & 0xffff;
for($i = 0 ; $i < strlen($str) ; $i++)
{
	$s1 = ($s1 + Ord($str[$i])) % $BASE ;
	$s2 = ($s2 + $s1) % $BASE ;
		//echo "s1 : $s1 <BR> s2 : $s2 <BR>";

}

$str = $s2;
$num = 16;

$str = DecBin($str);

for( $i = 0 ; $i < (64 - strlen($str)) ; $i++)
	$str = "0".$str ;

for($i = 0 ; $i < $num ; $i++)
{
	$str = $str."0";
	$str = substr($str , 1 ) ;
	//echo "str : $str <BR>";
}
$num=$str;
for ($n = 0 ; $n < strlen($num) ; $n++)
{
 $temp = $num[$n] ;
 $dec = $dec + $temp*pow(2 , strlen($num) - $n - 1);
}
$sum = $dec + $s1;
if($sum == $Checksum)
	$Checksum = 'true' ;
else
	$Checksum = 'false';
if($Checksum != 'true')
{
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CCAVENUE_ALERT_ERROR_MESSAGE), 'SSL', true, false));
}

if($Checksum =='true' && $AuthDesc == 'N')
{

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CCAVENUE_TEXT_ERROR_MESSAGE), 'SSL', true, false));
}


}

function after_process()
{
 return false;
}


function output_error()
{
global $HTTP_GET_VARS;

$output_error_string = '<table border="0" cellspacing="0" cellpadding="0" width="100%">' . "\n" .
						 ' <tr>' . "\n" .
						 '	<td class="main"> <font color="#FF0000"><b>' . MODULE_PAYMENT_CCAVENUE_TEXT_ERROR . '</b></font><br> ' . MODULE_PAYMENT_CCAVENUE_TEXT_ERROR_MESSAGE . ' </td>' . "\n" .
						 ' </tr>' . "\n" .
						 '</table>' . "\n";

 return $output_error_string;
}



function check()
{
if (!isset($this->_check))
{
$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_CCAVENUE_STATUS'");
$this->_check = tep_db_num_rows($check_query);
}
return $this->_check;
}

function install()
{
 tep_db_query("insert into " . TABLE_CONFIGURATION .
							 " (configuration_title,
							 configuration_key,
							 configuration_value,
							 configuration_description,
							 configuration_group_id,
							 sort_order, date_added)
							 values ('Enable CCAVENUE Module',
							 		 'MODULE_PAYMENT_CCAVENUE_STATUS',
									 '1',
									 'Do you want to accept CCAVENUE payments?',
									 '6',
									 '0',
										now())");
 tep_db_query("insert into " . TABLE_CONFIGURATION .
							 " (configuration_title,
							 configuration_key,
							 configuration_value,
							 configuration_description,
							 configuration_group_id,
							 sort_order, date_added)
							 values ('Merchant Id',
							 		 'MODULE_PAYMENT_CCAVENUE_MERCHANT_ID',
									 'CCAvenueMerchantID',
									 'The Merchant Id to use for the CCAVENUE service',
									 '6',
									 '1',
									 now())");

tep_db_query("insert into " . TABLE_CONFIGURATION .
					 " (configuration_title,
						 configuration_key,
						 configuration_value,
						 configuration_description,
						 configuration_group_id,
						 sort_order, date_added)
						 values ('WorkingKey',
						 		 'MODULE_PAYMENT_CCAVENUE_WORKING_KEY',
								 '',
								 'put in the 32 bit alphanumeric key.Please note that get this key ,login to your CCAvenue merchant account and visit the \"Generate Working Key\" section at the \"Settings & Options\" page.',
								 '6',
								 '2',
								 now())");

tep_db_query("insert into " . TABLE_CONFIGURATION .
				 " (configuration_title,
					configuration_key,
					configuration_value,
 					configuration_description,
					 configuration_group_id,
					sort_order, date_added)
					values ('Sort order of display.',
							'MODULE_PAYMENT_CCAVENUE_SORT_ORDER',
							 '0',
							 'Sort order of display. Lowest is displayed first.',
							 '6',
							 '0',
							 now())");									
}

function remove()
{
 $keys = '';
 $keys_array = $this->keys();
 for ($i=0; $i<sizeof($keys_array); $i++)
 {
	$keys .= "'" . $keys_array[$i] . "',";
 }
 $keys = substr($keys, 0, -1);

 tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in (" . $keys . ")");
}

 function keys()
 {
 		return array('MODULE_PAYMENT_CCAVENUE_STATUS', 'MODULE_PAYMENT_CCAVENUE_MERCHANT_ID','MODULE_PAYMENT_CCAVENUE_WORKING_KEY', 'MODULE_PAYMENT_CCAVENUE_SORT_ORDER');
}
}
?>

 

 

Now I am pasting the zen cart code

<?php

class ccavenue {
var $code, $title, $description, $enabled;

////////////////////////////////////////////////////
// Class constructor -> initialize class variables.
// Sets the class code, description, and status.
////////////////////////////////////////////////////


function ccavenue() {
 global $order;

 $this->code = 'ccavenue';
 $this->title = MODULE_PAYMENT_CCAVENUE_TEXT_TITLE;
 $this->description = MODULE_PAYMENT_CCAVENUE_TEXT_DESCRIPTION;
 $this->sort_order = MODULE_PAYMENT_CCAVENUE_SORT_ORDER;
 $this->enabled = ((MODULE_PAYMENT_CCAVENUE_STATUS == 'True') ? true : false);
$this->check_hash = false;
$this->secret_word = '';
$this->login_id = MODULE_PAYMENT_CCAVENUE_LOGIN;

 if ((int)MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID > 0) {
 $this->order_status = MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID;
 }



// class methods
function update_status() {
 global $order, $db;

 if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_CCAVENUE_ZONE > 0) ) {
	$check_flag = false;
	$check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_CCAVENUE_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");
	while (!$check->EOF) {
	 if ($check->fields['zone_id'] < 1) {
		$check_flag = true;
		break;
	 } elseif ($check->fields['zone_id'] == $order->billing['zone_id']) {
		$check_flag = true;
		break;
	 }
	 $check->MoveNext();
	}

 if ($check_flag == false) {
	 $this->enabled = false;
 }
 }
}

// Which Form Action are we going to use?
// If we are in 'Testmode' we use the 'Test Server'

if (MODULE_PAYMENT_CCAVENUE_LOGIN > '199999') {
			$this->form_action_url = 'https://www.ccavenue.com/shopzone/cc_details.jsp';
	} else {
			$this->form_action_url = 'https://www.ccavenue.com/shopzone/cc_details.jsp';
			}
}
////////////////////////////////////////////////////
// Javascript form validation
// Check the user input submited on checkout_payment.php with javascript (client-side).
// Examples: validate credit card number, make sure required fields are filled in
////////////////////////////////////////////////////

function javascript_validation() {
 return false;
}


////////////////////////////////////////////////////
// !Form fields for user input
// Output any required information in form fields
// Examples: ask for extra fields (credit card number), display extra information
////////////////////////////////////////////////////


function selection() {
 global $order;

 $selection = array('id' => $this->code,
					 'module' => $this->title
					);

 return $selection;
}


////////////////////////////////////////////////////
// Pre confirmation checks (ie, check if credit card
// information is right before sending the info to
// the payment server
////////////////////////////////////////////////////

function pre_confirmation_check() {
 return false;
}


////////////////////////////////////////////////////
// Functions to execute before displaying the checkout
// confirmation page
////////////////////////////////////////////////////

function confirmation() {
 global $_POST;
 /* if (MODULE_PAYMENT_CCAVENUE_CONVERSION == 'Enabled'){
	 if (DEFAULT_CURRENCY <> 'USD'){
		$title = $this->title . MODULE_PAYMENT_CCAVENUE_CURRENCY_CONVERSITION;
	 }
 }else { */
	// $title = $this->title;
	 $confirmation = array('title' => $title);
	 return $confirmation;
 //}
}

////////////////////////////////////////////////////
// Functions to execute before finishing the form
// Examples: add extra hidden fields to the form
////////////////////////////////////////////////////

function process_button() {
 global $_POST, $order, $currency, $currencies;
if (MODULE_PAYMENT_CCAVENUE_CONVERSION == 'Enabled'){
if (DEFAULT_CURRENCY <> 'INR'){
 $cOrderTotal = $currencies->get_value("INR") * $order->info['total'];
}
} else {
$cOrderTotal = $order->info['total'];
}

$MerchantId = MODULE_PAYMENT_CCAVENUE_LOGIN;
$Amount =$cOrderTotal;
$OrderId = date('Ymdhis');
// $Url = zen_href_link(FILENAME_CHECKOUT_PROCESS,'','SSL',true,false);
$Url = zen_href_link(FILENAME_CHECKOUT_PROCESS,'','SSL',true,false);
$pattern='http://www\.';

if(!(Eregi($pattern,$Url,$reg)))
	eregi_replace('http://', $pattern, $Url);
$WorkingKey = MODULE_PAYMENT_CCAVENUE_KEY;
$str ="$MerchantId|$OrderId|$Amount|$Url|$WorkingKey";
$adler = 1;
$BASE = 65521 ;

$s1 = $adler & 0xffff ;
$s2 = ($adler >> 16) & 0xffff;
for($i = 0 ; $i < strlen($str) ; $i++)
{
	$s1 = ($s1 + Ord($str[$i])) % $BASE ;
	$s2 = ($s2 + $s1) % $BASE ;
		//echo "s1 : $s1 <BR> s2 : $s2 <BR>";

}
$str = $s2;
$num = 16;

$str = DecBin($str);

for( $i = 0 ; $i < (64 - strlen($str)) ; $i++)
	$str = "0".$str ;

for($i = 0 ; $i < $num ; $i++)
{
	$str = $str."0";
	$str = substr($str , 1 ) ;
	//echo "str : $str <BR>";	
}
$num=$str;
for ($n = 0 ; $n < strlen($num) ; $n++)
{
 $temp = $num[$n] ;
 $dec = $dec + $temp*pow(2 , strlen($num) - $n - 1);
}
$Checksum = $dec + $s1;

$process_button_string = zen_draw_hidden_field('Merchant_Id', $MerchantId) .
						 zen_draw_hidden_field('Amount', $Amount ) .
						 zen_draw_hidden_field('Order_Id',$OrderId) .
						 zen_draw_hidden_field('Checksum',$Checksum) .
						 zen_draw_hidden_field('billing_cust_name', $order->customer['firstname'] . ' ' . $order->customer['lastname']) .
						 zen_draw_hidden_field('billing_cust_address', $order->customer['street_address'] . ', ' . $order->customer['city'] . ', ' .$order->customer['state']) .
						 zen_draw_hidden_field('billing_cust_country', $order->customer['country']['title']) .
						 zen_draw_hidden_field('billing_cust_email', $order->customer['email_address']) .
						 zen_draw_hidden_field('billing_cust_tel', $order->customer['telephone']) .
						 zen_draw_hidden_field('billing_zip_code', $order->customer['postcode']) .							

						 zen_draw_hidden_field('delivery_cust_name', $order->customer['firstname'] . ' ' . $order->customer['lastname']) .
						 zen_draw_hidden_field('delivery_cust_address', $order->customer['street_address'] . ', ' . $order->customer['city'] . ', ' .$order->customer['state'] . ', ' . $order->customer['postcode'] . ', ' . $order->customer['country']['title']) .
						 zen_draw_hidden_field('delivery_cust_tel', $order->customer['telephone']) .
							 zen_draw_hidden_field('Redirect_Url',$Url).

 $process_button_string .= zen_draw_hidden_field(zen_session_name(), zen_session_id());
 return $process_button_string;
}
////////////////////////////////////////////////////
// Test Credit Card# 4111111111111111
// Expiration any date after current date.
// Functions to execute before processing the order
// Examples: retreive result from online payment services
////////////////////////////////////////////////////

function before_process() {
global $HTTP_POST_VARS, $customer_id, $MerchantId, $Amount, $OrderId, $WorkingKey, $checksum, $sum, $AuthDesc;

 $MerchantId = $_REQUEST['Merchant_Id'];
$Amount = $_REQUEST['Amount'];
$OrderId = $_REQUEST['Order_Id'];
$Checksum = $_REQUEST['Checksum'];
$AuthDesc = $_REQUEST['AuthDesc'];
$WorkingKey = MODULE_PAYMENT_CCAVENUE_KEY;

$str ="$MerchantId|$OrderId|$Amount|$AuthDesc|$WorkingKey";


$adler = 1;
$BASE = 65521 ;

$s1 = $adler & 0xffff ;
$s2 = ($adler >> 16) & 0xffff;
for($i = 0 ; $i < strlen($str) ; $i++)
{
	$s1 = ($s1 + Ord($str[$i])) % $BASE ;
	$s2 = ($s2 + $s1) % $BASE ;
		//echo "s1 : $s1 <BR> s2 : $s2 <BR>";

}

$str = $s2;
$num = 16;

$str = DecBin($str);

for( $i = 0 ; $i < (64 - strlen($str)) ; $i++)
	$str = "0".$str ;

for($i = 0 ; $i < $num ; $i++)
{
	$str = $str."0";
	$str = substr($str , 1 ) ;
	//echo "str : $str <BR>";
}
$num=$str;
for ($n = 0 ; $n < strlen($num) ; $n++)
{
 $temp = $num[$n] ;
 $dec = $dec + $temp*pow(2 , strlen($num) - $n - 1);
}
$sum = $dec +$s1 ;

if($sum == $Checksum)
	$Checksum = 'true' ;	
else
	$Checksum = 'false';

if ($Checksum != "true") {

	zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CCAVENUE_ALERT_ERROR_MESSAGE), 'SSL', true, false));
 }

 if($Checksum =='true' && $AuthDesc == 'N'){



	zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CCAVENUE_TEXT_ERROR_MESSAGE), 'SSL', true, false));
}

/*	we do not get any response_code from ccavenue so disabled this check
 if ($_POST['x_response_code'] != '1') {
	zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CCAVENUE_TEXT_ERROR_MESSAGE), 'SSL', true, false));
 }
*/	
}

function after_process() {
 return false;
}
////////////////////////////////////////////////////
// If an error occurs with the process, output error messages here
////////////////////////////////////////////////////

function get_error() {
 global $_GET;

 $error = array('title' => MODULE_PAYMENT_CCAVENUE_TEXT_ERROR,
				 'error' => stripslashes(urldecode($_GET['error'])));

 return $error;
}

////////////////////////////////////////////////////
// Check if module is installed (Administration Tool)
// TABLES: configuration
////////////////////////////////////////////////////


function check() {
global $db;
 if (!isset($this->_check)) {
	$check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_CCAVENUE_STATUS'");
	$this->_check = $check_query->RecordCount();
 }
 return $this->_check;
}

////////////////////////////////////////////////////
// Install the module (Administration Tool)
// TABLES: configuration
////////////////////////////////////////////////////

function install() {
global $db;
 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable CCAvenue Module', 'MODULE_PAYMENT_CCAVENUE_STATUS', 'True', 'Do you want to accept CCAvenue payments?', '6', '1', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Merchant_Id', 'MODULE_PAYMENT_CCAVENUE_LOGIN', 'Your_CCAVENUE_ID', 'Merchant ID used for the CCAvenue service', '6', '2', now())");
 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_CCAVENUE_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '5', now())");
 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Payment Zone', 'MODULE_PAYMENT_CCAVENUE_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '6', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Order Status', 'MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '7', 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name', now())");
 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Currency Converter', 'MODULE_PAYMENT_CCAVENUE_CONVERSION', 'Enabled', 'Currency Conversion', '6', '10', 'zen_cfg_select_option(array(\'Enabled\', \'Disable\'), ', now())");	
 $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Working_Key', 'MODULE_PAYMENT_CCAVENUE_KEY', 'Working_Key', 'put in the alphanumeric key from MARS Panel', '6', '3', now())");
}

////////////////////////////////////////////////////
// Remove the module (Administration Tool)
// TABLES: configuration
////////////////////////////////////////////////////

function remove() {
global $db;
 $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}

////////////////////////////////////////////////////
// Create our Key - > Value Arrays
////////////////////////////////////////////////////
function keys() {
 return array('MODULE_PAYMENT_CCAVENUE_STATUS', 'MODULE_PAYMENT_CCAVENUE_LOGIN','MODULE_PAYMENT_CCAVENUE_KEY', 'MODULE_PAYMENT_CCAVENUE_ZONE', 'MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID', 'MODULE_PAYMENT_CCAVENUE_SORT_ORDER', 'MODULE_PAYMENT_CCAVENUE_CONVERSION');
}
}
?>

 

Please if anyone could help me with the oscommerce code to convert it to a version which fixes all my problems.

Please Please help me fix this code as zencart coding is much more advanced for CCavenue- convert the zencart code to oscommerce ,

As chances of integrating ccavenue in oscommerce is basically Nil with the addons currently available on oscommerce addon section.

Thanx for all your help in advance!

Link to comment
Share on other sites

Thank you I tried a hand on rewriting the code but it is yet very buggy-

 

The currency yet does not convert, I tried redirecting the ccavanue transaction completed so that it updates the order but no success can you please see where am I going wrong, Your help will be deeply appreciated.

<?php
/*
$Id: cavenue.php,v 1.25 2002/11/01 05:04:31 hpdl Exp $
osCommerce, Open Source E-Commerce Solutions
[url="http://www.oscommerce.com"]http://www.oscommerce.com[/url]
Copyright © 2002 osCommerce
Released under the GNU General Public License
Modified By Praful Kumar
*/

class cavenue
{
var $code, $title, $description, $enabled;

// class constructor
function cavenue()
{
$this->code = 'cavenue';
$this->title = MODULE_PAYMENT_CCAVENUE_TEXT_TITLE;
$this->description = MODULE_PAYMENT_CCAVENUE_TEXT_DESCRIPTION;
$this->enabled = MODULE_PAYMENT_CCAVENUE_STATUS;
$this->sort_order = MODULE_PAYMENT_CCAVENUE_SORT_ORDER;

if ((int)MODULE_PAYMENT_CCAVENUE_PREPARE_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_CCAVENUE_PREPARE_ORDER_STATUS_ID;
}

if (is_object($order)) $this->update_status();

$this->form_action_url = 'https://www.ccavenue.com/shopzone/cc_details.jsp';

}

// class methods
function update_status() {
global $order;

if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_CCAVENUE_ZONE > 0) ) {
$check_flag = false;
$check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_CCAVENUE_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");
while ($check = tep_db_fetch_array($check_query)) {
if ($check['zone_id'] < 1) {
$check_flag = true;
break;
} elseif ($check['zone_id'] == $order->billing['zone_id']) {
$check_flag = true;
break;
}
}

if ($check_flag == false) {
$this->enabled = false;
}
}
}

function javascript_validation()
{
return false;
}

function selection() {
global $cart_cavenue_ID;

if (tep_session_is_registered('cart_cavenue_ID')) {
$order_id = substr($cart_cavenue_ID, strpos($cart_cavenue_ID, '-')+1);

$check_query = tep_db_query('select orders_id from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '" limit 1');

if (tep_db_num_rows($check_query) < 1) {
tep_db_query('delete from ' . TABLE_ORDERS . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_TOTAL . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_DOWNLOAD . ' where orders_id = "' . (int)$order_id . '"');

tep_session_unregister('cart_cavenue_ID');
}
}

return array('id' => $this->code,
'module' => $this->public_title);
}

//{
// return array('id' => $this->code,
// 'module' => $this->title);
// }

function pre_confirmation_check()
{
global $cartID, $cart;

if (empty($cart->cartID)) {
$cartID = $cart->cartID = $cart->generate_cart_id();
}

if (!tep_session_is_registered('cartID')) {
tep_session_register('cartID');
}
}


function confirmation()
{
global $cartID, $cart_cavenue_ID, $customer_id, $languages_id, $order, $order_total_modules;

if (tep_session_is_registered('cartID')) {
$insert_order = false;

if (tep_session_is_registered('cart_cavenue_ID')) {
$order_id = substr($cart_cavenue_ID, strpos($cart_cavenue_ID, '-')+1);

$curr_check = tep_db_query("select currency from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
$curr = tep_db_fetch_array($curr_check);

if ( ($curr['currency'] != $order->info['currency']) || ($cartID != substr($cart_cavenue_ID, 0, strlen($cartID))) ) {
$check_query = tep_db_query('select orders_id from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '" limit 1');

if (tep_db_num_rows($check_query) < 1) {
tep_db_query('delete from ' . TABLE_ORDERS . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_TOTAL . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ' where orders_id = "' . (int)$order_id . '"');
tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_DOWNLOAD . ' where orders_id = "' . (int)$order_id . '"');
}

$insert_order = true;
}
} else {
$insert_order = true;
}

if ($insert_order == true) {
$order_totals = array();
if (is_array($order_total_modules->modules)) {
reset($order_total_modules->modules);
while (list(, $value) = each($order_total_modules->modules)) {
$class = substr($value, 0, strrpos($value, '.'));
if ($GLOBALS[$class]->enabled) {
for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++) {
if (tep_not_null($GLOBALS[$class]->output[$i]['title']) && tep_not_null($GLOBALS[$class]->output[$i]['text'])) {
$order_totals[] = array('code' => $GLOBALS[$class]->code,
'title' => $GLOBALS[$class]->output[$i]['title'],
'text' => $GLOBALS[$class]->output[$i]['text'],
'value' => $GLOBALS[$class]->output[$i]['value'],
'sort_order' => $GLOBALS[$class]->sort_order);
}
}
}
}
}

$sql_data_array = array('customers_id' => $customer_id,
'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'],
'customers_company' => $order->customer['company'],
'customers_street_address' => $order->customer['street_address'],
'customers_suburb' => $order->customer['suburb'],
'customers_city' => $order->customer['city'],
'customers_postcode' => $order->customer['postcode'],
'customers_state' => $order->customer['state'],
'customers_country' => $order->customer['country']['title'],
'customers_telephone' => $order->customer['telephone'],
'customers_email_address' => $order->customer['email_address'],
'customers_address_format_id' => $order->customer['format_id'],
'delivery_name' => $order->delivery['firstname'] . ' ' . $order->delivery['lastname'],
'delivery_company' => $order->delivery['company'],
'delivery_street_address' => $order->delivery['street_address'],
'delivery_suburb' => $order->delivery['suburb'],
'delivery_city' => $order->delivery['city'],
'delivery_postcode' => $order->delivery['postcode'],
'delivery_state' => $order->delivery['state'],
'delivery_country' => $order->delivery['country']['title'],
'delivery_address_format_id' => $order->delivery['format_id'],
'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'],
'billing_company' => $order->billing['company'],
'billing_street_address' => $order->billing['street_address'],
'billing_suburb' => $order->billing['suburb'],
'billing_city' => $order->billing['city'],
'billing_postcode' => $order->billing['postcode'],
'billing_state' => $order->billing['state'],
'billing_country' => $order->billing['country']['title'],
'billing_address_format_id' => $order->billing['format_id'],
'payment_method' => $order->info['payment_method'],
'cc_type' => $order->info['cc_type'],
'cc_owner' => $order->info['cc_owner'],
'cc_number' => $order->info['cc_number'],
'cc_expires' => $order->info['cc_expires'],
'date_purchased' => 'now()',
'orders_status' => $order->info['order_status'],
'currency' => $order->info['currency'],
'currency_value' => $order->info['currency_value']);

tep_db_perform(TABLE_ORDERS, $sql_data_array);

$insert_id = tep_db_insert_id();

for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
$sql_data_array = array('orders_id' => $insert_id,
'title' => $order_totals[$i]['title'],
'text' => $order_totals[$i]['text'],
'value' => $order_totals[$i]['value'],
'class' => $order_totals[$i]['code'],
'sort_order' => $order_totals[$i]['sort_order']);

tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
}

for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
$sql_data_array = array('orders_id' => $insert_id,
'products_id' => tep_get_prid($order->products[$i]['id']),
'products_model' => $order->products[$i]['model'],
'products_name' => $order->products[$i]['name'],
'products_price' => $order->products[$i]['price'],
'final_price' => $order->products[$i]['final_price'],
'products_tax' => $order->products[$i]['tax'],
'products_quantity' => $order->products[$i]['qty']);

tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);

$order_products_id = tep_db_insert_id();

$attributes_exist = '0';
if (isset($order->products[$i]['attributes'])) {
$attributes_exist = '1';
for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
if (DOWNLOAD_ENABLED == 'true') {
$attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename
from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
on pa.products_attributes_id=pad.products_attributes_id
where pa.products_id = '" . $order->products[$i]['id'] . "'
and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "'
and pa.options_id = popt.products_options_id
and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "'
and pa.options_values_id = poval.products_options_values_id
and popt.language_id = '" . $languages_id . "'
and poval.language_id = '" . $languages_id . "'";
$attributes = tep_db_query($attributes_query);
} else {
$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
}
$attributes_values = tep_db_fetch_array($attributes);

$sql_data_array = array('orders_id' => $insert_id,
'orders_products_id' => $order_products_id,
'products_options' => $attributes_values['products_options_name'],
'products_options_values' => $attributes_values['products_options_values_name'],
'options_values_price' => $attributes_values['options_values_price'],
'price_prefix' => $attributes_values['price_prefix']);

tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
$sql_data_array = array('orders_id' => $insert_id,
'orders_products_id' => $order_products_id,
'orders_products_filename' => $attributes_values['products_attributes_filename'],
'download_maxdays' => $attributes_values['products_attributes_maxdays'],
'download_count' => $attributes_values['products_attributes_maxcount']);

tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
}
}
}
}

$cart_cavenue_ID = $cartID . '-' . $insert_id;
tep_session_register('cart_cavenue_ID');
}
}

return false;
}


function process_button()
{
global $order, $currencies,$customer_id, $MerchantId, $shipping, $Amount, $OrderId, $Url, $WorkingKey, $Checksum
; global $sendto, $currency, $cart_cavenue_ID;

$MerchantId = MODULE_PAYMENT_CCAVENUE_LOGIN;
$Amount = $order->info['total'];
$OrderId = $customer_id . '-' . date('Ymdhis');
$Url = tep_href_link(FILENAME_CHECKOUT_PROCESS,'','SSL',false);
$pattern='http://www\.';

$process_button_string = '';

if(!(Eregi($pattern,$Url,$reg)))
eregi_replace('http://', $pattern, $Url);
$WorkingKey = MODULE_PAYMENT_CCAVENUE_WORKING_KEY;
$str ="$MerchantId|$OrderId|$Amount|$Url|$WorkingKey";
$adler = 1;
$BASE = 65521 ;

$s1 = $adler & 0xffff ;
$s2 = ($adler >> 16) & 0xffff;
for($i = 0 ; $i < strlen($str) ; $i++)
{
$s1 = ($s1 + Ord($str[$i])) % $BASE ;
$s2 = ($s2 + $s1) % $BASE ;
//echo "s1 : $s1 <BR> s2 : $s2 <BR>";

}

$str = $s2;
$num = 16;

$str = DecBin($str);

for( $i = 0 ; $i < (64 - strlen($str)) ; $i++)
$str = "0".$str ;

for($i = 0 ; $i < $num ; $i++)
{
$str = $str."0";
$str = substr($str , 1 ) ;
//echo "str : $str <BR>";
}
$num=$str;
for ($n = 0 ; $n < strlen($num) ; $n++)
{
$temp = $num[$n] ;
$dec = $dec + $temp*pow(2 , strlen($num) - $n - 1);
}
$Checksum = $dec + $s1;
$AuthDesc = 'N';

///// want to bypass customer billing info to the CCAvenue page.
$addQuery = tep_db_query("select ab.customers_id,
ab.entry_postcode,
ab.entry_city,
ab.entry_state,
ab.entry_country_id,
c.countries_name,
cu.customers_telephone
from " . TABLE_COUNTRIES . " c,
" . TABLE_CUSTOMERS . " cu,
" . TABLE_ADDRESS_BOOK . " ab
where c.countries_id = ab.entry_country_id
and cu.customers_id = ab.customers_id
and cu.customers_id = " . $customer_id );

$addRow = tep_db_fetch_array($addQuery);

//echo $addResult . " <br>" . $addRow;

$cust_city = $addRow['entry_city'];
$cust_tele = $addRow['customers_telephone'];
$cust_state = $addRow['entry_state'];
$cust_zip = $addRow['entry_postcode'];
$cust_country = $addRow['countries_name'];

//echo "<br>Return URL: " . $Url;
///
$process_button_string = tep_draw_hidden_field('cmd', '_s-xclick') .
tep_draw_hidden_field('Merchant_Id', $MerchantId) .
tep_draw_hidden_field('Order_Id', $OrderId) .
tep_draw_hidden_field('Amount', $Amount) .
tep_draw_hidden_field('billing_cust_name', $order->customer['firstname'].' '. $order->customer['lastname']) .
tep_draw_hidden_field('billing_cust_address', $order->billing['street_address']) .
tep_draw_hidden_field('billing_cust_country', $cust_country) .
tep_draw_hidden_field('billing_cust_email', $order->customer['email_address']) .

tep_draw_hidden_field('billing_cust_city', $cust_city) .
tep_draw_hidden_field('billing_cust_tel', $cust_tele) .
tep_draw_hidden_field('billing_cust_state', $cust_state) .
tep_draw_hidden_field('billing_zip_code', $cust_zip) .
tep_draw_hidden_field('billing_cust_notes', $order->info['comments']) .

tep_draw_hidden_field('Checksum',$Checksum) .
tep_draw_hidden_field('delivery_cust_name', $order->delivery['firstname'].' '.$order->delivery['lastname']) .
tep_draw_hidden_field('delivery_cust_address', $order->delivery['street_address']) .
tep_draw_hidden_field('delivery_cust_country', $cust_country) .
tep_draw_hidden_field('Redirect_Url',$Url);

return $process_button_string;
}


function before_process()
{
global $HTTP_POST_VARS, $customer_id, $MerchantId, $Amount, $OrderId, $WorkingKey, $Checksum,$AuthDesc,$sum
;
global $order, $order_totals, $sendto, $billto, $languages_id, $payment, $currencies, $cart, $cart_cavenue_ID;
global $$payment;

$order_id = substr($cart_cavenue_ID, strpos($cart_cavenue_ID, '-')+1);

$check_query = tep_db_query("select orders_status from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
if (tep_db_num_rows($check_query)) {
$check = tep_db_fetch_array($check_query);

if ($check['orders_status'] == MODULE_PAYMENT_CCAVENUE_PREPARE_ORDER_STATUS_ID) {
$sql_data_array = array('orders_id' => $order_id,
'orders_status_id' => MODULE_PAYMENT_CCAVENUE_PREPARE_ORDER_STATUS_ID,
'date_added' => 'now()',
'customer_notified' => '0',
'comments' => '');

tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
}
}

tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . (MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID > 0 ? (int)MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID : (int)DEFAULT_ORDERS_STATUS_ID) . "', last_modified = now() where orders_id = '" . (int)$order_id . "'");

$sql_data_array = array('orders_id' => $order_id,
'orders_status_id' => (MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID > 0 ? (int)MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID : (int)DEFAULT_ORDERS_STATUS_ID),
'date_added' => 'now()',
'customer_notified' => (SEND_EMAILS == 'true') ? '1' : '0',
'comments' => $order->info['comments']);

tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);

// initialized for the email confirmation
$products_ordered = '';
$subtotal = 0;
$total_tax = 0;

for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
// Stock Update - Joao Correia
if (STOCK_LIMITED == 'true') {
if (DOWNLOAD_ENABLED == 'true') {
$stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename
FROM " . TABLE_PRODUCTS . " p
LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa
ON p.products_id=pa.products_id
LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
ON pa.products_attributes_id=pad.products_attributes_id
WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'";
// Will work with only one option for downloadable products
// otherwise, we have to build the query dynamically with a loop
$products_attributes = $order->products[$i]['attributes'];
if (is_array($products_attributes)) {
$stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
}
$stock_query = tep_db_query($stock_query_raw);
} else {
$stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
}
if (tep_db_num_rows($stock_query) > 0) {
$stock_values = tep_db_fetch_array($stock_query);
// do not decrement quantities if products_attributes_filename exists
if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) {
$stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty'];
} else {
$stock_left = $stock_values['products_quantity'];
}
tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
}
}
}

// Update products_ordered (for bestsellers list)
tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");

//------insert customer choosen option to order--------
$attributes_exist = '0';
$products_ordered_attributes = '';
if (isset($order->products[$i]['attributes'])) {
$attributes_exist = '1';
for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
if (DOWNLOAD_ENABLED == 'true') {
$attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename
from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
on pa.products_attributes_id=pad.products_attributes_id
where pa.products_id = '" . $order->products[$i]['id'] . "'
and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "'
and pa.options_id = popt.products_options_id
and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "'
and pa.options_values_id = poval.products_options_values_id
and popt.language_id = '" . $languages_id . "'
and poval.language_id = '" . $languages_id . "'";
$attributes = tep_db_query($attributes_query);
} else {
$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
}
$attributes_values = tep_db_fetch_array($attributes);

$products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
}
}
//------insert customer choosen option eof ----
$total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
$total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
$total_cost += $total_products_price;

$products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n";
}

// lets start with the email confirmation
$email_order = STORE_NAME . "\n" .
EMAIL_SEPARATOR . "\n" .
EMAIL_TEXT_ORDER_NUMBER . ' ' . $order_id . "\n" .
EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $order_id, 'SSL', false) . "\n" .
EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
if ($order->info['comments']) {
$email_order .= tep_db_output($order->info['comments']) . "\n\n";
}
$email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
EMAIL_SEPARATOR . "\n" .
$products_ordered .
EMAIL_SEPARATOR . "\n";

for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
$email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
}

if ($order->content_type != 'virtual') {
$email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
EMAIL_SEPARATOR . "\n" .
tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
}

$email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
EMAIL_SEPARATOR . "\n" .
tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";

if (is_object($$payment)) {
$email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
EMAIL_SEPARATOR . "\n";
$payment_class = $$payment;
$email_order .= $payment_class->title . "\n\n";
if ($payment_class->email_footer) {
$email_order .= $payment_class->email_footer . "\n\n";
}
}

tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);

//Checksum

$MerchantId = $HTTP_POST_VARS['Merchant_Id'];
$Amount = $HTTP_POST_VARS['Amount'];
$OrderId = $HTTP_POST_VARS['Order_Id'];
$Checksum = $HTTP_POST_VARS['Checksum'];
$AuthDesc = $HTTP_POST_VARS['AuthDesc'];
$WorkingKey = MODULE_PAYMENT_CCAVENUE_WORKING_KEY;
$str ="$MerchantId|$OrderId|$Amount|$AuthDesc|$WorkingKey";
$adler = 1;
$BASE = 65521 ;

$s1 = $adler & 0xffff ;
$s2 = ($adler >> 16) & 0xffff;
for($i = 0 ; $i < strlen($str) ; $i++)
{
$s1 = ($s1 + Ord($str[$i])) % $BASE ;
$s2 = ($s2 + $s1) % $BASE ;
//echo "s1 : $s1 <BR> s2 : $s2 <BR>";

}

$str = $s2;
$num = 16;

$str = DecBin($str);

for( $i = 0 ; $i < (64 - strlen($str)) ; $i++)
$str = "0".$str ;

for($i = 0 ; $i < $num ; $i++)
{
$str = $str."0";
$str = substr($str , 1 ) ;
//echo "str : $str <BR>";
}
$num=$str;
for ($n = 0 ; $n < strlen($num) ; $n++)
{
$temp = $num[$n] ;
$dec = $dec + $temp*pow(2 , strlen($num) - $n - 1);
}
$sum = $dec + $s1;
if($sum == $Checksum)
$Checksum = 'true' ;
else
$Checksum = 'false';
if($Checksum != 'true')
{
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CCAVENUE_ALERT_ERROR_MESSAGE), 'SSL', true, false));
}

if($Checksum =='true' && $AuthDesc == 'N')
{

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CCAVENUE_TEXT_ERROR_MESSAGE), 'SSL', true, false));
}

// send emails to other people
if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
}

// load the after_process function from the payment modules
$this->after_process();

$cart->reset(true);

// unregister session variables used during checkout
tep_session_unregister('sendto');
tep_session_unregister('billto');
tep_session_unregister('shipping');
tep_session_unregister('payment');
tep_session_unregister('comments');

tep_session_unregister('cart_cavenue_ID');

tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));

}

function after_process()
{
return false;
}


function output_error()
{
global $HTTP_GET_VARS;

$output_error_string = '<table border="0" cellspacing="0" cellpadding="0" width="100%">' . "\n" .
' <tr>' . "\n" .
' <td class="main"> <font color="#FF0000"><b>' . MODULE_PAYMENT_CCAVENUE_TEXT_ERROR . '</b></font><br> ' . MODULE_PAYMENT_CCAVENUE_TEXT_ERROR_MESSAGE . ' </td>' . "\n" .
' </tr>' . "\n" .
'</table>' . "\n";

return $output_error_string;
}



function check()
{
if (!isset($this->_check))
{
$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_CCAVENUE_STATUS'");
$this->_check = tep_db_num_rows($check_query);
}
return $this->_check;
}

function install() {
$check_query = tep_db_query("select orders_status_id from " . TABLE_ORDERS_STATUS . " where orders_status_name = 'Preparing[CCAvenue]' limit 1");

if (tep_db_num_rows($check_query) < 1) {
$status_query = tep_db_query("select max(orders_status_id) as status_id from " . TABLE_ORDERS_STATUS);
$status = tep_db_fetch_array($status_query);

$status_id = $status['status_id']+1;

$languages = tep_get_languages();

foreach ($languages as $lang) {
tep_db_query("insert into " . TABLE_ORDERS_STATUS . " (orders_status_id, language_id, orders_status_name) values ('" . $status_id . "', '" . $lang['id'] . "', 'Preparing[CCAvenue]')");
}

$flags_query = tep_db_query("describe " . TABLE_ORDERS_STATUS . " public_flag");
if (tep_db_num_rows($flags_query) == 1) {
tep_db_query("update " . TABLE_ORDERS_STATUS . " set public_flag = 0 and downloads_flag = 0 where orders_status_id = '" . $status_id . "'");
}
} else {
$check = tep_db_fetch_array($check_query);

$status_id = $check['orders_status_id'];
}

global $db;
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable CCAvenue Module', 'MODULE_PAYMENT_CCAVENUE_STATUS', 'True', 'Do you want to accept CCAvenue payments?', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Merchant_Id', 'MODULE_PAYMENT_CCAVENUE_LOGIN', 'Your_CCAVENUE_ID', 'Merchant ID used for the CCAvenue service', '6', '2', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_CCAVENUE_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '5', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Payment Zone', 'MODULE_PAYMENT_CCAVENUE_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '6', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Preparing Order Status', 'MODULE_PAYMENT_CCAVENUE_PREPARE_ORDER_STATUS_ID', '" . $status_id . "', 'Set the status of prepared orders made with this payment module to this value', '6', '0', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Order Status', 'MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '7', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Currency Converter', 'MODULE_PAYMENT_CCAVENUE_CONVERSION', 'Enabled', 'Currency Conversion', '6', '10', 'tep_cfg_select_option(array(\'Enabled\', \'Disable\'), ', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Working_Key', 'MODULE_PAYMENT_CCAVENUE_KEY', 'Working_Key', 'put in the alphanumeric key from MARS Panel', '6', '3', now())");
}


function remove() {
global $db;
tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}

function keys()
{
return array('MODULE_PAYMENT_CCAVENUE_STATUS', 'MODULE_PAYMENT_CCAVENUE_LOGIN','MODULE_PAYMENT_CCAVENUE_KEY', 'MODULE_PAYMENT_CCAVENUE_ZONE','MODULE_PAYMENT_CCAVENUE_PREPARE_ORDER_STATUS_ID','MODULE_PAYMENT_CCAVENUE_ORDER_STATUS_ID', 'MODULE_PAYMENT_CCAVENUE_SORT_ORDER', 'MODULE_PAYMENT_CCAVENUE_CONVERSION');
}
}
?>

 

Will impatiently wait for responses and edits to the above code I tried making, Thanks in advance!!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...