jswan Posted May 29, 2004 Posted May 29, 2004 Has anyone gotten these two contributions to play nice together? I'm really stumped. When I edit catalog/checkout_process.php according to directions, the only orders_id that is returned to the database is "0". If I do more than one order, then the subsequent orders get an error because they are trying to write the same orders_id value ("0") to the "orders" table. Looking at the files for IPN, it appears as though I also need to work it out so that paypal_ipn_id is changed as well, but I don't know where to do it. Can anyone point me in the right direction? Thanks, Jason Quote
jswan Posted May 30, 2004 Author Posted May 30, 2004 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'); ?> Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.