Jump to content
Sign in to follow this  
smiley

2.5% fee added for amex or diners

Recommended Posts

Looking to have a 2.5% fee added for american express or diners.

 

Using the standard OSC collection of credit card details.


HTH

Neil

 

Common sense is genius dressed in working clothes.

Ralph Waldo Emerson

Share this post


Link to post
Share on other sites

I have the following: call this ot_surcharge.php and put it in catalog/includes/modules/order_total -

 

<?php

/*

  $Id: ot_surcharge.php,v 1.0 2003/06/19 01:13:43 hpdl wib $

 

  osCommerce, Open Source E-Commerce Solutions

  http://www.oscommerce.com

 

  Copyright ? 2002 osCommerce

 

  Released under the GNU General Public License

*/

 

  class ot_surcharge {

    var $title, $output;

 

    function ot_surcharge() {

      $this->code = 'ot_surcharge';

      $this->title = MODULETITLE;

      $this->description = MODULE_OT_SURCHARGE_DESCRIPTION;

      $this->enabled = MODULE_OT_SURCHARGE_STATUS;

      $this->sort_order = MODULE_OT_SURCHARGE_SORT_ORDER;

      $this->include_shipping = MODULE_OT_SURCHARGE_INC_SHIPPING;

      $this->include_tax = MODULE_OT_SURCHARGE_INC_TAX;

      $this->percentage = MODULE_OT_SURCHARGE_PERCENTAGE;

      $this->minimum = MODULE_OT_SURCHARGE_MINIMUM;

      $this->calculate_tax = MODULE_OT_SURCHARGE_CALC_TAX;

//      $this->credit_class = true;

      $this->output = array();

    }

 

    function process() {

    global $order, $currencies;

 

      $od_amount = $this->calculate_fee($this->get_order_total());

      if ($od_amount>0) {

      $this->addition = $od_amount;

      $this->output[] = array('title' => $this->title . ':',

                              'text' => '<b>' . $currencies->format($od_amount) . '</b>',

                              'value' => $od_amount);

    $order->info['total'] = $order->info['total'] + $od_amount; 

}

    }

   

 

  function calculate_fee($amount) {

    global $order, $customer_id, $payment, $cc;

    $od_amount=0;

    $od_pc = $this->percentage + 0.00; //this is percentage plus the base fee

    $do = false;

    if ($amount > $this->minimum) {

    $table = split("[,]" , MODULE_OT_SURCHARGE_TYPE);

    for ($i = 0; $i < count($table); $i++) {

 

//      if (($payment == $table[$i]) && ($cc->cc_card_type == 'JCB)) $do = true;

   

if ($cc->cc_card_type == 'JCB') $do = true;

if ($cc->cc_card_type == 'Visa Credit') $do = true;

if ($cc->cc_card_type == 'Mastercard') $do = true;

 

 

  }

 

 

 

 

 

 

    if ($do) {

// Calculate tax reduction if necessary

    if($this->calculate_tax == 'true') {

// Calculate main tax reduction

      $tod_amount = round($order->info['tax']*10)/10*$od_pc/100;

      $order->info['tax'] = $order->info['tax'] + $tod_amount;

// Calculate tax group deductions

      reset($order->info['tax_groups']);

      while (list($key, $value) = each($order->info['tax_groups'])) {

        $god_amount = round($value*10)/10*$od_pc/100;

        $order->info['tax_groups'][$key] = $order->info['tax_groups'][$key] + $god_amount;

      } 

    }

    $od_amount = round($amount*10)/10*$od_pc/100;

    $od_amount = $od_amount + $tod_amount;

    }

    }

    return $od_amount;

  }

 

 

  function get_order_total() {

    global  $order, $cart;

    $order_total = $order->info['total'];

// Check if gift voucher is in cart and adjust total

    $products = $cart->get_products();

    for ($i=0; $i<sizeof($products); $i++) {

      $t_prid = tep_get_prid($products[$i]['id']);

      $gv_query = tep_db_query("select products_price, products_tax_class_id, products_model from " . TABLE_PRODUCTS . " where products_id = '" . $t_prid . "'");

      $gv_result = tep_db_fetch_array($gv_query);

      if (ereg('^GIFT', addslashes($gv_result['products_model']))) {

        $qty = $cart->get_quantity($t_prid);

        $products_tax = tep_get_tax_rate($gv_result['products_tax_class_id']);

        if ($this->include_tax =='false') {

          $gv_amount = $gv_result['products_price'] * $qty;

        } else {

          $gv_amount = ($gv_result['products_price'] + tep_calculate_tax($gv_result['products_price'],$products_tax)) * $qty;

        }

        $order_total=$order_total - $gv_amount;

      }

    }

    if ($this->include_tax == 'false') $order_total=$order_total-$order->info['tax'];

    if ($this->include_shipping == 'false') $order_total=$order_total-$order->info['shipping_cost'];

    return $order_total;

  } 

 

   

    function check() {

      if (!isset($this->check)) {

        $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_OT_SURCHARGE_STATUS'");

        $this->check = tep_db_num_rows($check_query);

      }

 

      return $this->check;

    }

 

    function keys() {

      return array('MODULE_OT_SURCHARGE_STATUS', 'MODULE_OT_SURCHARGE_SORT_ORDER','MODULE_OT_SURCHARGE_PERCENTAGE','MODULE_OT_SURCHARGE_MINIMUM', 'MODULE_OT_SURCHARGE_TYPE', 'MODULE_OT_SURCHARGE_INC_SHIPPING', 'MODULE_OT_SURCHARGE_INC_TAX', 'MODULE_OT_SURCHARGE_CALC_TAX');

    }

 

    function install() {

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Display Total', 'MODULE_OT_SURCHARGE_STATUS', 'true', 'Do you want to enable the Order Payment Fee?', '6', '1','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_OT_SURCHARGE_SORT_ORDER', '888', 'Sort order of display.', '6', '2', now())");

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Include Shipping', 'MODULE_OT_SURCHARGE_INC_SHIPPING', 'true', 'Include Shipping in calculation', '6', '5', 'tep_cfg_select_option(array(\'true\', \'false\'), ', now())");

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Include Tax', 'MODULE_OT_SURCHARGE_INC_TAX', 'true', 'Include Tax in calculation.', '6', '6','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Surcharge Percentage', 'MODULE_OT_SURCHARGE_PERCENTAGE', '3', 'Amount of Surcharge(percentage).', '6', '7', now())");

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Calculate Tax', 'MODULE_OT_SURCHARGE_CALC_TAX', 'false', 'Re-calculate Tax on surcharged amount.', '6', '5','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Minimum Amount', 'MODULE_OT_SURCHARGE_MINIMUM', '', 'Minimum order before fee', '6', '2', now())");

      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Payment Type', 'MODULE_OT_SURCHARGE_TYPE', 'moneyorder', 'Payment Type to pay surcharge', '6', '2', now())");

    }

 

    function remove() {

      $keys = '';

      $keys_array = $this->keys();

      for ($i=0; $i<sizeof($keys_array); $i++) {

        $keys .= "'" . $keys_array[$i] . "',";

      }

      $keys = substr($keys, 0, -1);

 

      tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in (" . $keys . ")");

    }

  }

?>

 

 

 

Call this one ot_surcharge.php as well, but but it in catalog/includes/modules/languages/english(or whatver language you use)/modules/order_total -

 

<?php

 

/*

 

  $Id: ot_surcharge.php,v 1.0 2003/6/19 23:09:49 wib Exp $

 

 

 

  osCommerce, Open Source E-Commerce Solutions

 

  http://www.oscommerce.com

 

 

 

  Copyright © 2002 osCommerce

 

 

 

  Released under the GNU General Public License

 

*/

 

 

 

  define('MODULE_PAYMENT_TITLE', 'Payment Type Surcharge');

 

  define('MODULE_PAYMENT_DESCRIPTION', 'Payment Type Fee');

 

  define('SHIPPING_NOT_INCLUDED', ' [shipping not included]');

 

  define('TAX_NOT_INCLUDED', ' [Tax not included]');

 

?>

 

Then install it in Admin (Order Total module section)

 

 

If you look in the first file for the lines

 

if ($cc->cc_card_type == 'JCB') $do = true;

if ($cc->cc_card_type == 'Visa Credit') $do = true;

if ($cc->cc_card_type == 'Mastercard') $do = true;

 

You can change/add to this to include the card types you want a fee added to. EG:

 

if ($cc->cc_card_type == 'American Express') $do = true;

if ($cc->cc_card_type == 'Diners Club') $do = true;

 

 

I think they are the right card types - check in includes/classes/cc_validation.php

Share this post


Link to post
Share on other sites

Thanks very much Sean. :thumbsup:


HTH

Neil

 

Common sense is genius dressed in working clothes.

Ralph Waldo Emerson

Share this post


Link to post
Share on other sites

Neil, before you implement this, I hope you will follow Mibble's advice.

 

At least here in the U.S. (and I believe in much if not all of Europe), they not only can cancel your account for that, they will cancel it the first time a customer reports it to them. They take the issue quite seriously. In in their newsletters and other communications to their cardholders, they solicit such reporting. So if your contract prohibits an added surcharge for accepting their card, and you breach the contract by charging extra for them, sooner or later you will get reported and lose your ability to accept those cards.

 

Further, depending on your merchant account contract, such a violation could even jepardize your entire merchant account. This is made possible by the observation that you breached your contract with one of the card banks process through your merchant account.


Rule #1: Without exception, backup your database and files before making any changes to your files or database.

Rule #2: Make sure there are no exceptions to Rule #1.

Share this post


Link to post
Share on other sites

Thanks Sean,

I now show a surcharge for American Express & Diners on the checkout_confirmation.php page with the adjusted total.

However this total is not being passed to the admin/orders.php or the confirmation email?

 

Thanks Mibble & Mike,

In Australia under our agreement, AMEX & Diners allow you to charge customers, but no more than what they charge you. Thanks for posting - for the benefit of the US & UK merchants.


HTH

Neil

 

Common sense is genius dressed in working clothes.

Ralph Waldo Emerson

Share this post


Link to post
Share on other sites

Thanks from me as well Sean! This is exactly what I needed.

 

However I have the same problem as smiley - no surcharge in the email or the order :( Any ideas?

Share this post


Link to post
Share on other sites

Not sure about that error guys - I didn't do anything else to add it to my store except order the surcharge module after sub-total and shipping and before the tax and total in the preferences.

 

Also, incase anyone else is thinking of added such a charge, as Mibble and Graphicsguy have said - have a careful look at your terms and conditions! In the UK it is acceptable to add a surcharge (the courts over here say that if the Card company charge a retailer a surcharge, then there's no reason why the retailer can't do the same...)

Share this post


Link to post
Share on other sites

Ok,

The database table orders_total has these fields:

orders_total_id

orders_id

title

text

value

class

sort_order

 

class is divided into:

ot_subtotal

ot_tax

ot_shipping

ot_total

 

What I think we need is an sql command to insert an ot_surcharge

and have that add to ot_subtotal, ot_tax & ot_shipping- to produce ot_total.


HTH

Neil

 

Common sense is genius dressed in working clothes.

Ralph Waldo Emerson

Share this post


Link to post
Share on other sites

Smiley - does the order of the order total modules (in admin) matter? So the surcharge works for you?

Share this post


Link to post
Share on other sites

Oh - and in Australia we are also allowed to pass the surcharge on - as long as it is not more than what AMEX charges.

Share this post


Link to post
Share on other sites
Smiley - does the order of the order total modules (in admin) matter? So the surcharge works for you?

 

Yes as Sean said:

order the surcharge module after sub-total and shipping and before the tax and total in the preferences.

 

I used a different surcharge module in Contibs. Must be my version of php or sql or osC because Sean's one did not write the info to the admin on my version/s.

 

Oh - and in Australia we are also allowed to pass the surcharge on - as long as it is not more than what AMEX charges.

 

This is also allowed in the UK dependant on your contract. Read the fine print. :o


HTH

Neil

 

Common sense is genius dressed in working clothes.

Ralph Waldo Emerson

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
Sign in to follow this  

×