Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Checkout confirmation redirecting to login


BenWachtel_290713

Recommended Posts

I am having an issue where if the customer does not supply proper credit card info (using PayPal Payments Pro module) OR does not supply Purchase Order info (using Purchase Order payment module) on the checkout_confirmation.php page,after clicking "Confirm Order", they are redirected back to the login page, instead of getting an error message and an opportunity to enter the correct information. People are getting confused and can't complete the order because they keep getting looped back with no information as to what they did wrong.

 

I'm using osCommerce 2.3.1.

 

Here is the code from the checkout_confirmation.php page:

 

<?php
/*
 $Id$
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2010 osCommerce
 Released under the GNU General Public License
*/
 require('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 there is nothing in the customers cart, redirect them to the shopping cart page
 if ($cart->count_contents() < 1) {
   tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
 }
// 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'));
   }
 }
// if no shipping method has been selected, redirect the customer to the shipping method selection page
 if (!tep_session_is_registered('shipping')) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
 }
 if (!tep_session_is_registered('payment')) tep_session_register('payment');
 if (isset($HTTP_POST_VARS['payment'])) $payment = $HTTP_POST_VARS['payment'];
 if (!tep_session_is_registered('comments')) tep_session_register('comments');
 if (tep_not_null($HTTP_POST_VARS['comments'])) {
   $comments = tep_db_prepare_input($HTTP_POST_VARS['comments']);
 }
// load the selected payment module
 require(DIR_WS_CLASSES . 'payment.php');
 $payment_modules = new payment($payment);
 require(DIR_WS_CLASSES . 'order.php');
 $order = new order;
 $payment_modules->update_status();
 if ( ($payment_modules->selected_module != $payment) || ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
 }
 if (is_array($payment_modules->modules)) {
   $payment_modules->pre_confirmation_check();
 }
// load the selected shipping module
 require(DIR_WS_CLASSES . 'shipping.php');
 $shipping_modules = new shipping($shipping);
 require(DIR_WS_CLASSES . 'order_total.php');
 $order_total_modules = new order_total;
 $order_total_modules->process();
// Stock Check
 $any_out_of_stock = false;

// begin Bundled Products
 $any_bundle_only = false;
 $products = $cart->get_products();
 for ($i=0, $n=sizeof($products); $i<$n; $i++) {
   if ($products[$i]['sold_in_bundle_only'] == 'yes') $any_bundle_only = true;
 }
 if ($any_bundle_only) tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
// Stock Check
 $any_out_of_stock = false;
 if (STOCK_CHECK == 'true') {
   $bundle_contents = array();
   $bundle_values = array();
   $base_product_ids_in_order = array();
   $bundle_qty_ordered = array();
   for ($i=0, $n=sizeof($products); $i<$n; $i++) {
  if ($products[$i]['bundle'] == "yes") {
    $tmp = get_all_bundle_products($products[$i]['id']);
    $bundle_values[$products[$i]['id']] = $products[$i]['final_price'];
    $bundle_contents[$products[$i]['id']] = $tmp;
    $bundle_qty_ordered[$products[$i]['id']] = $products[$i]['quantity'];
    foreach ($tmp as $id => $qty) {
	  if (!in_array($id, $base_product_ids_in_order)) $base_product_ids_in_order[] = $id; // save unique ids
    }
  } else {
    if (!in_array($products[$i]['id'], $base_product_ids_in_order)) $base_product_ids_in_order[] = $products[$i]['id']; // save unique ids
  }
   }
   $product_on_hand = array();
   foreach ($base_product_ids_in_order as $id) {
  // get quantity on hand for every unique product contained in this order except bundles
  $product_on_hand[$id] = tep_get_products_stock($id);
   }
   if (!empty($bundle_values)) { // if bundles exist in order
  arsort($bundle_values); // sort array so bundle ids with highest value come first
  foreach ($bundle_values as $bid => $bprice) {
    $bundles_available = array();
    foreach ($bundle_contents[$bid] as $pid => $qty) {
	  $bundles_available[] = intval($product_on_hand[$pid] / $qty);
    }
    $product_on_hand[$bid] = min($bundles_available); // max number of this bundle we can make with product on hand
    $deduct = min($product_on_hand[$bid], $bundle_qty_ordered[$bid]); // assume we sell as many of the bundle as possible
    foreach ($bundle_contents[$bid] as $pid => $qty) {
	  // reduce product left on hand by number sold in this bundle before checking next less expensive bundle
	  // also lets us know how many we have left to sell individually
	  $product_on_hand[$pid] -= ($deduct * $qty);
    }
  }
   }
   for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
  if ($product_on_hand[$order->products[$i]['id']] < $order->products[$i]['qty']) {
    $any_out_of_stock = true;
  }
   }
   // end Bundled Products

   // Out of Stock
   if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
  tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
   }
 }
 require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_CONFIRMATION);
 $breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
 $breadcrumb->add(NAVBAR_TITLE_2);
 require(DIR_WS_INCLUDES . 'template_top.php');
?>
<h1><?php echo HEADING_TITLE; ?></h1>
<?php
 if (isset($$payment->form_action_url)) {
   $form_action_url = $$payment->form_action_url;
 } else {
   $form_action_url = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
 }
 echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');
?>
<div class="contentContainer">
 <h2><?php echo HEADING_SHIPPING_INFORMATION; ?></h2>
 <div class="contentText">
   <table border="0" width="100%" cellspacing="1" cellpadding="2">
  <tr>
<?php
 if ($sendto != false) {
?>
    <td width="30%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
	  <tr>
	    <td><?php echo '<strong>' . HEADING_DELIVERY_ADDRESS . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
	  </tr>
	  <tr>
	    <td><?php echo tep_address_format($order->delivery['format_id'], $order->delivery, 1, ' ', '<br />'); ?></td>
	  </tr>
<?php
   if ($order->info['shipping_method']) {
?>
	  <tr>
	    <td><?php echo '<strong>' . HEADING_SHIPPING_METHOD . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
	  </tr>
	  <tr>
	    <td><?php echo $order->info['shipping_method']; ?></td>
	  </tr>
<?php
   }
?>
    </table></td>
<?php
 }
?>
    <td width="<?php echo (($sendto != false) ? '70%' : '100%'); ?>" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
 if (sizeof($order->info['tax_groups']) > 1) {
?>
	  <tr>
	    <td colspan="2"><?php echo '<strong>' . HEADING_PRODUCTS . '</strong> <a href="' . tep_href_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
	    <td align="right"><strong><?php echo HEADING_TAX; ?></strong></td>
	    <td align="right"><strong><?php echo HEADING_TOTAL; ?></strong></td>
	  </tr>
<?php
 } else {
?>
	  <tr>
	    <td colspan="3"><?php echo '<strong>' . HEADING_PRODUCTS . '</strong> <a href="' . tep_href_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
	  </tr>
<?php
 }
 for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
   echo '		  <tr>' . "\n" .
	 '		    <td align="right" valign="top" width="30">' . $order->products[$i]['qty'] . ' x</td>' . "\n" .
	 '		    <td valign="top">' . $order->products[$i]['name'];
/*
   if (STOCK_CHECK == 'true') {
  echo tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty']);
   }
*/


   if (STOCK_CHECK == 'true') {
  // begin Bundled Products
  // check against product left on hand after bundles have been sold
  $stock_check = '';
  if ($product_on_hand[$order->products[$i]['id']] <= 0) {
    $stock_check = '<span class="markProductOutOfStock">' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . '<br>' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . TEXT_NOT_AVAILABLEINSTOCK . '</span>';
  } elseif ($product_on_hand[$order->products[$i]['id']] < $order->products[$i]['qty']) {
    $stock_check = '<span class="markProductOutOfStock">' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . '<br>' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . TEXT_ONLY_THIS_AVAILABLEINSTOCK1 . $product_on_hand[$order->products[$i]['id']] . TEXT_ONLY_THIS_AVAILABLEINSTOCK2 . '</span>';
  }
  echo $stock_check;
  // end Bundled Products
   }
   if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
  for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
    echo '<br /><nobr><small> <i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'] . '</i></small></nobr>';
  }
   }
   echo '</td>' . "\n";
   if (sizeof($order->info['tax_groups']) > 1) echo '		    <td valign="top" align="right">' . tep_display_tax_value($order->products[$i]['tax']) . '%</td>' . "\n";
   echo '		    <td align="right" valign="top">' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . '</td>' . "\n" .
	 '		  </tr>' . "\n";
 }
?>
    </table></td>
  </tr>
   </table>
 </div>
 <h2><?php echo HEADING_BILLING_INFORMATION; ?></h2>
 <div class="contentText">
   <table border="0" width="100%" cellspacing="1" cellpadding="2">
  <tr>
    <td width="30%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
	  <tr>
	    <td><?php echo '<strong>' . HEADING_BILLING_ADDRESS . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
	  </tr>
	  <tr>
	    <td><?php echo tep_address_format($order->billing['format_id'], $order->billing, 1, ' ', '<br />'); ?></td>
	  </tr>
	  <tr>
	    <td><?php echo '<strong>' . HEADING_PAYMENT_METHOD . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
	  </tr>
	  <tr>
	    <td><?php echo $order->info['payment_method']; ?></td>
	  </tr>
    </table></td>
    <td width="70%" valign="top" align="right"><table border="0" cellspacing="0" cellpadding="2">
<?php
 if (MODULE_ORDER_TOTAL_INSTALLED) {
   echo $order_total_modules->output();
 }
?>
    </table></td>
  </tr>
   </table>
 </div>
<?php
 if (is_array($payment_modules->modules)) {
   if ($confirmation = $payment_modules->confirmation()) {
?>
 <h2><?php echo HEADING_PAYMENT_INFORMATION; ?></h2>
 <div class="contentText">
   <table border="0" cellspacing="0" cellpadding="2">
  <tr>
    <td colspan="4"><?php echo $confirmation['title']; ?></td>
  </tr>
<?php
  for ($i=0, $n=sizeof($confirmation['fields']); $i<$n; $i++) {
?>
  <tr>
    <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
    <td class="main"><?php echo $confirmation['fields'][$i]['title']; ?></td>
    <td><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
    <td class="main"><?php echo $confirmation['fields'][$i]['field']; ?></td>
  </tr>
<?php
  }
?>
   </table>
 </div>
<?php
   }
 }
 if (tep_not_null($order->info['comments'])) {
?>
 <h2><?php echo '<strong>' . HEADING_ORDER_COMMENTS . '</strong> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></h2>
 <div class="contentText">
   <?php echo nl2br(tep_output_string_protected($order->info['comments'])) . tep_draw_hidden_field('comments', $order->info['comments']); ?>
 </div>
<?php
 }
?>
 <div class="contentText">
   <div style="float: left; width: 60%; padding-top: 5px; padding-left: 15%;">
  <div id="coProgressBar" style="height: 5px;"></div>
  <table border="0" width="100%" cellspacing="0" cellpadding="2">
    <tr>
	  <td align="center" width="33%" class="checkoutBarFrom"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '" class="checkoutBarFrom">' . CHECKOUT_BAR_DELIVERY . '</a>'; ?></td>
	  <td align="center" width="33%" class="checkoutBarFrom"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '" class="checkoutBarFrom">' . CHECKOUT_BAR_PAYMENT . '</a>'; ?></td>
	  <td align="center" width="33%" class="checkoutBarCurrent"><?php echo CHECKOUT_BAR_CONFIRMATION; ?></td>
    </tr>
  </table>
   </div>
   <div style="float: right;">
<?php
 if (is_array($payment_modules->modules)) {
   echo $payment_modules->process_button();
 }
 echo tep_draw_button(IMAGE_BUTTON_CONFIRM_ORDER, 'check', null, 'primary');
?>
   </div>
 </div>
</div>
<script type="text/javascript">
$('#coProgressBar').progressbar({
 value: 100
});
</script>
</form>
<?php
 require(DIR_WS_INCLUDES . 'template_bottom.php');
 require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...