Jump to content



Latest News: (loading..)

Setting a Default Country Value


  • Please log in to reply
6 replies to this topic

#1   DataMouse

DataMouse
  • Members
  • 417 posts
  • Real Name:Danny Wareham
  • Gender:Male
  • Location:UK

Posted 20 August 2011 - 04:07 PM

Hi all

I have a store which only sells to the UK.

I've recoded the checkout process so that the country field is now used to pull a list of counties in the UK (seeing as country isn't used).
With WorldPay, you need to pass over a country ID in order to process the payment.

What I'd like to do is hardcode the country ID into the payment module.
This means that I don't have to have my customers select "UK" from a country list with only one value in the checkout process, and it all appears seemless to the end user.

The issue I have is that i can't find where to set the country value in the module.

Any help would be massively appreciated!

Thanks


DM

#2   germ

germ
  • Members
  • 13,921 posts
  • Real Name:Jim
  • Gender:Male
  • Location:USA (GMT-6)

Posted 21 August 2011 - 04:00 PM

Perhaps if you supplied a link to whatever contribution of Worldpay you are using you'd get more responses.

No one can tell you what to change if they don't know what code you're using.
:blush:
If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."
- Me -

"Headers already sent" - The definitive help

"Cannot redeclare ..." - How to find/fix it

SSL Implementation Help

Like this post? "Like" it again over there >

#3   DataMouse

DataMouse
  • Members
  • 417 posts
  • Real Name:Danny Wareham
  • Gender:Male
  • Location:UK

Posted 21 August 2011 - 04:18 PM

Apologies - and thanks
The code is the standard WorldPay module (worldpay_junior.php), and is included below :)

<?php
/*
  UPDATED 07-05-2011
  Updated RBS WorldPay form URL
	
  $Id: worldpay_junior.php 1807 2008-01-13 00:50:08Z hpdl $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2008 osCommerce

  Released under the GNU General Public License
*/

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

// class constructor
	function worldpay_junior() {
	  global $order;

	  $this->signature = 'worldpay|worldpay_junior|1.0|2.2';

	  $this->code = 'worldpay_junior';
	  $this->title = MODULE_PAYMENT_WORLDPAY_JUNIOR_TEXT_TITLE;
	  $this->public_title = MODULE_PAYMENT_WORLDPAY_JUNIOR_TEXT_PUBLIC_TITLE;
	  $this->description = MODULE_PAYMENT_WORLDPAY_JUNIOR_TEXT_DESCRIPTION;
	  $this->sort_order = MODULE_PAYMENT_WORLDPAY_JUNIOR_SORT_ORDER;
	  $this->enabled = ((MODULE_PAYMENT_WORLDPAY_JUNIOR_STATUS == 'True') ? true : false);

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

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

	  $this->form_action_url = 'https://secure.wp3.rbsworldpay.com/wcc/purchase';
	}

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

	  if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_WORLDPAY_JUNIOR_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_WORLDPAY_JUNIOR_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_Worldpay_Junior_ID;

	  if (tep_session_is_registered('cart_Worldpay_Junior_ID')) {
		$order_id = substr($cart_Worldpay_Junior_ID, strpos($cart_Worldpay_Junior_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_Worldpay_Junior_ID');
		}
	  }

	  return array('id' => $this->code,
				   'module' => $this->public_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_Worldpay_Junior_ID, $customer_id, $languages_id, $order, $order_total_modules;

	  $insert_order = false;

	  if (tep_session_is_registered('cart_Worldpay_Junior_ID')) {
		$order_id = substr($cart_Worldpay_Junior_ID, strpos($cart_Worldpay_Junior_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_Worldpay_Junior_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_Worldpay_Junior_ID = $cartID . '-' . $insert_id;
		tep_session_register('cart_Worldpay_Junior_ID');
	  }

	  return false;
	}

	function process_button() {
	  global $order, $currency, $languages_id, $language, $customer_id, $cart_Worldpay_Junior_ID;

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

	  $lang_query = tep_db_query("select code from " . TABLE_LANGUAGES . " where languages_id = '" . (int)$languages_id . "'");
	  $lang = tep_db_fetch_array($lang_query);

	  $process_button_string = tep_draw_hidden_field('instId', MODULE_PAYMENT_WORLDPAY_JUNIOR_INSTALLATION_ID) .
							   tep_draw_hidden_field('amount', $this->format_raw($order->info['total'])) .
							   tep_draw_hidden_field('currency', $currency) .
							   tep_draw_hidden_field('hideCurrency', 'true') .
							   tep_draw_hidden_field('cartId', $order_id) .
							   tep_draw_hidden_field('desc', STORE_NAME) .
							   tep_draw_hidden_field('name', $order->billing['firstname'] . ' ' . $order->billing['lastname']) .
							   tep_draw_hidden_field('address', $order->billing['street_address']) .
							   tep_draw_hidden_field('postcode', $order->billing['postcode']) .
							   tep_draw_hidden_field('country', $order->billing['country']['iso_code_2']) .
							   tep_draw_hidden_field('tel', $order->customer['telephone']) .
							   tep_draw_hidden_field('email', $order->customer['email_address']) .
							   tep_draw_hidden_field('fixContact', 'Y') .
							   tep_draw_hidden_field('lang', strtoupper($lang['code'])) .
							   tep_draw_hidden_field('signatureFields', 'amount:currency:cartId') .
							   tep_draw_hidden_field('signature', md5(MODULE_PAYMENT_WORLDPAY_JUNIOR_MD5_PASSWORD . ':' . $this->format_raw($order->info['total']) . ':' . $currency . ':' . $order_id)) .
							   tep_draw_hidden_field('MC_callback', substr(tep_href_link('ext/modules/payment/worldpay/junior_callback.php', '', 'NONSSL', false, false), strpos(tep_href_link('ext/modules/payment/worldpay/junior_callback.php', '', 'NONSSL', false, false), '://')+3));

	  if (MODULE_PAYMENT_WORLDPAY_JUNIOR_TRANSACTION_METHOD == 'Pre-Authorization') {
		$process_button_string .= tep_draw_hidden_field('authMode', 'E');
	  }

	  if (MODULE_PAYMENT_WORLDPAY_JUNIOR_TESTMODE == 'True') {
		$process_button_string .= tep_draw_hidden_field('testMode', '100');
	  }

	  $process_button_string .= tep_draw_hidden_field('M_sid', tep_session_id()) .
								tep_draw_hidden_field('M_cid', $customer_id) .
								tep_draw_hidden_field('M_lang', $language) .
								tep_draw_hidden_field('M_hash', md5(tep_session_id() . $customer_id . $order_id . $language . number_format($order->info['total'], 2) . MODULE_PAYMENT_WORLDPAY_JUNIOR_MD5_PASSWORD));

	  return $process_button_string;
	}

	function before_process() {
	  global $customer_id, $language, $order, $order_totals, $sendto, $billto, $languages_id, $payment, $currencies, $cart, $cart_Worldpay_Junior_ID;
	  global $$payment;

	  $order_id = substr($cart_Worldpay_Junior_ID, strpos($cart_Worldpay_Junior_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_WORLDPAY_JUNIOR_PREPARE_ORDER_STATUS_ID) {
		  $hash_result = false;

		  if (isset($HTTP_GET_VARS['hash']) && !empty($HTTP_GET_VARS['hash']) && ($HTTP_GET_VARS['hash'] == md5(tep_session_name() . $customer_id . $order_id . $language . number_format($order->info['total'], 2) . MODULE_PAYMENT_WORLDPAY_JUNIOR_MD5_PASSWORD))) {
			$hash_result = true;
		  }

		  $sql_data_array = array('orders_id' => $order_id,
								  'orders_status_id' => MODULE_PAYMENT_WORLDPAY_JUNIOR_PREPARE_ORDER_STATUS_ID,
								  'date_added' => 'now()',
								  'customer_notified' => '0',
								  'comments' => (($hash_result == true) ? 'WorldPay: Transaction Verified' : 'WorldPay: Incorrect Transaction Hash'));

		  tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);

		  if (MODULE_PAYMENT_WORLDPAY_JUNIOR_TESTMODE == 'True') {
			$sql_data_array = array('orders_id' => $order_id,
									'orders_status_id' => MODULE_PAYMENT_WORLDPAY_JUNIOR_PREPARE_ORDER_STATUS_ID,
									'date_added' => 'now()',
									'customer_notified' => '0',
									'comments' => MODULE_PAYMENT_WORLDPAY_JUNIOR_TEXT_WARNING_DEMO_MODE);

			tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
		  }
		}
	  }

	  tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . (MODULE_PAYMENT_WORLDPAY_JUNIOR_ORDER_STATUS_ID > 0 ? (int)MODULE_PAYMENT_WORLDPAY_JUNIOR_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_WORLDPAY_JUNIOR_ORDER_STATUS_ID > 0 ? (int)MODULE_PAYMENT_WORLDPAY_JUNIOR_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);

// 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_Worldpay_Junior_ID');

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

	function after_process() {
	  return false;
	}

	function get_error() {
	  return false;
	}

	function check() {
	  if (!isset($this->_check)) {
		$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_WORLDPAY_JUNIOR_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 [WorldPay]' 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();

		for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
		  tep_db_query("insert into " . TABLE_ORDERS_STATUS . " (orders_status_id, language_id, orders_status_name) values ('" . $status_id . "', '" . $languages[$i]['id'] . "', 'Preparing [WorldPay]')");
		}

		$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'];
	  }

	  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 WorldPay Business Gateway', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_STATUS', 'False', 'Do you want to accept WorldPay Business Gateway payments?', '6', '0', '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 ('Installation ID', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_INSTALLATION_ID', '', 'Your WorldPay Installation ID', '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 ('Payment Response password', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_CALLBACK_PASSWORD', '', 'A password that is sent back in the callback response (specified in the WorldPay Customer Management System)', '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 ('MD5 secret for transactions Password', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_MD5_PASSWORD', '', 'The MD5 secret encryption password used to validate transaction responses with (specified in the WorldPay Customer Management System)', '6', '0', 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 ('Transaction Method', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_TRANSACTION_METHOD', 'Capture', 'The processing method to use for each transaction', '6', '0', 'tep_cfg_select_option(array(\'Pre-Authorization\', \'Capture\'), ', 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 ('Test Mode', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_TESTMODE', 'True', 'Process transactions in test mode?', '6', '0', '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 ('Sort order of display.', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', 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_WORLDPAY_JUNIOR_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '2', '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_WORLDPAY_JUNIOR_PREPARE_ORDER_STATUS_ID', '" . (int)$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_WORLDPAY_JUNIOR_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())");
	}

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

	function keys() {
	  return array('MODULE_PAYMENT_WORLDPAY_JUNIOR_STATUS', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_INSTALLATION_ID', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_CALLBACK_PASSWORD', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_MD5_PASSWORD', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_TRANSACTION_METHOD', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_TESTMODE', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_ZONE', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_PREPARE_ORDER_STATUS_ID', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_ORDER_STATUS_ID', 'MODULE_PAYMENT_WORLDPAY_JUNIOR_SORT_ORDER');
	}

// format prices without currency formatting
	function format_raw($number, $currency_code = '', $currency_value = '') {
	  global $currencies, $currency;

	  if (empty($currency_code) || !$this->is_set($currency_code)) {
		$currency_code = $currency;
	  }

	  if (empty($currency_value) || !is_numeric($currency_value)) {
		$currency_value = $currencies->currencies[$currency_code]['value'];
	  }

	  return number_format(tep_round($number * $currency_value, $currencies->currencies[$currency_code]['decimal_places']), $currencies->currencies[$currency_code]['decimal_places'], '.', '');
	}
  }
?>


#4   DataMouse

DataMouse
  • Members
  • 417 posts
  • Real Name:Danny Wareham
  • Gender:Male
  • Location:UK

Posted 21 August 2011 - 04:52 PM

I *believe* that it is in the function process_button()

I also believe that it is this line that requires the hardcoding:

tep_draw_hidden_field('country', $order->billing['country']['iso_code_2']) .


Any ideas?

#5   germ

germ
  • Members
  • 13,921 posts
  • Real Name:Jim
  • Gender:Male
  • Location:USA (GMT-6)

Posted 21 August 2011 - 04:54 PM

Well......

Not knowing how Worldpay works, and not having a link to see how it works this is my best guess....

In this function:

	function process_button() {
This line:

							   tep_draw_hidden_field('country', $order->billing['country']['iso_code_2']) .
Might need to be:

							   tep_draw_hidden_field('country', 'GB') .
I really don't see anywhere it uses the countries_id field in the DB.
:unsure:

Edited by germ, 21 August 2011 - 04:56 PM.

If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."
- Me -

"Headers already sent" - The definitive help

"Cannot redeclare ..." - How to find/fix it

SSL Implementation Help

Like this post? "Like" it again over there >

#6   DataMouse

DataMouse
  • Members
  • 417 posts
  • Real Name:Danny Wareham
  • Gender:Male
  • Location:UK

Posted 21 August 2011 - 05:07 PM

That looks promising.
Didn't think of removing the $order->billing reference...

I shall atry it and let you know shortly

Thanks ever so much!
:)

#7   DataMouse

DataMouse
  • Members
  • 417 posts
  • Real Name:Danny Wareham
  • Gender:Male
  • Location:UK

Posted 22 August 2011 - 04:48 PM

I think it's working perfectly - certainly all the tests are going through OK.

Thanks ever so much for your help!

DM