Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Debugging help in ccavenue newly crafted module


radhavallabh

Recommended Posts

 
Hi, Pls could someone help me debug this CCavenue payment integration module I tried to re-craft out of the basic one by Praful Kumar available on oscommerce addon section;
It is returning Checksum error on ccavenue gateway page all the mechant id and working key are perfect;
<?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
*/

 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');
}
 }
?>

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...