Gregbaboolal sent me this code to replace/edit catalog/includes/modules/payment/paypal/checkout_process.php. It may help folks who need to get random order numbers and PayPal IPN working together. Changes to the original file are identified by //Begin random order and //End random order. There are only three sections that need to be changed, so it will probably be good to do them by cut-and-paste.
<?php
/*
?$Id: checkout_process.php,v 2.2 2004/04/24 devosc Exp $
?osCommerce, Open Source E-Commerce Solutions
?http://www.oscommerce.com
?DevosC, Developing open source Code
?http://www.devosc.com
?Copyright (c) 2003 osCommerce
?Copyright (c) 2004 DevosC.com
?Released under the GNU General Public License
*/
?global $payment_modules, $shipping_modules, $order, $currencies, $cart, $customer_id,
? ? ? ? $sendto, $billto, $shipping, $payment, $language, $currency, $languages_id;
?require(DIR_WS_INCLUDES . 'modules/payment/paypal/database_tables.php');
?//require(DIR_WS_INCLUDES . 'modules/payment/paypal/functions.php');
?require(DIR_WS_CLASSES . 'order_total.php');
?$order_total_modules = new order_total;
?$order_totals = $order_total_modules->process();
//Begin random order
?$random_addition = rand(7,15);
?$last_order_id = tep_db_query("select orders_id from " . TABLE_ORDERS . " o order by o.orders_id desc limit 1");
?$old_order_id = tep_db_fetch_array($last_order_id);
?$ordernum = ($old_order_id['orders_id'] + $random_addition);
//End random order
//Begin random order
// ?$sql_data_array = array('customers_id' => $customer_id,
? ?$sql_data_array = array('orders_id' => $ordernum,
? ? ? ? ? ? ? ? ? ? ? ? ?'customers_id' => $customer_id,
//End random order
? ? ? ? ? ? ? ? ? ? ? ? ?'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'],
? ? ? ? ? ? ? ? ? ? ? ? ?'orders_status' => MODULE_PAYMENT_PAYPAL_PROCESSING_STATUS_ID,
? ? ? ? ? ? ? ? ? ? ? ? ?'currency' => $order->info['currency'],
? ? ? ? ? ? ? ? ? ? ? ? ?'currency_value' => $order->info['currency_value']);
? $order_exists = false;
? if(tep_session_is_registered('paypal_order_id')) {
? ? $orders_session_query = tep_db_query("select os.orders_id as orders_id, o.paypal_ipn_id from " . TABLE_ORDERS_SESSION_INFO . " os left join " . TABLE_ORDERS . " o on os.orders_id = o.orders_id where o.orders_id ='" . $paypal_order_id . "'");
? ? $orders_check = tep_db_fetch_array($orders_session_query);
? ? //Now check to see whether order session info exists AND that this order does not currently
? ? //have an IPN.
? ? if ($orders_check['orders_id'] > 0 && ?$orders_check['paypal_ipn_id'] == '0' ) {
? ? ? $order_exists = true;
? ? }
? }
? if($order_exists) {
? ?$sql_data_array['last_modified'] = 'now()';
? ?tep_db_perform(TABLE_ORDERS, $sql_data_array, 'update', "orders_id = '" . $paypal_order_id . "'");
? } else {
? ?$sql_data_array['date_purchased'] = 'now()';
? ?tep_db_perform(TABLE_ORDERS, $sql_data_array);
? ?global $paypal_order_id;
//Begin random order
? ?//$paypal_order_id = tep_db_insert_id();
? ?$paypal_order_id = $ordernum;
//End random order
? }
if($order_exists) {
? ?tep_db_query("delete from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . $paypal_order_id . "'");
?}
?for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
? ?$sql_data_array = array('orders_id' => $paypal_order_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);
?}
?$sql_data_array = array('orders_status_id' => MODULE_PAYMENT_PAYPAL_PROCESSING_STATUS_ID,
? ? ? ? ? ? ? ? ? ? ? ? ?'date_added' => 'now()',
? ? ? ? ? ? ? ? ? ? ? ? ?'customer_notified' => 0,
? ? ? ? ? ? ? ? ? ? ? ? ?'comments' => $order->info['comments']);
?if($order_exists) {
? ?tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array, 'update', "orders_id = '" . $paypal_order_id . "'");
? ?tep_db_query("delete from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . $paypal_order_id . "'");
? ?tep_db_query("delete from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . $paypal_order_id . "'");
?} else {
? ?$sql_data_array['orders_id'] = $paypal_order_id;
? ?tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
?}
?for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
? ?$sql_data_array = array('orders_id' => $paypal_order_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';
? ?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' => $paypal_order_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'orders_products_id' => $order_products_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'products_options_id' => $order->products[$i]['attributes'][$j]['option_id'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'products_options' => $attributes_values['products_options_name'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'products_options_values_id' => $order->products[$i]['attributes'][$j]['value_id'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'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);
? ? ?}
? ?}
?}
// store the session info for notification update - gsb
?$sql_data_array = array('sendto' => $sendto,
? ? ? ? ? ? ? ? ? ? ? ? ?'billto' => $billto,
? ? ? ? ? ? ? ? ? ? ? ? ?//'shipping' => serialize($shipping),
? ? ? ? ? ? ? ? ? ? ? ? ?//'payment' => $payment,
? ? ? ? ? ? ? ? ? ? ? ? ?'language' => $language,
? ? ? ? ? ? ? ? ? ? ? ? ?'currency' => $currency,
? ? ? ? ? ? ? ? ? ? ? ? ?'content_type' => $order->content_type);
?if($order_exists) {
? ?tep_db_perform(TABLE_ORDERS_SESSION_INFO, $sql_data_array, 'update', "orders_id = '" . $paypal_order_id . "'");
?} else {
? ?$sql_data_array['orders_id'] = $paypal_order_id;
? ?tep_db_perform(TABLE_ORDERS_SESSION_INFO, $sql_data_array);
? ?tep_session_register('paypal_order_id');
?}
?include(DIR_WS_INCLUDES . 'modules/payment/paypal/processing.tpl.php');
?>