Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution]Paypal IPN - Devosc


devosc

Recommended Posts

Also you would have to diligently perform the same edits required by the ccgv contrib in the correponding includes/modules/payment/paypalcheckout_process.inc.php (or checkout_update.inc.php).

 

Greg,

I am a bit lost here with this CCGV (latest ver. - 5.10) contribution and the v2.8 IPN.

They seemed to work fine together without me updating anything in the IPN, but I just found out that the credit (vouchers) used are not being cleared from the customer cart after he retursn back from paypal payment page, I already had 1 customer using his credit twice on 2 consecutive orders...

Other than that they work fine together, the discount is forwarded to paypal and I have no other issues with them.

I read in many places that editing the IPN's checkout_process accordingly suppose to fix this issue, but I can't figure what to change because they are totally different files.

 

Below are my modified (the ICW comments are for the ccgv mod of course) /catalog/checkout_process.php

and my original v2.8 /catalog//includes/modules/payment/paypal/catalog/checkout_process.inc.php

 

Thanks in advance.

 

<?php
/*
 $Id: checkout_process.php,v 1.2.37.2 2004/01/01 14:00:29 Strider Exp $
 $Id: checkout_process.php,v 1.128 2003/07/24 18:00:29 Strider Exp $
 $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $
 $Id: checkout_process.php,v 1.6.2.1 2003/05/03 23:41:23 wilt Exp $

 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');
 if ($credit_covers) $payment=''; //ICW added for CREDIT CLASS
 $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;

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

// 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();
   $order_total_modules->update_credit_account($i);//ICW ADDED FOR CREDIT CLASS SYSTEM
//------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);

       $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";
 }
$order_total_modules->apply_credit();//ICW ADDED FOR CREDIT CLASS SYSTEM
// 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";
   }
 }
 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
 $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');
if(tep_session_is_registered('credit_covers')) tep_session_unregister('credit_covers');
 $order_total_modules->clear_posts();//ICW ADDED FOR CREDIT CLASS SYSTEM

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

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

 

 

/catalog//includes/modules/payment/paypal/catalog/checkout_process.inc.php:

 

 

<?php
/*
 $Id: checkout_process.inc.php,v 2.8 2004/09/11 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, $PayPal_osC, $customer_id,
        $sendto, $billto, $shipping, $payment, $language, $currency, $languages_id, $order_totals;

 require_once(DIR_WS_INCLUDES . 'modules/payment/paypal/database_tables.inc.php');

 if(!class_exists('order_total')) {
   include_once(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' => $this->codeTitle,
                         '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,
                         'last_modified' => 'now()',
                         'currency' => $order->info['currency'],
                         'currency_value' => $order->info['currency_value']);
  $session_exists = false;
  if(tep_session_is_registered('PayPal_osC')) {
    $orders_session_query = tep_db_query("select osi.orders_id, o.payment_id from " . TABLE_ORDERS_SESSION_INFO . " osi left join " . TABLE_ORDERS . " o on osi.orders_id = o.orders_id where osi.txn_signature ='" . tep_db_input($PayPal_osC->txn_signature) . "'");
    $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['payment_id'] == '0' ) {
      $session_exists = true;
      $this->orders_id = $orders_check['orders_id'];
    }
  }

  if($session_exists) {
   tep_db_perform(TABLE_ORDERS, $sql_data_array, 'update', "orders_id = '" . (int)$this->orders_id . "'");
  } else {
   $sql_data_array['date_purchased'] = 'now()';
   tep_db_perform(TABLE_ORDERS, $sql_data_array);
   $this->orders_id = tep_db_insert_id();
  }

if($session_exists) {
   tep_db_query("delete from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$this->orders_id . "'");
 }
 for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
   $sql_data_array = array('orders_id' => (int)$this->orders_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($session_exists) {
   tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array, 'update', "orders_id = '" . (int)$this->orders_id . "'");

   tep_db_query("delete from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$this->orders_id . "'");
   tep_db_query("delete from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$this->orders_id . "'");
 } else {
   $sql_data_array['orders_id'] = $this->orders_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' => (int)$this->orders_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' => (int)$this->orders_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,
                         'firstname' => $order->billing['firstname'],
                         'lastname' =>  $order->billing['lastname'],
                         'payment' => $payment,
                         'payment_title' => $this->codeTitle,
                         'payment_amount' => $this->grossPaymentAmount($this->currency()),
                         'payment_currency' => $this->currency(),
                         'payment_currency_val' => $currencies->get_value($this->currency()),
                         'language' => $language,
                         'language_id' => $languages_id,
                         'currency' => $currency,
                         'currency_value' => $currencies->get_value($currency),
                         'content_type' => $order->content_type,
                         'txn_signature' => $this->setTransactionID());

 if($session_exists) {
   tep_db_perform(TABLE_ORDERS_SESSION_INFO, $sql_data_array, 'update', "orders_id = '" . (int)$this->orders_id . "'");
   $PayPal_osC->txn_signature = $this->digest;
 } else {
   $sql_data_array['orders_id'] = (int)$this->orders_id;
   tep_db_perform(TABLE_ORDERS_SESSION_INFO, $sql_data_array);
   $PayPal_osC = new PayPal_osC($this->orders_id,$this->digest);
   tep_session_register('PayPal_osC');
 }
 require(DIR_WS_INCLUDES . 'modules/payment/paypal/catalog/checkout_splash.inc.php');
?>

Link to comment
Share on other sites

  • Replies 2.1k
  • Created
  • Last Reply

Top Posters In This Topic

Can anyone take a quick look at my catalog/admin/orders.php file? The install instructions result in an error when I make the required code changes. This is the error I am getting when I make the exact code changes that the install file requires...

 

Parse error: parse error, unexpected T_STRING, expecting T_CASE or T_DEFAULT or '}' in /home/username/public_html/store/admin/orders.php on line 46

 

 

I have been banging my head on this for about 2 weeks now and cannot figure out what is wrong. Thanks!

 

-Aaron

Link to comment
Share on other sites

Mikey,

 

I'm having exactly the same problem. I posted it under Strider's CCGV thread and at least one person said that he is experiencing the same problem.

 

I have tried both Paypal v0.981 and then this one (v2.8) and the results are the same. This is really a pain and there must be some error when these two contributions are combined.

 

Wendy

Greg,

I am a bit lost here with this CCGV (latest ver. - 5.10) contribution and the v2.8 IPN.

They seemed to work fine together without me updating anything in the IPN, but I just found out that the credit (vouchers) used are not being cleared from the customer cart after he retursn back from paypal payment page, I already had 1 customer using his credit twice on 2 consecutive orders...

Other than that they work fine together, the discount is forwarded to paypal and I have no other issues with them.

I read in many places that editing the IPN's checkout_process accordingly suppose to fix this issue, but I can't figure what to change because they are totally different files.

Link to comment
Share on other sites

Thanks greg for that, put the # where you suggested and i got this?

 

Error

SQL-query:

 

# osCommerce, Open Source E-Commerce Solutions

# http://www.oscommerce.com

#

# DevosC, Developing open source Code

# http://www.devosc.com

#

# Copyright ? 2003 osCommerce

# Copyright ? 2004 DevosC.com

#

# Released under the GNU General Public License

#ALTER TABLE orders ADD payment_id INT( 11 ) DEFAULT '0' NOT NULL;

ALTER TABLE orders_products_attributes ADD products_options_id INT( 11 ) DEFAULT '0' NOT NULL

 

:(

 

Any ideas?

Edited by Jezthomp
Link to comment
Share on other sites

Mikey,

 

I'm having exactly the same problem.? I posted it under Strider's CCGV thread and at least one person said that he is experiencing the same problem.?

 

I have tried both Paypal v0.981 and then this one (v2.8) and the results are the same.? This is really a pain and there must be some error when these two contributions are combined.

 

Wendy

 

I don't think there is error when they are combined, but we do need to make some more (probably minor) modifications to the IPN checkout_process file (maybe other files too?).

Hopefully Greg can give us some more info... :rolleyes:

Edited by dr_lucas
Link to comment
Share on other sites

Jezthomp, The queries in the sql script should all have a semi-colon at the end, from your above post I couldn't see one on the second query but not sure whether that was a posting issue etc...

 

CCGV, I just had a quick look, it seems that some of these statements need to be in the checkout updateProducts class function; At the moment I don't want to make suggestions without the ability to test etc, and also I have asked 2 others who are more in know about CCGV to make a more formal response to this matter since I don't have the time at present to figure it out etc... Hopefully one of them will respond soon.......

 

Regards,

Greg.

"Any fool can know. The point is to understand." -- Albert Einstein

Link to comment
Share on other sites

Hopefully one of them will respond soon.......

 

Hopefully... :rolleyes:

Link to comment
Share on other sites

It did have a semi-colon.

 

Taken from sql

#ALTER TABLE orders ADD payment_id INT( 11 ) DEFAULT '0' NOT NULL;

 

ALTER TABLE orders_products_attributes ADD products_options_id INT( 11 ) DEFAULT '0' NOT NULL;

 

ALTER TABLE orders_products_attributes ADD products_options_values_id INT( 11 ) DEFAULT '0' NOT NULL;

 

What does the Sql error mean then?

 

:(

 

 

Thankyou for you help greg

Link to comment
Share on other sites

Well couldnt get that to work so used the upgrade from v2.8 sql even though i was on v2.7 and seems to work ok.

 

But it still doesnt transfer the cart amount to the paypal side?????

 

Doesny anybody know how or if it even can be done to transfer the cart contents so user doesnt have to input it themselfs???

 

Thankyou for any help, getting desperate now :(

Link to comment
Share on other sites

there's an extra /catalog/ reference in the above url, check your admin config somethings wrong.

 

Go for v2.9, have a quick look between the sql script between that of v2.8 and v2.9, if there is any syntax error should be easy to spot. v2.9 will give you the best results...

"Any fool can know. The point is to understand." -- Albert Einstein

Link to comment
Share on other sites

Okay folks, I apologize if this has already been covered in this thread, I really have tried to solve my own problem. I have installed v2.8 in a clean environment and been testing now. All seems to work as far as actually processing all orders, all totals are correct. When I run a test with IPN test panel, I end up seeing a blank page and no information gets passed. When I place an order, I receive PP's payment email and such but no IPN's are posting back at my website. I must have a config problem somewhere, but I can't find it. During the test, I do get sent to correct address(catalog/ipn.php) but nothing happens, just blank page, no post, no update. This is a great peice of work and I really need it for this client, I am using v2.6 on several other sites, but figured I should upgrade since I am also going to install CC/GV. Any ideas or posts where this has been dealt with? Craig :)

Happy Coding!

Craig Garrison Sr

Anything worth having, is worth working for.

Multi Vendor Shipping V1.1 Demo Catalog

3 Vendors, each category, "buy" a product from each category to see how MVS works during checkout.

Multi Vendor Shipping V1.1 Demo Admin

login: [email protected]

pass: mvs_demo

MVS Thread:

Multi-Vendor Shipping

My contribs:

Download Multi Vendor Shipping V1.1

Vendor Email

Vendor Info in easypopulate

EZ Price Updater

And more to come!

Link to comment
Share on other sites

Some additional info: the debug emails

------------------------------------------------------

Unknown Post

------------------------------------------------------

An unknown POST from ***.***.***.*** was received.

Are you running any tests?

 

------------------------------------------------------

PayPal Response

------------------------------------------------------

 

 

------------------------------------------------------

Connection Type

------------------------------------------------------

curl: 1 transport:  domain: www.paypal.com port: 

 

------------------------------------------------------

Email and Business ID config

------------------------------------------------------

Store Configuration Settings

Primary PayPal Email Address: MYSTORE@(^&$^&*.net

Business ID: info@@$$&^@$%.com

------------------------------------------------------

PayPal Configuration Settings

Primary PayPal Email Address:

Business ID:

 

PayPal Transaction ID:

 

------------------------------------------------------

Attention!

------------------------------------------------------

This is email has NOT been sent by PayPal.

 

You have received this email via the osCommerce PayPal_Shopping_Cart_IPN Contribution

 

To discontinue receiving this notice disable 'Debug Email Notifications' in your osCommerce PayPal configuration panel.

I notice that there is no info in the "PayPal Configuration Settings", is this normal from the test panel? Does this help anyone? It does not tell me a $@#^ thing. I am beginning to get frustrated. I thought maybe the Digest Key was the issue, but all changes there make no differnce. Have double checked the email addresses, if the Business ID address was wrong, I wouldn't be able to pay anyone anyway right? So if I can send the payment fine and get redirected back to the site fine, then that should mean the email addresses are ok, right? Have gone back through the install and can't find anything missing or not right. Re-uploaded all files to make sure no corruption took place. Installed CC/GV in test environment and still everything works beautifully except for the IPN info not posting at all. What have I done wrong? Craig :(

Happy Coding!

Craig Garrison Sr

Anything worth having, is worth working for.

Multi Vendor Shipping V1.1 Demo Catalog

3 Vendors, each category, "buy" a product from each category to see how MVS works during checkout.

Multi Vendor Shipping V1.1 Demo Admin

login: [email protected]

pass: mvs_demo

MVS Thread:

Multi-Vendor Shipping

My contribs:

Download Multi Vendor Shipping V1.1

Vendor Email

Vendor Info in easypopulate

EZ Price Updater

And more to come!

Link to comment
Share on other sites

Never mind. what's it I see here from someone's signature,"PEBCAK". That's me! Mixed up code from v2.6 and v2.8. Just plain stupid mistake. Craig :)

Happy Coding!

Craig Garrison Sr

Anything worth having, is worth working for.

Multi Vendor Shipping V1.1 Demo Catalog

3 Vendors, each category, "buy" a product from each category to see how MVS works during checkout.

Multi Vendor Shipping V1.1 Demo Admin

login: [email protected]

pass: mvs_demo

MVS Thread:

Multi-Vendor Shipping

My contribs:

Download Multi Vendor Shipping V1.1

Vendor Email

Vendor Info in easypopulate

EZ Price Updater

And more to come!

Link to comment
Share on other sites

Hi,

 

I recently installed 2.8 and it worked wonderfully.

 

I then installed the CCGV contribution, which also seems to work just fine except if the customer tries to pay by PayPal, as they cat passed to paypal, this error occurs:

 

 

Fatal error: Cannot redeclare class paypal in /usr/local/psa/home/vhosts/day3.co.uk/httpdocs/catalog/includes/modules/payment/paypal.php on line 20

 

 

Any ideas what this might be?

 

Many thanks,

 

Peter

Link to comment
Share on other sites

Hi,

 

I recently installed 2.8 and it worked wonderfully.

 

I then installed the CCGV contribution, which also seems to work just fine except if the customer tries to pay by PayPal, as they cat passed to paypal, this error occurs:

Fatal error: Cannot redeclare class paypal in /usr/local/psa/home/vhosts/day3.co.uk/httpdocs/catalog/includes/modules/payment/paypal.php on line 20

Any ideas what this might be?

 

Many thanks,

 

Peter

I had this problem with the "order_total" class, check your files for duplicates, mine was in checkout_confirmation.php, a duplicate "requires" like this:

 

require(DIR_WS_CLASSES . 'order_total.php');

 

delete the extra one and you should be in good shape. Crag :)

Edited by blucollarguy

Happy Coding!

Craig Garrison Sr

Anything worth having, is worth working for.

Multi Vendor Shipping V1.1 Demo Catalog

3 Vendors, each category, "buy" a product from each category to see how MVS works during checkout.

Multi Vendor Shipping V1.1 Demo Admin

login: [email protected]

pass: mvs_demo

MVS Thread:

Multi-Vendor Shipping

My contribs:

Download Multi Vendor Shipping V1.1

Vendor Email

Vendor Info in easypopulate

EZ Price Updater

And more to come!

Link to comment
Share on other sites

delete the extra one and you should be in good shape. Crag :)

 

Thanks, I tried looking through all the files and can't seem to see where there is duplication.... the funny thing is, it works OK if the customer trie to pay by Nochex or Check/Money Order, it's just PayPal that doesn't work, although it worked fine before I installed the CCGV contrib.

 

Any suggestions anyone?

 

Peter

Link to comment
Share on other sites

Thanks, I tried looking through all the files and can't seem to see where there is duplication.... the funny thing is, it works OK if the customer trie to pay by Nochex or Check/Money Order, it's just PayPal that doesn't work, although it worked fine before I installed the CCGV contrib.

 

Any suggestions anyone?

 

Peter

Your issue must be in either checkout_confirmation.php or checkout_process.php. You need to look very closely for ANY duplicate entries. For instance

// load selected payment module

  require(DIR_WS_CLASSES . 'payment.php');

  if ($credit_covers) $payment=''; //ICW added for CREDIT CLASS

  $payment_modules = new payment($payment);

could be duped in either file. Craig :)

Happy Coding!

Craig Garrison Sr

Anything worth having, is worth working for.

Multi Vendor Shipping V1.1 Demo Catalog

3 Vendors, each category, "buy" a product from each category to see how MVS works during checkout.

Multi Vendor Shipping V1.1 Demo Admin

login: [email protected]

pass: mvs_demo

MVS Thread:

Multi-Vendor Shipping

My contribs:

Download Multi Vendor Shipping V1.1

Vendor Email

Vendor Info in easypopulate

EZ Price Updater

And more to come!

Link to comment
Share on other sites

Your issue must be in either checkout_confirmation.php or checkout_process.php. You need to look very closely for ANY duplicate entries. For instance  could be duped in either file. Craig :)

 

 

My checkout_process.php had:

 

// load selected payment module

require(DIR_WS_CLASSES . 'payment.php');

$payment_modules = new payment($payment);

if ($credit_covers) $payment=''; //ICW added for CREDIT CLASS

$payment_modules = new payment($payment);

 

When I took out the first $payment_modules = new payment($payment); it magically started working.

 

Thanks for posting the code... I was looking for the wrong thing being duplicated!

 

I appreciate your help, best wishes,

 

Peter

Link to comment
Share on other sites

My checkout_process.php had:

 

// load selected payment module

  require(DIR_WS_CLASSES . 'payment.php');

  $payment_modules = new payment($payment);

if ($credit_covers) $payment=''; //ICW added for CREDIT CLASS

  $payment_modules = new payment($payment);

 

When I took out the first $payment_modules = new payment($payment); it magically started working.

 

Thanks for posting the code... I was looking for the wrong thing being duplicated!

 

I appreciate your help, best wishes,

 

Peter

Glad to help, Craig :)

Happy Coding!

Craig Garrison Sr

Anything worth having, is worth working for.

Multi Vendor Shipping V1.1 Demo Catalog

3 Vendors, each category, "buy" a product from each category to see how MVS works during checkout.

Multi Vendor Shipping V1.1 Demo Admin

login: [email protected]

pass: mvs_demo

MVS Thread:

Multi-Vendor Shipping

My contribs:

Download Multi Vendor Shipping V1.1

Vendor Email

Vendor Info in easypopulate

EZ Price Updater

And more to come!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...