Mr. Ree Posted November 8, 2002 Posted November 8, 2002 Greets all. I managed to get the new checkout working with may pre WWII modified store. I have lost some sales due to the need for the customer to enter a CC # in my non-secure page to pass to 2checkout .com. This is the pm2checkout.php file that I ended up with and works for my site. It replaces the entire content of catalog/includes/modules/pm2checkout.php. It passes the customers name to 2checkout and then 2checkout asks for the CC#, experation and 3 digits at that point. All always kids, BACKUP the original, and always practice safe sex. :lol: <?php /* $Id: pm2checkout.php,v 1.13 2002/11/01 05:03:50 hpdl Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2002 osCommerce Released under the GNU General Public License */ class pm2checkout { var $code, $title, $description, $enabled; // class constructor function pm2checkout() { global $HTTP_POST_VARS; $this->code = 'pm2checkout'; $this->title = MODULE_PAYMENT_2CHECKOUT_TEXT_TITLE; $this->description = MODULE_PAYMENT_2CHECKOUT_TEXT_DESCRIPTION; $this->enabled = ((MODULE_PAYMENT_2CHECKOUT_STATUS == 'True') ? true : false); $this->form_action_url = 'https://www.2checkout.com/cgi-bin/Abuyers/purchase.2c'; } // class methods function javascript_validation() { $js = ' if (payment_value == "' . $this->code . '") {' . "n" . ' var cc_number = document.checkout_payment.pm_2checkout_cc_number.value;' . "n" . ' if (cc_number == "" || cc_number.length < ' . CC_NUMBER_MIN_LENGTH . ') {' . "n" . ' error_message = error_message + "' . MODULE_PAYMENT_2CHECKOUT_TEXT_JS_CC_NUMBER . '";' . "n" . ' error = 1;' . "n" . ' }' . "n" . ' }' . "n"; return $js; } function selection() { global $order; for ($i=1; $i < 13; $i++) { $expires_month[] = array('id' => sprintf('%02d', $i), 'text' => strftime('%B',mktime(0,0,0,$i,1,2000))); } $today = getdate(); for ($i=$today['year']; $i < $today['year']+10; $i++) { $expires_year[] = array('id' => strftime('%y',mktime(0,0,0,1,1,$i)), 'text' => strftime('%Y',mktime(0,0,0,1,1,$i))); } $selection = array('id' => $this->code, 'module' => $this->title, 'fields' => array(array('title' => MODULE_PAYMENT_2CHECKOUT_TEXT_CREDIT_CARD_OWNER_FIRST_NAME, 'field' => tep_draw_input_field('pm_2checkout_cc_owner_firstname', $order->billing['firstname'])), array('title' => MODULE_PAYMENT_2CHECKOUT_TEXT_CREDIT_CARD_OWNER_LAST_NAME, 'field' => tep_draw_input_field('pm_2checkout_cc_owner_lastname', $order->billing['lastname'])))); return $selection; } function pre_confirmation_check() { global $HTTP_POST_VARS; /* Remove pre confirmation checks include(DIR_WS_CLASSES . 'cc_validation.php'); $cc_validation = new cc_validation(); $result = $cc_validation->validate($HTTP_POST_VARS['pm_2checkout_cc_number'], $HTTP_POST_VARS['pm_2checkout_cc_expires_month'], $HTTP_POST_VARS['pm_2checkout_cc_expires_year']); $error = ''; switch ($result) { case -1: $error = sprintf(TEXT_CCVAL_ERROR_UNKNOWN_CARD, substr($cc_validation->cc_number, 0, 4)); break; case -2: case -3: case -4: $error = TEXT_CCVAL_ERROR_INVALID_DATE; break; case false: $error = TEXT_CCVAL_ERROR_INVALID_NUMBER; break; } if ( ($result == false) || ($result < 1) ) { $payment_error_return = 'payment_error=' . $this->code . '&error=' . urlencode($error) . '&pm_2checkout_cc_owner_firstname=' . urlencode($HTTP_POST_VARS['pm_2checkout_cc_owner_firstname']) . '&pm_2checkout_cc_owner_lastname=' . urlencode($HTTP_POST_VARS['pm_2checkout_cc_owner_lastname']) . '&pm_2checkout_cc_expires_month=' . $HTTP_POST_VARS['pm_2checkout_cc_expires_month'] . '&pm_2checkout_cc_expires_year=' . $HTTP_POST_VARS['pm_2checkout_cc_expires_year']; tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, $payment_error_return, 'SSL', true, false)); } $this->cc_card_type = $cc_validation->cc_type; $this->cc_card_number = $cc_validation->cc_number; $this->cc_expiry_month = $cc_validation->cc_expiry_month; $this->cc_expiry_year = $cc_validation->cc_expiry_year; } */ } function confirmation() { global $HTTP_POST_VARS; /* $confirmation = array('title' => $this->title . ': ' . $this->cc_card_type, 'fields' => array(array('title' => MODULE_PAYMENT_2CHECKOUT_TEXT_CREDIT_CARD_OWNER, 'field' => $HTTP_POST_VARS['pm_2checkout_cc_owner_firstname'] . ' ' . $HTTP_POST_VARS['pm_2checkout_cc_owner_lastname']), array('title' => MODULE_PAYMENT_2CHECKOUT_TEXT_CREDIT_CARD_NUMBER, 'field' => substr($this->cc_card_number, 0, 4) . str_repeat('X', (strlen($this->cc_card_number) - 8)) . substr($this->cc_card_number, -4)), array('title' => MODULE_PAYMENT_2CHECKOUT_TEXT_CREDIT_CARD_EXPIRES, 'field' => strftime('%B, %Y', mktime(0,0,0,$HTTP_POST_VARS['pm_2checkout_cc_expires_month'], 1, '20' . $HTTP_POST_VARS['pm_2checkout_cc_expires_year']))))); return $confirmation; } */} function process_button() { global $HTTP_POST_VARS, $order; $process_button_string = tep_draw_hidden_field('x_login', MODULE_PAYMENT_2CHECKOUT_LOGIN) . tep_draw_hidden_field('x_amount', number_format($order->info['total'], 2)) . tep_draw_hidden_field('x_invoice_num', date('YmdHis')) . tep_draw_hidden_field('x_test_request', ((MODULE_PAYMENT_2CHECKOUT_TESTMODE == 'Test') ? 'Y' : 'N')) . //tep_draw_hidden_field('x_card_num', $this->cc_card_number) . //tep_draw_hidden_field('cvv', $HTTP_POST_VARS['pm_2checkout_cc_cvv']) . //tep_draw_hidden_field('x_exp_date', $this->cc_expiry_month . substr($this->cc_expiry_year, -2)) . tep_draw_hidden_field('x_first_name', $HTTP_POST_VARS['pm_2checkout_cc_owner_firstname']) . tep_draw_hidden_field('x_last_name', $HTTP_POST_VARS['pm_2checkout_cc_owner_lastname']) . tep_draw_hidden_field('x_address', $order->customer['street_address']) . tep_draw_hidden_field('x_city', $order->customer['city']) . tep_draw_hidden_field('x_state', $order->customer['state']) . tep_draw_hidden_field('x_zip', $order->customer['postcode']) . tep_draw_hidden_field('x_country', $order->customer['country']['title']) . tep_draw_hidden_field('x_email', $order->customer['email_address']) . tep_draw_hidden_field('x_phone', $order->customer['telephone']) . tep_draw_hidden_field('x_ship_to_first_name', $order->delivery['firstname']) . tep_draw_hidden_field('x_ship_to_last_name', $order->delivery['lastname']) . tep_draw_hidden_field('x_ship_to_address', $order->delivery['street_address']) . tep_draw_hidden_field('x_ship_to_city', $order->delivery['city']) . tep_draw_hidden_field('x_ship_to_state', $order->delivery['state']) . tep_draw_hidden_field('x_ship_to_zip', $order->delivery['postcode']) . tep_draw_hidden_field('x_ship_to_country', $order->delivery['country']['title']) . tep_draw_hidden_field('x_receipt_link_url', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL')) . tep_draw_hidden_field('x_email_merchant', ((MODULE_PAYMENT_2CHECKOUT_EMAIL_MERCHANT == 'True') ? 'TRUE' : 'FALSE')); return $process_button_string; } function before_process() { global $HTTP_POST_VARS; if ($HTTP_POST_VARS['x_response_code'] != '1') { tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_2CHECKOUT_TEXT_ERROR_MESSAGE), 'SSL', true, false)); } } function after_process() { return false; } function get_error() { global $HTTP_GET_VARS; $error = array('title' => MODULE_PAYMENT_2CHECKOUT_TEXT_ERROR, 'error' => stripslashes(urldecode($HTTP_GET_VARS['error']))); return $error; } function check() { if (!isset($this->_check)) { $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_2CHECKOUT_STATUS'"); $this->_check = tep_db_num_rows($check_query); } return $this->_check; } 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 ('Enable 2CheckOut Module', 'MODULE_PAYMENT_2CHECKOUT_STATUS', 'True', 'Do you want to accept 2CheckOut payments?', '6', '0', '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 ('Login/Store Number', 'MODULE_PAYMENT_2CHECKOUT_LOGIN', '18157', 'Login/Store Number used for the 2CheckOut service', '6', '0', 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 ('Transaction Mode', 'MODULE_PAYMENT_2CHECKOUT_TESTMODE', 'Test', 'Transaction mode used for the 2Checkout service', '6', '0', 'tep_cfg_select_option(array('Test', 'Production'), ', 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 ('Merchant Notifications', 'MODULE_PAYMENT_2CHECKOUT_EMAIL_MERCHANT', 'True', 'Should 2CheckOut e-mail a receipt to the store owner?', '6', '0', 'tep_cfg_select_option(array('True', 'False'), ', 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 . ")"); } function keys() { return array('MODULE_PAYMENT_2CHECKOUT_STATUS', 'MODULE_PAYMENT_2CHECKOUT_LOGIN', 'MODULE_PAYMENT_2CHECKOUT_TESTMODE', 'MODULE_PAYMENT_2CHECKOUT_EMAIL_MERCHANT'); } } ?> Later, Mr. Ree Mr. Ree How to find answers to OSC Common Questions 1. Look at http://wiki.oscommerce.com 2. Search http://www.oscommerce.com/forums/ 3. Post a request in http://www.oscommerce.com/forums/
imlek Posted May 7, 2003 Posted May 7, 2003 Hi, I think I might want to use 2co with no ssl. :) Mr. Ree, Could you give me some live sample shop who use the above mod? I go to puretexan.com, but seem the mod does not implemented there. Please advice.
networkdad Posted May 7, 2003 Posted May 7, 2003 Folks, get an ssl cert! For only $50 per year, they pay for themselves with the sales you wont lose.. If your too cheap, head over to get a free one: http://www.freessl.com/
Mr. Ree Posted May 7, 2003 Author Posted May 7, 2003 Hi Imlek, You are correct about not using that mod any longer, that post was from November. 8) Soon after I got my own SSL and watched my sales increase drastically. I did that because 2CO sucks, terrible support, withheld funds, had no clue what they were doing. Maybe it got better since then but I doubt it. YMMV. I walked away from the rest of the term I had paid for and it was worth it. Do your self a favor, get an SSL cert for your site. Not only does it make life a lot easier and cost less in the long run, but gives a more professional look to your store and gives your clients more security. Even though I did the SSL their are still clients that have a phobia about entering their CC # in a web browser. So they call me and I do it for them. :P Get the money is the name of the game, if you can't go the $100 or so for the SSL use paypal and rethink the capital needed to really be in business. Best of luck to you! Mr. Ree How to find answers to OSC Common Questions 1. Look at http://wiki.oscommerce.com 2. Search http://www.oscommerce.com/forums/ 3. Post a request in http://www.oscommerce.com/forums/
Guest Posted May 7, 2003 Posted May 7, 2003 I use the 2Checkout module without the creditcard information on my websites. http://yourbasketstore.com is using the module without any problem. No SSL is needed! Thomas Hi, I think I might want to use 2co with no ssl. :) Mr. Ree, Could you give me some live sample shop who use the above mod? I go to puretexan.com, but seem the mod does not implemented there. Please advice.
Mr. Ree Posted May 7, 2003 Author Posted May 7, 2003 But do the clients have to input the credit card number on a page without the Gold Lock in the corner? That was the resistance I encountered. The CVS for 2checkout may not require that now. I have not checked. Mr. Ree How to find answers to OSC Common Questions 1. Look at http://wiki.oscommerce.com 2. Search http://www.oscommerce.com/forums/ 3. Post a request in http://www.oscommerce.com/forums/
networkdad Posted May 7, 2003 Posted May 7, 2003 I use the 2Checkout module without the creditcard information on my websites. http://yourbasketstore.com is using the module without any problem. No SSL is needed! Thomas Hi, I think I might want to use 2co with no ssl. :) Mr. Ree, Could you give me some live sample shop who use the above mod? I go to puretexan.com, but seem the mod does not implemented there. Please advice. But what about the customer information (name, address, email, etc) that is stored in your database ? Those pages are normally SSL'd...its one extra feature that if not there might drive away your next customer.
Mr. Ree Posted May 8, 2003 Author Posted May 8, 2003 But what about the customer information (name, address, email, etc) that is stored in your database... I suppose that since a person can be pretty easily looked up on the net that is not as big an issue to some shoppers, but putting the credit card number is. I reserve the right to be wrong and I probably am. Since we advertise in a few magazines, we get loads of calls from folks wanting to place orders because they do not even have internet. ;-) Others say they use it for email but would never buy anything over the net. These are normally older customers. We take them any way we can get them. Mr. Ree How to find answers to OSC Common Questions 1. Look at http://wiki.oscommerce.com 2. Search http://www.oscommerce.com/forums/ 3. Post a request in http://www.oscommerce.com/forums/
Guest Posted May 8, 2003 Posted May 8, 2003 Below is the module for 2Checkout without the credit card Thomas ------------- pm2checkout http://www.oscommerce.com/community/contributions,904 Mod to take out the credit card details for the 2checkout payment gateway If you have a look at the files then it should be easy enough to do the changes for other gateways This mod works for the latest snapshot catalog-20030119 ------------- But what about the customer information (name, address, email, etc) that is stored in your database... I suppose that since a person can be pretty easily looked up on the net that is not as big an issue to some shoppers, but putting the credit card number is. I reserve the right to be wrong and I probably am. Since we advertise in a few magazines, we get loads of calls from folks wanting to place orders because they do not even have internet. ;-) Others say they use it for email but would never buy anything over the net. These are normally older customers. We take them any way we can get them.
Guest Posted May 9, 2003 Posted May 9, 2003 I use 2CHECKOUT but it show wrong price, when i use my own currencies as default, all the price come up too 2CHECKOUT in $ is wrong. What can i do? The price show 7 times more then it should be, this is because my default currencies is in Nkr and 1$ = 7Nkr Where is the code too change so it not will multible X7 all total from my site too 2CHECKOUT?
Recommended Posts
Archived
This topic is now archived and is closed to further replies.