Jump to content



Photo
- - - - -

Virtual Merchant - Elavon, ViaKlix, Nova Payment Module Support Forum


  • Please log in to reply
125 replies to this topic

#41   zelf

zelf
  • Members
  • 294 posts
  • Real Name:Nathan Zabaldo
  • Gender:Male
  • Location:Portland, OR

Posted 13 March 2009 - 15:28

The three missing fields are Cardholder Amount, Cardholder Currency, and Conversion Rate

These are all DCC options. You should be able to submit transactions with or without them as long as it is not a DCC transaction.

PM me your site and I will take a look.

#42   JonBLodi

JonBLodi
  • Members
  • 1 posts
  • Real Name:Jon Bjork

Posted 14 March 2009 - 00:26

These are all DCC options. You should be able to submit transactions with or without them as long as it is not a DCC transaction.

PM me your site and I will take a look.


Hi Nathan, I, too want to thank you for this contribution! I just installed it and have it working in under 3 hours.

You are correct (of course!) that these are DCC options. The issue is that we were trying to precisely follow your list of Payment Fields shown on page 1 of this forum, and the "Cardholder Amount", "Cardholder Currency" and "Conversion Rate" are not listed in my Virtual Merchant config screen. The interface complains that "Cardholder Amount" is already an existing field.

That leads me to conclude that the list reflects the DCC setting of our account. We don't have DCC turned on, which is probably why our Payment Fields screen cannot match that shown on page 1.

In any case, all I really had to do was set Sales Tax to "No" for not required, and everything is working just fine.

It will be nice once that test credit card is working, but I know you are aware of this issue. Also, FYI, I was able to test the connections using card 4111111111111111 with any expiry and CVV 123, but this only worked in Test mode, not Production mode. I wound up using my personal cc to test the final production config.

I did have an issue of receiving an error when I had the ChargeIt payment module set to CVV false. My client must have set up the MerchantConnect account to require CVV. All I had to do was set CVV to true and I was off to the races.

Well, it's Friday night and I'm going to kick back with a bottle of Pantheon Cellars Lot 06 Panthos. Have a great weekend and thanks again! - Jon Bjork

#43   zelf

zelf
  • Members
  • 294 posts
  • Real Name:Nathan Zabaldo
  • Gender:Male
  • Location:Portland, OR

Posted 14 March 2009 - 03:24

All I really had to do was set Sales Tax to "No" for not required, and everything is working just fine.

I will update the install instructions to reflect this and the DCC options in VM.

It will be nice once that test credit card is working

Update is almost ready

I was able to test the connections using card 4111111111111111 with any expiry and CVV 123, but this only worked in Test mode

Good info.

I did have an issue of receiving an error when I had the ChargeIt payment module set to CVV false

The script should be overriding the VM settings regardless of VM set to require CVV. This is according to VM developer's guide. I will have to investigate this. Maybe something changed on the required override params.

#44   Kagonesti

Kagonesti
  • Members
  • 13 posts
  • Real Name:Peter D
  • Gender:Male

Posted 01 June 2009 - 05:48

Great Mod, I've got it installed and working with a few tweaks for my own use.

Firstly, I haven't yet contributed any mods here, but I think the chargeit.php should include this for the state lookup (as I am in Canada, and Elavon also operates here.)

else if ($cState == 'Alberta')
$stateCode = 'AB';
else if ($cState == 'British Columbia')
$stateCode = 'BC';
else if ($cState == 'Manitoba')
$stateCode = 'MB';
else if ($cState == 'New Brunswick')
$stateCode = 'NB';
else if ($cState == 'Newfoundland')
$stateCode = 'NL';
else if ($cState == 'Northwest Territories')
$stateCode = 'NT';
else if ($cState == 'Nova Scotia')
$stateCode = 'NS';
else if ($cState == 'Nunavut')
$stateCode = 'NU';
else if ($cState == 'Ontario')
$stateCode = 'ON';
else if ($cState == 'Prince Edward Island')
$stateCode = 'PE';
else if ($cState == 'Quebec')
$stateCode = 'QC';
else if ($cState == 'Saskatchewan')
$stateCode = 'SK';
else if ($cState == 'Yukon Territory')
$stateCode = 'YT';

Secondly, as I am just learning PHP (My coding skills are all in other languages), I'd like to offer an idea for an improvement. Elavon charges Authorization fees for all attempts made, even if they fail. Comparing their last attempt to their new attempt for a duplicate could save some money in the end.

Still, a great mod, and it is much appreciated.

#45   yatahaze

yatahaze
  • Members
  • 164 posts
  • Real Name:Ryan
  • Location:Canada

Posted 01 June 2009 - 19:01

I just get redirected to the checkout_payment page after confirming my order, and the mail I receive contains no errors:

Error Message(s):
Address Verification Response:
CVV2 Verification Response:

Any idea what's wrong? The site is www.mostlymusic.biz.

#46   Kagonesti

Kagonesti
  • Members
  • 13 posts
  • Real Name:Peter D
  • Gender:Male

Posted 02 June 2009 - 18:59

Error Message(s):
Address Verification Response:
CVV2 Verification Response:


One thing I discovered, although it might be different in the US (I'm in Canada too) is that Elavon does not have CVV2 turned on by default. You need to contact them on that, if you want that feature. You get a response for CVV on default however - but you should still get the AVS reposnse code. As for why it is redirecting to checkout_process - that seems strange: did you add your account information to that php file? Did you log into virtual merchant and set your site listed in the https referrers?

#47   chriswest

chriswest
  • Members
  • 12 posts
  • Real Name:chris

Posted 12 June 2009 - 23:17

I just setup this up. Trying to work through the bugs, I did a search on the forum but couldnt find this. (below) how do I fix that?


Error Message(s): 4006. CVV2 Not Requested With Data. The CVV2 indicator was not identified in the authorization request.
Address Verification Response:
CVV2 Verification Response:

#48   chriswest

chriswest
  • Members
  • 12 posts
  • Real Name:chris

Posted 30 June 2009 - 05:36

I just setup this up. Trying to work through the bugs, I did a search on the forum but couldnt find this. (below) how do I fix that?


Error Message(s): 4006. CVV2 Not Requested With Data. The CVV2 indicator was not identified in the authorization request.
Address Verification Response:
CVV2 Verification Response:


Bump also of note is that amex works, visa doesnt, havent tried mastercard

Edited by chriswest, 30 June 2009 - 05:37.


#49   MiDeeClutzy

MiDeeClutzy
  • Members
  • 15 posts
  • Real Name:Deanna
  • Gender:Female
  • Location:Helena

Posted 03 July 2009 - 14:13

I am getting a whole pile of errors before I even get to enter the test cc info.

[codebox]Warning: payment(includes/languages/english/modules/payment/chargeit.php): failed to open stream: No such file or directory in /home/content/b/a/l/baluke/html/catalog/includes/classes/payment.php on line 38

Warning: payment(includes/languages/english/modules/payment/chargeit.php): failed to open stream: No such file or directory in /home/content/b/a/l/baluke/html/catalog/includes/classes/payment.php on line 38

Warning: payment(): Failed opening 'includes/languages/english/modules/payment/chargeit.php' for inclusion (include_path='.:/usr/local/lib/php') in /home/content/b/a/l/baluke/html/catalog/includes/classes/payment.php on line 38

Warning: payment(includes/modules/payment/chargeit.php): failed to open stream: No such file or directory in /home/content/b/a/l/baluke/html/catalog/includes/classes/payment.php on line 39

Warning: payment(includes/modules/payment/chargeit.php): failed to open stream: No such file or directory in /home/content/b/a/l/baluke/html/catalog/includes/classes/payment.php on line 39

Warning: payment(): Failed opening 'includes/modules/payment/chargeit.php' for inclusion (include_path='.:/usr/local/lib/php') in /home/content/b/a/l/baluke/html/catalog/includes/classes/payment.php on line 39

Fatal error: Cannot instantiate non-existent class: chargeit in /home/content/b/a/l/baluke/html/catalog/includes/classes/payment.php on line 41[/codebox]

I triple checked to see that the file was in the right spot and it is. Any idea on why it can't find it? Test site is here: www.werpatriots.com/catalog

#50   MiDeeClutzy

MiDeeClutzy
  • Members
  • 15 posts
  • Real Name:Deanna
  • Gender:Female
  • Location:Helena

Posted 03 July 2009 - 15:55

nevermind, i had some weird ftp stuff going on. sorry to bug ya.

#51   holmesj30

holmesj30
  • Members
  • 1 posts
  • Real Name:Jules
  • Gender:Male
  • Location:Hollywood, Florida

Posted 10 July 2009 - 03:37

Hi ,
I get this error "Credit Card Error: The card entered is being declined. This most often is due to incorrectly entered information. Please try re-entering your information"

I have read the entire list of posting here but I find my issue a bit different as I am using the demo site provided by VM at https://demo.myvirtu...Demo/process.do to do the credit card payment processing.

I have tried changing the url in the chargeit.php but it does not seem to get to through validation as I have worked with a level 2 tech at VM to no avail.
They do not see the transaction getting to their service at all.
I checked the payment fields were like the image you posted in page 1, post 14
I checked the system setup had the refferer correctly entered as in page 1, post 16

I installed a clean version of osCommerce then added teh module & follow the directions the only other change was the url for processing.
Does this module work with VM demo system or only with VM's production environment?

The boss wants to make sure osCommerce will work with VM before committing to using them.
Thanks in advance for your help

#52   asagb

asagb
  • Members
  • 1 posts
  • Real Name:Anthony Saia

Posted 24 July 2009 - 04:35

Are there any plans to add support for Recurring Payments in the near future?

Does anyone know what parameters need to be send to Virtual Merchant to indicate a recurring payment?

#53   cmxsevenfoldxmc

cmxsevenfoldxmc
  • Members
  • 47 posts
  • Real Name:Charlie
  • Gender:Male

Posted 24 July 2009 - 15:18

Hi there,

I installed the Virtual Merchant module a long time ago and the site was receiving orders successfully for a while. Then, I noticed that not all orders placed were going through.

I saw that the customers ordering were being charged (as per my bank statement) but I wasn't receiving a PO in my emails and they weren't receiving a confirmation at the end of the order, they would just be sent back to the home page.

Any idea why this is happening?

Here's my checkout_process.php page just in case anyone would like to help me find the problem:

<?php
/*
  $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $
  adapted for Separate Pricing Per Customer 2006/09/09 (attribute prices for groups, hide attributes from groups)

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

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

  include('includes/application_top.php');

// if the customer is not logged on, redirect them to the login page
  if (!tep_session_is_registered('customer_id')) {
	$navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
	tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
  }
  
  if (!tep_session_is_registered('sendto')) {
	tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
  }

  if ( (tep_not_null(MODULE_PAYMENT_INSTALLED)) && (!tep_session_is_registered('payment')) ) {
	tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
}

// avoid hack attempts during the checkout procedure by checking the internal cartID
  if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
	if ($cart->cartID != $cartID) {
	  tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
	}
  }

  include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);

// load selected payment module
  require(DIR_WS_CLASSES . 'payment.php');
  $payment_modules = new payment($payment);

// load the selected shipping module
  require(DIR_WS_CLASSES . 'shipping.php');
  $shipping_modules = new shipping($shipping);

  require(DIR_WS_CLASSES . 'order.php');
  $order = new order;

// check order total minimum
  if ($order->info['subtotal'] < MIN_ORDER_AMOUNT) {
	tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'NONSSL'));
  }

// load the before_process function from the payment modules
  $payment_modules->before_process();

  require(DIR_WS_CLASSES . 'order_total.php');
  $order_total_modules = new order_total;

  $order_totals = $order_total_modules->process();

  $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);
  }

  $customer_notification = (SEND_EMAILS == 'true') ? '1' : '0';
  $sql_data_array = array('orders_id' => $insert_id,
						  'orders_status_id' => $order->info['order_status'],
						  'date_added' => 'now()',
						  'customer_notified' => $customer_notification,
						  'comments' => $order->info['comments']);
  tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
  
  //kgt - discount coupons
  if( tep_session_is_registered( 'coupon' ) && is_object( $order->coupon ) ) {
	  $sql_data_array = array( 'coupons_id' => $order->coupon->coupon['coupons_id'],
							 'orders_id' => $insert_id );
	  tep_db_perform( TABLE_DISCOUNT_COUPONS_TO_ORDERS, $sql_data_array );
  }
  //end kgt - discount coupons

// 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']) . "'");

	$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();

//------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);
// BOF Separate Pricing Per Customer attribute_groups mod
  if (isset($_SESSION['sppc_customer_group_id']) && $_SESSION['sppc_customer_group_id'] != '0') {
	   $attributes_group_query = tep_db_query("select pag.options_values_price, pag.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_ATTRIBUTES_GROUPS . " pag using(products_attributes_id) where pa.products_id = '" . tep_get_prid($order->products[$i]['id']) . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pag.customers_group_id = '" . (int)$_SESSION['sppc_customer_group_id'] . "'");
		 if ($attributes_group = tep_db_fetch_array($attributes_group_query)) {
			 $attributes_values['options_values_price'] = $attributes_group['options_values_price'];
			 $attributes_values['price_prefix'] = $attributes_group['price_prefix'];
		 }
  }
// EOF Separate Pricing Per Customer attribute_groups mod


		$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);
		}
		$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 . ' ' . $insert_id . "\n" .
				 EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_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";
	}
  }
  $new_mail_subject = EMAIL_TEXT_SUBJECT . ' - ' . EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id;
tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], $new_mail_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, $new_mail_subject, $email_order, $order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address']);
  }

// load the after_process function from the payment modules
  $payment_modules->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');
  //kgt - discount coupons
  tep_session_unregister('coupon');
  //end kgt - discount coupons

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

  require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

Thank you all very much in advance!

#54   zelf

zelf
  • Members
  • 294 posts
  • Real Name:Nathan Zabaldo
  • Gender:Male
  • Location:Portland, OR

Posted 29 July 2009 - 06:21

Are there any plans to add support for Recurring Payments in the near future?

No plans at this point.

Does anyone know what parameters need to be send to Virtual Merchant to indicate a recurring payment?

Download the Virtual Merchant Developer guide for this one.

#55   zelf

zelf
  • Members
  • 294 posts
  • Real Name:Nathan Zabaldo
  • Gender:Male
  • Location:Portland, OR

Posted 29 July 2009 - 06:26

Does this module work with VM demo system or only with VM's production environment?

This module does not work with VM demo system. Why demo VM? Are you wondering if VM can process credit cards? What is the question exactly? If the question is, will it work as well or better than other systems like authorize.net then the answer is yes. As far as will this module work to charge credit cards, the answer is yes and it is being used by many, many people with no hassles. We use this module on our own websites and have perfect confidence in it. For testing the module simply enter live credit cards, which is the best test anyway, and then void them in your VM console.

#56   zelf

zelf
  • Members
  • 294 posts
  • Real Name:Nathan Zabaldo
  • Gender:Male
  • Location:Portland, OR

Posted 29 July 2009 - 06:28

Bump also of note is that amex works, visa doesnt, havent tried mastercard

AMEX, Visa, MC, and Discover work perfectly in this module. Would be pretty ridiculous to release a credit card module that did not accept Visa. Something must be wrong with your installation.

#57   inkman

inkman
  • Members
  • 32 posts
  • Real Name:Mr

Posted 01 August 2009 - 19:31

Thanks for the module.

I installed and went straight to live to test it out and got this error in my email:

Error Message(s): SERV NOT ALLOWED
Address Verification Response:
CVV2 Verification Response:

My Payment Fields in Virtual Merchant look just like yours.

#58   brilovett

brilovett
  • Members
  • 1 posts
  • Real Name:Brian Lovett

Posted 06 August 2009 - 18:39

I'm using an application called OSDate (http://www.tufat.com...ting_system.htm). According to http://www.tufat.com...e/payments.html,


osDate's payment gateway API is nearly identical to osCommerce's payment gateway API. This is because the osCommerce classes were used as a starting point for the osDate API. You can read more about osCommerce at http://www.oscommerce.org. It is an open-source e-commerce system.

The idea of an "interface" is that it provides a common set of functions across all possible payment gateways. This interface provides the following functions:

pre_confirmation_check()
confirmation()
process_button()
... and many others ...

I had just started writing a very basic interface to Virtual Merchant, only to find your solution as I was troubleshooting a defect. Has anyone used your solution for integration to OSDate? If not, is anyone interested in integrating this module into OSDate for a fee? Depending on the price, it might be worth it to me as I can then focus on other, more pressing bugs and enhancements. (Of course, I would also provide you a free annual Platinum membership to my dating site once it's released within the next month, as well as maybe a few extra memberships to hand out to your friends. ) Thanx.

- B.

#59   tigress

tigress
  • Members
  • 5 posts
  • Real Name:Living Out Loud

Posted 07 August 2009 - 19:23

I'm hoping I can get some assistance with this mod on my website. http://budurl.com/ljlb

During the checkout screen there aren't any fields for customers to input their billing information, creating an error message to appear.

Although I have reviewed this entire thread, I still believe I"m missing something in the installation steps.

Help! /blush.gif' class='bbc_emoticon' alt=':blush:' />

Thanks.

P.S. My test customer login is:
Username: tiffanie@thevirtualprofessionals.com, Password: virtual

Here's the error message received (however, there's no place to enter this information):


Credit Card Error


The first four digits of the number entered are: . If that number is correct, we do not accept that type of credit card. If it is wrong, please try again.
Name & Expiration Date Entered:- Expiration Date Entered: /

Edited by tigress, 07 August 2009 - 19:27.


#60   zelf

zelf
  • Members
  • 294 posts
  • Real Name:Nathan Zabaldo
  • Gender:Male
  • Location:Portland, OR

Posted 10 August 2009 - 20:18

Error Message(s): SERV NOT ALLOWED

This means that the Virtual Merchant processor is receiving an invalid request. You need to check the data being sent to the processor and look for errors in your configuration.