Jump to content
Strider

Credit Class/Gift Vouchers/Discount Coupons 5.10

Recommended Posts

Hi, I got this contribnution installed and seems to works.

 

The only problem I'm having is that I can't delete discout coupons once i create them.

 

Simply deleting the coupons from the DB doesn't work, as after deleting the, the shop doesn't work anymore.

 

I think it's because the coupon table is chanined with the orders table.

 

Anyone know how to get rid of the severals test coupons i created ?

 

thank you for any help

 

sincerely

 

roberto

Share this post


Link to post
Share on other sites

Does the contrib allow for a voucher and a coupon? I have the contrib working succesfully. I tried using both a voucher and a coupon and it only took one. Does anyone know if it can be configured to support this?

Share this post


Link to post
Share on other sites

I've been tracking this issue all the way from 2003, but can't find a solution.

 

Does anyone know of a solution to this problem?

 

There are two payment options, a Credit Card (Authorize.net) and a gift voucher balance. The gift voucher balance is greater than the total, so I check the box that says "Tick to use Gift Voucher account balance" and I then click continue. A Credit Card error is returned that says "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."

 

I get the Credit Card error because I didn't enter a CC number, but I am paying the total with my Voucher balance and not the Credit Card.

 

Any Help would be appreciated.

Share this post


Link to post
Share on other sites

arg... I have been messing with the Gift Voucher Paypal-IPN fix for the last few hours and it just won't work! I triple checked my code copying and pasting and it all looks exactly as it should. I do not get any errors, it just does not transfer the total properly. I tried creating brand new coupons after the install and going over to a new computer to test everything. But still it pulls the wrong info into Paypal. I have alot of customers and a promotion going on right now that no one can take advantage of. I have searched the forums extensively but all I found were the references to the CCVG 5.14 + Paypal_IPN fix. The directions and steps were very clear so I have NO idea what I am doing wrong.

 

here is my entire paypal_ipn code right now. (in /catalog/includes/modules/payment)

PLEASE HELP! =(

<?php

/*

 $Id: paypal_ipn.php,v 1.1.2.11 2004/12/05 19:14:35 hpdl Exp $

 

 osCommerce, Open Source E-Commerce Solutions

 http://www.oscommerce.com

 

 Copyright (c) 2004 osCommerce

 

 Released under the GNU General Public License

*/

 

 class paypal_ipn {

   var $code, $title, $description, $enabled, $identifier;

 

// class constructor

   function paypal_ipn() {

     global $order;

 

     $this->code = 'paypal_ipn';

     $this->title = MODULE_PAYMENT_PAYPAL_IPN_TEXT_TITLE;

     $this->description = MODULE_PAYMENT_PAYPAL_IPN_TEXT_DESCRIPTION;

     $this->sort_order = MODULE_PAYMENT_PAYPAL_IPN_SORT_ORDER;

     $this->enabled = ((MODULE_PAYMENT_PAYPAL_IPN_STATUS == 'True') ? true : false);

     $this->identifier = 'osCommerce PayPal IPN v1.0';

 

     if ((int)MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID > 0) {

       $this->order_status = MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID;

     }

 

     if (is_object($order)) $this->update_status();

 

     if (MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER == 'Live') {

       $this->form_action_url = 'https://www.paypal.com/cgi-bin/webscr';

     } else {

       $this->form_action_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';

     }

   }

 

// class methods

   function update_status() {

     global $order;

 

     if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_PAYPAL_IPN_ZONE > 0) ) {

       $check_flag = false;

       $check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_PAYPAL_IPN_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");

       while ($check = tep_db_fetch_array($check_query)) {

         if ($check['zone_id'] < 1) {

           $check_flag = true;

           break;

         } elseif ($check['zone_id'] == $order->billing['zone_id']) {

           $check_flag = true;

           break;

         }

       }

 

       if ($check_flag == false) {

         $this->enabled = false;

       }

     }

   }

 

   function javascript_validation() {

     return false;

   }

 

   function selection() {

     return array('id' => $this->code,

                  'module' => $this->title);

   }

 

   function pre_confirmation_check() {

     return false;

   }

 

   function confirmation() {

     global $cartID, $cart_PayPal_IPN_ID, $customer_id, $languages_id, $order, $order_total_modules;

 

     if (tep_session_is_registered('cartID')) {

       $insert_order = false;

 

       if (tep_session_is_registered('cart_PayPal_IPN_ID')) {

         $order_id = substr($cart_PayPal_IPN_ID, strpos($cart_PayPal_IPN_ID, '-')+1);

 

         $curr_check = tep_db_query("select currency from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");

         $curr = tep_db_fetch_array($curr_check);

 

         if ( ($curr['currency'] != $order->info['currency']) || ($cartID != substr($cart_PayPal_IPN_ID, 0, strlen($cartID))) ) {

           $check_query = tep_db_query('select orders_id from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '" limit 1');

 

           if (tep_db_num_rows($check_query) < 1) {

             tep_db_query('delete from ' . TABLE_ORDERS . ' where orders_id = "' . (int)$order_id . '"');

             tep_db_query('delete from ' . TABLE_ORDERS_TOTAL . ' where orders_id = "' . (int)$order_id . '"');

             tep_db_query('delete from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '"');

             tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS . ' where orders_id = "' . (int)$order_id . '"');

             tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ' where orders_id = "' . (int)$order_id . '"');

             tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_DOWNLOAD . ' where orders_id = "' . (int)$order_id . '"');

           }

 

           $insert_order = true;

         }

       } else {

         $insert_order = true;

       }

 

       if ($insert_order == true) {

         $order_totals = array();

         if (is_array($order_total_modules->modules)) {

           reset($order_total_modules->modules);

           while (list(, $value) = each($order_total_modules->modules)) {

             $class = substr($value, 0, strrpos($value, '.'));

             if ($GLOBALS[$class]->enabled) {

               for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++) {

                 if (tep_not_null($GLOBALS[$class]->output[$i]['title']) && tep_not_null($GLOBALS[$class]->output[$i]['text'])) {

                   $order_totals[] = array('code' => $GLOBALS[$class]->code,

                                           'title' => $GLOBALS[$class]->output[$i]['title'],

                                           'text' => $GLOBALS[$class]->output[$i]['text'],

                                           'value' => $GLOBALS[$class]->output[$i]['value'],

                                           'sort_order' => $GLOBALS[$class]->sort_order);

                 }

               }

             }

           }

         }

 

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

         }

 

         for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {

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

 

           $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' => $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);

               }

             }

           }

         }

 

         tep_session_register('cart_PayPal_IPN_ID');

         $cart_PayPal_IPN_ID = $cartID . '-' . $insert_id;

       }

     }

 

     return false;

   }

 

   function process_button() {

     global $customer_id, $order, $languages_id, $currencies, $currency, $cart_PayPal_IPN_ID, $shipping;

 

     if (MODULE_PAYMENT_PAYPAL_IPN_CURRENCY == 'Selected Currency') {

       $my_currency = $currency;

     } else {

       $my_currency = substr(MODULE_PAYMENT_PAYPAL_IPN_CURRENCY, 5);

     }

     if (!in_array($my_currency, array('CAD', 'EUR', 'GBP', 'JPY', 'USD'))) {

       $my_currency = 'USD';

     }

 

     $parameters = array();

 

     if ( (MODULE_PAYMENT_PAYPAL_IPN_TRANSACTION_TYPE == 'Per Item') && (MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS == 'False') ) {

       $parameters['cmd'] = '_cart';

       $parameters['upload'] = '1';

 

       for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {

         $item = $i+1;

 

         $tax_value = ($order->products[$i]['tax'] / 100) * $order->products[$i]['final_price'];

 

         $parameters['item_name_' . $item] = $order->products[$i]['name'];

         $parameters['amount_' . $item] = number_format($order->products[$i]['final_price'] * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency));

         $parameters['tax_' . $item] = number_format($tax_value * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency));

         $parameters['quantity_' . $item] = $order->products[$i]['qty'];

 

         if ($i == 0) {

           if (DISPLAY_PRICE_WITH_TAX == 'true') {

             $shipping_cost = $order->info['shipping_cost'];

           } else {

             $module = substr($shipping['id'], 0, strpos($shipping['id'], '_'));

             $shipping_tax = tep_get_tax_rate($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

             $shipping_cost = $order->info['shipping_cost'] + tep_calculate_tax($order->info['shipping_cost'], $shipping_tax);

           }

 

           $parameters['shipping_' . $item] = number_format($shipping_cost * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency));

         }

 

         if (isset($order->products[$i]['attributes'])) {

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

 

// Unfortunately PayPal only accepts two attributes per product, so the

// third attribute onwards will not be shown at PayPal

             $parameters['on' . $j . '_' . $item] = $attributes_values['products_options_name'];

             $parameters['os' . $j . '_' . $item] = $attributes_values['products_options_values_name'];

           }

         }

       }

 

       $parameters['num_cart_items'] = $item;

     } else {

       $parameters['cmd'] = '_xclick';

       $parameters['item_name'] = STORE_NAME;

       $parameters['shipping'] = number_format($order->info['shipping_cost'] * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency));

      if(MOVE_TAX_TO_TOTAL_AMOUNT == 'True') {

       // PandA.nl move tax to total amount

        $parameters['tax'] = 0;

      } else {

       // default

        $parameters['tax'] = number_format($order->info['tax'] * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency));

      }  

     }

 

     $parameters['business'] = MODULE_PAYMENT_PAYPAL_IPN_ID;

     if(MOVE_TAX_TO_TOTAL_AMOUNT == 'True') {

     // PandA.nl move tax to total amount

     $parameters['amount'] = number_format(($order->info['total'] - $order->info['shipping_cost']) * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency));

    } else {

     // default

      $parameters['amount'] = number_format(($order->info['total'] - $order->info['shipping_cost'] - $order->info['tax']) * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency));

    }

     $parameters['currency_code'] = $my_currency;

     $parameters['invoice'] = substr($cart_PayPal_IPN_ID, strpos($cart_PayPal_IPN_ID, '-')+1);

     $parameters['custom'] = $customer_id;

     $parameters['no_shipping'] = '0';

     $parameters['no_note'] = '1';

     $parameters['notify_url'] = tep_href_link('ext/modules/payment/paypal_ipn/ipn.php', '', 'SSL', false, false);

     $parameters['return'] = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');

     $parameters['cancel_return'] = tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL');

     $parameters['bn'] = $this->identifier;

      $parameters['first_name'] = $order->customer['name'];

 $parameters['address1'] = $order->customer['street_address'];

  $parameters['address2'] = $order->customer['suburb'];

  $parameters['city'] = $order->customer['city'];

 if ($order->customer['country']['iso_code_2']=='US') {

   $order->customer['state'] = tep_get_zone_code($order->customer['country_id'], $order->customer['zone_id'], $order->customer['state']);

 }

 $parameters['state'] = $order->customer['state'];

 $parameters['zip'] = $order->customer['postcode'];

 $parameters['country'] = $order->customer['country']['iso_code_2'];

 $parameters['email'] = $order->customer['email_address'];

  $parameters['cbt'] = 'Click to Complete Order!';

 

     if (tep_not_null(MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE)) {

       $parameters['page_style'] = MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE;

     }

 

     if (MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS == 'True') {

       $parameters['cert_id'] = MODULE_PAYMENT_PAYPAL_IPN_EWP_CERT_ID;

 

       $random_string = rand(100000, 999999) . '-' . $customer_id . '-';

 

       $data = '';

       while (list($key, $value) = each($parameters)) {

         $data .= $key . '=' . $value . "\n";

       }

 

       $fp = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt', 'w');

       fwrite($fp, $data);

       fclose($fp);

 

       unset($data);

 

       if (function_exists('openssl_pkcs7_sign') && function_exists('openssl_pkcs7_encrypt')) {

         openssl_pkcs7_sign(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt', MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY), file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY), array('From' => MODULE_PAYMENT_PAYPAL_IPN_ID), PKCS7_BINARY);

 

         unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt');

 

// remove headers from the signature

         $signed = file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');

         $signed = explode("\n\n", $signed);

         $signed = base64_decode($signed[1]);

 

         $fp = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', 'w');

         fwrite($fp, $signed);

         fclose($fp);

 

         unset($signed);

 

         openssl_pkcs7_encrypt(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt', file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY), array('From' => MODULE_PAYMENT_PAYPAL_IPN_ID), PKCS7_BINARY);

 

         unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');

 

// remove headers from the encrypted result

         $data = file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');

         $data = explode("\n\n", $data);

         $data = '-----BEGIN PKCS7-----' . "\n" . $data[1] . "\n" . '-----END PKCS7-----';

 

         unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');

       } else {

         exec(MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL . ' smime -sign -in ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt -signer ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY . ' -inkey ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY . ' -outform der -nodetach -binary > ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');

         unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt');

 

         exec(MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL . ' smime -encrypt -des3 -binary -outform pem ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY . ' < ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt > ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');

         unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');

 

         $fh = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt', 'rb');

         $data = fread($fh, filesize(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt'));

         fclose($fh);

 

         unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');

       }

 

       $process_button_string = tep_draw_hidden_field('cmd', '_s-xclick') .

                                tep_draw_hidden_field('encrypted', $data);

 

       unset($data);

     } else {

       while (list($key, $value) = each($parameters)) {

         echo tep_draw_hidden_field($key, $value);

       }

     }

 

     return $process_button_string;

   }

 

   function before_process() {

     global $customer_id, $order, $sendto, $billto, $payment, $currencies, $cart, $cart_PayPal_IPN_ID;

     global $$payment;

 

     include(DIR_WS_CLASSES . 'order_total.php');

     $order_total_modules = new order_total;

 

     $order_totals = $order_total_modules->process();

 

     $order_id = substr($cart_PayPal_IPN_ID, strpos($cart_PayPal_IPN_ID, '-')+1);

 

     $sql_data_array = array('orders_id' => $order_id,

                             'orders_status_id' => $order->info['order_status'],

                             'date_added' => 'now()',

                             'customer_notified' => (SEND_EMAILS == 'true') ? '1' : '0',

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

 

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

 

           $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'] * $ord

Share this post


Link to post
Share on other sites

when I try to test A PAYMENT with -oscommerce paypal-- I have been getting this error

 

on the paypal payment page

 

""Error Detected

 

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

 

Please enter an amount greater than zero. ""

 

note I tried

 

"

FIX FOR CCGV TO WORK CORRECTLY WITH PAYPAL_IPN

BASED ON CCGV 5.14 AND PAYPAL_IPN v1.1

BY AARON DWYER"

 

but...

 

any help will be wellcome

Share this post


Link to post
Share on other sites

I use paypal and I have never installed IPN just make sure you go to your paypal account and go into your profile>selling preferences>Website Payment Preferences and enable Auto Return for Website Payments and you have a page that tells your customers they have completed their payment to you.

 

Maddie

Share this post


Link to post
Share on other sites
hi

 

that looks really nice, please forward details of how to do it

 

many thanks in advance

 

is there anyone who has this info installed for their account info page? i am trying to get someone who has it installed to give me the code or to point me in the right direction please

 

please look at quote number 611 for what i mean - thanks!


Upon receiving fixes and advice, too many people don't bother to post updates informing the forum of how it went. Until of course they need help again on other issues and they come running back!

 

Why receive the information you require in good faith for free, only to then have the attitude to ignore the people who gave it to you?

 

There's no harm in saying, 'Thanks, it worked'. On the contrary, it creates a better atmosphere.

 

CHOOCH

Share this post


Link to post
Share on other sites

In the VALID PRODUCT LIST section of this contrib, is it possible to exclude 2 products, I have a really HOT item coming in tomm. and dont want people to use a code on these 2 products coming in. So I want the code that many customers have "SUPERVALUE20%CODE" to still work, just not for these 2 new items?

 

I dont want to add product ID's of all my 400 products, minus these 2 guys I dont wanna give deals on???

Thanks

Share this post


Link to post
Share on other sites
I use paypal and I have never installed IPN just make sure you go to your paypal account and go into your profile>selling preferences>Website Payment Preferences and enable Auto Return for Website Payments and you have a page that tells your customers they have completed their payment to you.

 

Maddie

 

well that seems to be the easy way to it and it works fine :-)

 

however for instances where IPN may be required it is better to sort these issues out now, or get a headache later.. i guess a headache is on the cards either way.

 

infact, the prblem i found is that i cant even get a test certificate.. or what to do with it if i get it?

 

anywayz, using the sandbox test thing it looks to work fine. i haven't installed tax rates so can't speak for that but the Voucher works fine - barring one thing. i placed a test order for ?2500 and was told that payment would have to be confirmed. i guess the merchat actually signs in at some point to accept. but the Voucher balance still stays the same unless the transaction is confirmed at the point of sale.

 

it would be interesting to see how the Voucher balance can be deducted once the merchant gives it the all clear at paypal.


Upon receiving fixes and advice, too many people don't bother to post updates informing the forum of how it went. Until of course they need help again on other issues and they come running back!

 

Why receive the information you require in good faith for free, only to then have the attitude to ignore the people who gave it to you?

 

There's no harm in saying, 'Thanks, it worked'. On the contrary, it creates a better atmosphere.

 

CHOOCH

Share this post


Link to post
Share on other sites

Hi,

I broke my Paypal_IPN and CCGV again....

I did not even change any code that should have bothered it. Now everything works on the site except that when people try to use a coupon the correct total does not get passed to paypal. I won't paste my code here until someone asks me too. Please feel free to PM too. I am DESPERATE for help. Last time all I did to fix it was re-upload the same files I uploaded a 100 times before.

 

I appreciate any help, thank you

Share this post


Link to post
Share on other sites
hnorfleet - i've just installed the v5.13 and so far I havn't found any bugs (although it's only just been installed and I may find some later on). As for how easy it is to install, then if you use something like beyond compare it's not too hard. I've got osc2.2 with quite a few mods and extra modules, with the beyond compare I just went through the files and added the lines of code where required. Took me about 1 1/2 hours

 

Thanks for the assist. Installed 5.13 with a couple fixes and it works great. The only problem I've found is when you are creating a new coupon and click the admin link to validcategories.php or validproducts.php I get page not found, even though I can see the pages are right there. I've chmodded the files to 777 with no luck.

 

Has anyone else had this problem?

Share this post


Link to post
Share on other sites
Thanks for the assist.? Installed 5.13 with a couple fixes and it works great.? The only problem I've found is when you are creating a new coupon and click the admin link to validcategories.php or validproducts.php I get page not found, even though I can see the pages are right there.? I've chmodded the files to 777 with no luck.?

 

Has anyone else had this problem?

 

 

catalog/admin/includes/filenames.php

 

does your page have the following code? if not, add the missing lines and see if the link works

 

 

define('FILENAME_VALIDCATEGORIES', 'validcategories.php');

 

define('FILENAME_VALIDPRODUCTS', 'validproducts.php');

 

 

good luck

Edited by chooch

Upon receiving fixes and advice, too many people don't bother to post updates informing the forum of how it went. Until of course they need help again on other issues and they come running back!

 

Why receive the information you require in good faith for free, only to then have the attitude to ignore the people who gave it to you?

 

There's no harm in saying, 'Thanks, it worked'. On the contrary, it creates a better atmosphere.

 

CHOOCH

Share this post


Link to post
Share on other sites

I've downloaded this contrib and got it installed. No errors, no problems BUT something is missing. I looked through this long posts and realised there are many things which I can't find in my contribution. Some functions are missing in my installation but there isn't any errors running it. There isn't any option to create Gift Voucher nor set Gift Voucher's values and product limits.. etc.

 

Does anyone has any screenshot on this contrib?

 

Thakns

Share this post


Link to post
Share on other sites

i can do a screen shot but i've no idea how i'd post it lol.

 

The option to create vouchers etc should be the last item on the left hand menu below Tools.

Share this post


Link to post
Share on other sites

thanks but no, I didn't find that option under admin>tools

 

I downloaded the 5.14 version and is this version incomplete? I tried it out and it doesn't really make sense. I set an option for to offer gv for new customers but there is not way to redeem the gift voucher, the gv code that sent via email is always invalid and the amount is not deducted at all. The discount coupon works fine but not the gv.

 

I followed the instructions to create the gv as a product. But no, it doesn't work this way I think. Admin>catalog>categories/products>

entered GIFT_12 for product model. This appear under new products. When purchased, is not recognised as a GV. No GV code is sent. Signed in again to send GV. Received the code via email and follows the link to a redeem page that says click continue to redeem the gv. Clicked continue and add items to cart, however, when entered the code via check out, the code is invalid. I tried to redeem it via Admin but no, it doesn't work either. The procedures seem odd and I'm wondering if I missed out any files? anyone can kindly help?

Share this post


Link to post
Share on other sites
thanks but no, I didn't find that option under admin>tools

 

I downloaded the 5.14 version and is this version incomplete? I tried it out and it doesn't really make sense. I set an option for to offer gv for new customers but there is not way to redeem the gift voucher, the gv code that sent via email is always invalid and the amount is not deducted at all. The discount coupon works fine but not the gv.

 

I followed the instructions to create the gv as a product. But no, it doesn't work this way I think. Admin>catalog>categories/products>

entered GIFT_12 for product model. This appear under new products. When purchased, is not recognised as a GV. No GV code is sent. Signed in again to send GV. Received the code via email and follows the link to a redeem page that says click continue to redeem the gv. Clicked continue and add items to cart, however, when entered the code via check out, the code is invalid. I tried to redeem it via Admin but no, it doesn't work either. The procedures seem odd and I'm wondering if I missed out any files? anyone can kindly help?

 

Well, if 5.14 do not work..use 5.13 it works...

Share this post


Link to post
Share on other sites

anyone has installed the 5.14 version and it is working perfectly fine? Please do let me know as I've installed this 5.14 but something seems missing. I spent two days trying to install, uninstall, read the files, figure out the procedures... etc.. but no, it doesnot seem to work properly even though there isn't any error messages. I'm not sure if is my problem or 5.14 has some files or functions missing. Please do let me know if you have this version installed and working perfectly with no problems. If you can do a screen shot, I'll be very grateful. thank you

Share this post


Link to post
Share on other sites
catalog/admin/includes/filenames.php

 

does your page have the following code? if not, add the missing lines and see if the link works

define('FILENAME_VALIDCATEGORIES', 'validcategories.php');

 

define('FILENAME_VALIDPRODUCTS', 'validproducts.php');

good luck

 

Thanks chooch, unfortunately that did not solve the problem. The links are defined correctly, display in the status bar on mouseover. Just won't load when clicked. I'm wondering if the pages are looking for some condition to be met that they are not seeing?

Share this post


Link to post
Share on other sites
Thanks chooch, unfortunately that did not solve the problem.  The links are defined correctly, display in the status bar on mouseover.  Just won't load when clicked.  I'm wondering if the pages are looking for some condition to be met that they are not seeing?

 

this is a wierd problem....

 

hmmm, did you FTP the files in the right location?

 

catalog/admin/validproducts.php

 

and

 

catalog/admin/validcategories.php


Upon receiving fixes and advice, too many people don't bother to post updates informing the forum of how it went. Until of course they need help again on other issues and they come running back!

 

Why receive the information you require in good faith for free, only to then have the attitude to ignore the people who gave it to you?

 

There's no harm in saying, 'Thanks, it worked'. On the contrary, it creates a better atmosphere.

 

CHOOCH

Share this post


Link to post
Share on other sites

I've been digging through the 135 pages of this thread, but did not find this is a preious post.

 

I have CCGV 5.13 installed and working, but I'm also using LinkPoint which needs the subtotal, shipping and tax to add up to the total for the order to be processed. I've found a few hacks and got the sort order changed for the subtotal to be recalculated. The problem comes in where the discount is a percentage and the rounding not coming out the same

 

Example:

Subtotal before disounts etc: $33.25

Discount Coupons:XWP-11002: -$3.33

Sub-Total: $29.93

United States Postal Service (1 x 4.4lbs) (Priority (2 - 3 Days)): $8.85

California Sales Tax: $2.32

Total: $41.09

 

Because the 10% discount is rounded up to $3.33, when the new subtotal is calculated, it is off by .01 ($33.25-$3.33 is $29.92), so when you add $29.93 + $8.85 + $2.32=$41.10

 

I'm not a PHP programer, but can dig my way around. I'm not sure where these calculations are done, and why the totals are coming up different. If anyone has any ideas, please let me know.

 

---

Thanks,

Dorothy

Share this post


Link to post
Share on other sites

Please, need some help;

 

When trying to access my store I get this error:

 

Fatal error: Cannot redeclare create_coupon_code() (previously declared in /home/lounge24/public_html/devstore/includes/functions/general.php:17) in /home/lounge24/public_html/devstore/includes/add_ccgvdc_application_top.php on line 36

 

Line 36 sais:

 

function create_coupon_code($salt="secret", $length = SECURITY_CODE_LENGTH) {

Share this post


Link to post
Share on other sites

Regadring my question above I see that the code for creating coupon code exists in both general.php and add_ccgvdc_application_top.php. Should I remove it from general.php?

Share this post


Link to post
Share on other sites

Hello,

 

I wonder if anybody experienced similar problem or if you could help me please, I don't really know what to do or try now...

 

I'm unable to purchase gift vouchers with Credit Card or PayPal.

I've tried 5 different settings and none of them work for Credit Cards but ALL work for Cheque / Money order! As soon as I purchase a voucher with money order, I can see it in a queue. However if I try to purchase it with PP or CC, I'm being charged, however nothing appears in the queue.

The settings I've been trying so far are:

 

Sub-total - Sort order = 1

Shipping - Sort order = 2

Tax - Sort order = 3

Gift Voucher - Sort order = 9

Discount Coupons - Sort Order =740

Total - Sort Order = 900

 

Sub-total - Sort order = 1

Shipping - Sort order = 2

Gift Voucher - Sort order = 740

Discount Coupons - Sort Order =760

Tax - Sort order = 800

Total - Sort Order = 900

 

Sub-total - Sort order = 1

Shipping - Sort order = 2

Gift Voucher - Sort order = 9

Discount Coupons - Sort Order =740

Tax - Sort order = 800

Total - Sort Order = 900

 

Sub-total - Sort order = 1

Shipping - Sort order = 2

Gift Voucher - Sort order = 760

Discount Coupons - Sort Order =740

Tax - Sort order = 800

Total - Sort Order = 900

 

Sub-total - Sort order = 1

Shipping - Sort order = 2

Gift Voucher - Sort order = 760

Discount Coupons - Sort Order =740

Tax - Sort order = 3

Total - Sort Order = 900

 

Weight is 0, download enabled, model GIFT-025.

 

If there is someone who could help me, or at least try to tell me what to check for, I appreciate it.

 

Alex


Absinthe Original Liquor Store

Share this post


Link to post
Share on other sites

I just installed this contribution using the easy install for version 5.14, but when I go to the admin under tools there aren't any new options. Has anyone else installed using this version and the easy installer? Does it work for you if so? If it didn't and you got it working, what did you have to do?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×