Jump to content

daryl042

Members
  • Content count

    20
  • Joined

  • Last visited

1 Follower

Profile Information

  • Real Name
    OakCreekPrintworks.com
  • Location
    Simi Valley, CA
  • Interests
    Website design, flash design, graphic design - desktopdesign.net<br />Clear protective bags, sleeves, clear plastic boxes for notecards, greeting cards gift cards and matted prints - OakCreekPrintworks.com<br />Become a member of OakCreekMarketplace.com today!
  • Website
  1. daryl042

    ConfirmOrderButton--Tries to download the response

    Cory, you got it right. All you need to do is: open up iongate.php using notepad, it should be located here on your hosting account/server: catalog/includes/modules/payment/iongate.php and look about 30 lines down for the old 'https://secure.iongate.net/something.asp" and replace it with the new URL that Usight gave you. To make it even easier, in notepad, you can go up to EDIT>Find and look for "http" and it will find it for you quicker. Re-upload it to your server and thats all you have to do! Let us know how it goes, and if you need any more help.
  2. daryl042

    ConfirmOrderButton--Tries to download the response

    You can check if curl is installed by logging into the OSCommerce admin and click on 'Tools' and click on 'Server Info' and scroll down and look for CURL and it will say enabled if you have it. If you cannot see it, you need to contact your web hosting company and ask them to install it. If they are not willing to install it for you, you can use the old Iongate payment module, just contact Usight and tell them that you would like to use the Iongate payment module and they will tell you to simply change Brian's Iongate contribution the point to a new URL, and it will work. It is just one line to change in notepad.
  3. It works great brian, and much better than using the old Iongate technology. Is there a way to add CVV2 checking? Thanks again Brian
  4. daryl042

    ConfirmOrderButton--Tries to download the response

    Thanks brian, your new Usight contribution is great!
  5. daryl042

    [contribution] Simple Template System (sts)

    Thank you brian, I will watch this thread for an update, let me know how I can help! -Daryl
  6. daryl042

    [contribution] Simple Template System (sts)

    I could not find the answer to this... I am using an index.php_0.html file so that I can make a custom homepage. It is affecting my Manufacturers pages, is there a way to make custom templates for each Manufacturer page? I do not want the homepage to appear at the top of every manufacturer page..lol Please see the link below and click on a manufacturer from the 'Artists' box at the left. Please help! I am really in great need. Check my site here: http://www.oakcreekmarketplace.com/oakcreekprintworks/
  7. Thank you for the contribution Brian. I'll try it out!
  8. daryl042

    ConfirmOrderButton--Tries to download the response

    Please help, or let me know if you know who can help me with this?
  9. daryl042

    ConfirmOrderButton--Tries to download the response

    here is the documentation for usight's Post Auth in case it helps: https://gateway.usight.com/post_auth.jsp
  10. I am writing a new payment module for Usight Gateway. Since Usight also owns Iongate, I took the payment module for IonGate and modified it. Everything is being sent and processed fine, but the response form the gateway is not being handled/displayed correctly. When on the page: checkout_confirmation.php, and I click the 'Confirm Order' submit button(which sends all Credit Card data to https://gateway.usight.com/postauth.secure to be processed), it asks if I would like to "save the file to my computer". The file is named: "postauth.secure" Here is a screenshot of the screen I get: http://www.oakcreekmarketplace.com/confirmation.gif Why is it doing this? How can I fix it? Thanks. I do not know php, but I have a book (The PHP Bible), and I know enough to modify the very basic stuff in this module. Here is my code: <?php /* Based on Iongate payment module by Brian Yarger. Module modified by: daryl042 <daryl@flamingmonkey.com> osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2004 osCommerce Released under the GNU General Public License */ class usight { var $code, $title, $description, $enabled, $states; // class constructor function usight() { $this->code = 'usight'; $this->title = MODULE_PAYMENT_USIGHT_TEXT_TITLE; $this->description = MODULE_PAYMENT_USIGHT_TEXT_DESCRIPTION; $this->enabled = ((MODULE_PAYMENT_USIGHT_STATUS == 'True') ? true : false); $this->form_action_url = 'https://gateway.usight.com/postauth.secure'; $this->states = $this->_state_list(); } // class methods // this method returns the javascript that will validate the form entry function javascript_validation() { $js = ' if (payment_value == "' . $this->code . '") {' . "\n" . ' var cc_owner = document.checkout_payment.usight_cc_owner.value;' . "\n" . ' var cc_number = document.checkout_payment.usight_cc_number.value;' . "\n" . ' if (cc_owner == "" || cc_owner.length < ' . CC_OWNER_MIN_LENGTH . ') {' . "\n" . ' error_message = error_message + "' . MODULE_PAYMENT_USIGHT_TEXT_JS_CC_OWNER . '";' . "\n" . ' error = 1;' . "\n" . ' }' . "\n" . ' if (cc_number == "" || cc_number.length < ' . CC_NUMBER_MIN_LENGTH . ') {' . "\n" . ' error_message = error_message + "' . MODULE_PAYMENT_USIGHT_TEXT_JS_CC_NUMBER . '";' . "\n" . ' error = 1;' . "\n" . ' }' . "\n" . ' }' . "\n"; return $js; } // this method returns the html that creates the input form 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))); } if (MODULE_PAYMENT_USIGHT_ACCEPT_VISA == 'True') { $creditCardTypes[] = array('id' => 'VISA', 'text' => 'Visa'); } if (MODULE_PAYMENT_USIGHT_ACCEPT_MASTERCARD == 'True') { $creditCardTypes[] = array('id' => 'MASTERCARD', 'text' => 'MasterCard'); } if (MODULE_PAYMENT_USIGHT_ACCEPT_AMEX == 'True') { $creditCardTypes[] = array('id' => 'AMEX', 'text' => 'American Express'); } if (MODULE_PAYMENT_USIGHT_ACCEPT_DISCOVER == 'True') { $creditCardTypes[] = array('id' => 'DISCOVER', 'text' => 'Discover'); } if (MODULE_PAYMENT_USIGHT_ACCEPT_DINERS == 'True') { $creditCardTypes[] = array('id' => 'DINERS', 'text' => 'Diners Club'); } if (MODULE_PAYMENT_USIGHT_ACCEPT_JCB == 'True') { $creditCardTypes[] = array('id' => 'JCB', 'text' => 'JCB'); } $selection = array('id' => $this->code, 'module' => $this->title, 'fields' => array(array('title' => MODULE_PAYMENT_USIGHT_TEXT_CREDIT_CARD_OWNER, 'field' => tep_draw_input_field('usight_cc_owner', $order->billing['firstname'] . ' ' . $order->billing['lastname'])), array('title' => MODULE_PAYMENT_USIGHT_TEXT_TYPE, 'field' => tep_draw_pull_down_menu('usight_cc_type', $creditCardTypes)), array('title' => MODULE_PAYMENT_USIGHT_TEXT_CREDIT_CARD_NUMBER, 'field' => tep_draw_input_field('usight_cc_number')), array('title' => MODULE_PAYMENT_USIGHT_TEXT_CREDIT_CARD_EXPIRES, 'field' => tep_draw_pull_down_menu('usight_cc_expires_month', $expires_month) . ' ' . tep_draw_pull_down_menu('usight_cc_expires_year', $expires_year)))); return $selection; } // this method is called before the data is sent to the credit card processor // here you can do any field validation that you need to do // we also set the global variables here from the form values function pre_confirmation_check() { global $HTTP_POST_VARS; include(DIR_WS_CLASSES . 'cc_validation.php'); $cc_validation = new cc_validation(); $result = $cc_validation->validate($HTTP_POST_VARS['usight_cc_number'], $HTTP_POST_VARS['usight_cc_expires_month'], $HTTP_POST_VARS['usight_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) . '&usight_cc_owner=' . urlencode($HTTP_POST_VARS['usight_cc_owner']) . '&usight_cc_type=' . urlencode($HTTP_POST_VARS['usight_cc_type']) . '&usight_cc_expires_month=' . $HTTP_POST_VARS['usight_cc_expires_month'] . '&usight_cc_expires_year=' . $HTTP_POST_VARS['usight_cc_expires_year']; tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, $payment_error_return, 'SSL', true, false)); } // check the type the user said the card was, versus the type that cc_validation // says it is. if (($cc_validation->cc_type == 'Visa' && $HTTP_POST_VARS['usight_cc_type'] != 'VISA') || ($cc_validation->cc_type == 'Master Card' && $HTTP_POST_VARS['usight_cc_type'] != 'MASTERCARD') || ($cc_validation->cc_type == 'American Express' && $HTTP_POST_VARS['usight_cc_type'] != 'AMEX') || ($cc_validation->cc_type == 'Diners Club' && $HTTP_POST_VARS['usight_cc_type'] != 'DINERS') || ($cc_validation->cc_type == 'Discover' && $HTTP_POST_VARS['usight_cc_type'] != 'DISCOVER') || ($cc_validation->cc_type == 'JCB' && $HTTP_POST_VARS['usight_cc_type'] != 'JCB')) { $payment_error_return = 'payment_error=' . $this->code . '&error=' . urlencode(MODULE_PAYMENT_USIGHT_TEXT_WRONG_TYPE) . '&usight_cc_owner=' . urlencode($HTTP_POST_VARS['usight_cc_owner']) . '&usight_cc_type=' . urlencode($HTTP_POST_VARS['usight_cc_type']) . '&usight_cc_expires_month=' . $HTTP_POST_VARS['usight_cc_expires_month'] . '&usight_cc_expires_year=' . $HTTP_POST_VARS['usight_cc_expires_year']; tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, $payment_error_return, 'SSL', true, false)); } $this->cc_card_owner = $HTTP_POST_VARS['usight_cc_owner']; $this->cc_card_type = $HTTP_POST_VARS['usight_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; } // this method returns the data for the confirmation page function confirmation() { global $HTTP_POST_VARS; $confirmation = array('title' => $this->title, 'fields' => array(array('title' => MODULE_PAYMENT_USIGHT_TEXT_CREDIT_CARD_OWNER, 'field' => $HTTP_POST_VARS['usight_cc_owner']), array('title' => MODULE_PAYMENT_USIGHT_TEXT_TYPE, 'field' => $HTTP_POST_VARS['usight_cc_type']), array('title' => MODULE_PAYMENT_USIGHT_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_USIGHT_TEXT_CREDIT_CARD_EXPIRES, 'field' => strftime('%B, %Y', mktime(0,0,0,$HTTP_POST_VARS['usight_cc_expires_month'], 1, '20' . $HTTP_POST_VARS['usight_cc_expires_year']))))); return $confirmation; } // this method performs the authorization by sending the data to the processor, and getting the result function process_button() { global $HTTP_SERVER_VARS, $order, $customer_id, $insert_id; $process_button_string = tep_draw_hidden_field('GWUsername', ((MODULE_PAYMENT_USIGHT_TESTMODE == 'Production') ? MODULE_PAYMENT_USIGHT_LOGIN : 'testgate')) . tep_draw_hidden_field('GWAmount', number_format($order->info['total'], 2)) . tep_draw_hidden_field('cardtype', $this->cc_card_type) . tep_draw_hidden_field('GWCardNumber', $this->cc_card_number) . tep_draw_hidden_field('GWCardExpMonth', $this->cc_expiry_month) . tep_draw_hidden_field('GWCardExpYear', $this->cc_expiry_year) . tep_draw_hidden_field('GWBillingFirstName', $order->billing['firstname']) . tep_draw_hidden_field('GWBillingLastName', $order->billing['lastname']) . tep_draw_hidden_field('GWNameOnCard', $this->cc_card_owner) . tep_draw_hidden_field('GWBillingAddress', $order->billing['street_address']) . tep_draw_hidden_field('address2', $order->billing['suburb']) . tep_draw_hidden_field('GWBillingCity', $order->billing['city']) . // iongate expects 2 digit capilalized state codes tep_draw_hidden_field('GWBillingState', $this->states[strtoupper($order->billing['state'])]) . tep_draw_hidden_field('GWBillingZip', $order->billing['postcode']) . tep_draw_hidden_field('country', $order->billing['country']['title']) . tep_draw_hidden_field('Phone', $order->customer['telephone']) . // a blank email address will suppress the customer email tep_draw_hidden_field('Email', ((MODULE_PAYMENT_USIGHT_EMAIL_CUSTOMER == 'True') ? $order->customer['email_address']: '')) . // the word NO suppresses the merchant email. The email address used is on // file with iongate tep_draw_hidden_field('merchemail', ((MODULE_PAYMENT_USIGHT_EMAIL_MERCHANT == 'True') ? '' : 'NO')) . tep_draw_hidden_field('custno', $customer_id) . // I would like to get the order number here // but it isn't available under after this code // executes. So, we'll put the date in there // so that we have something to reference. If // we get more than one order per second we // have problems, but I guess that would be // a pretty good problem to have :) tep_draw_hidden_field('InvoiceNo', date('Ymdhis')) . tep_draw_hidden_field('Description', 'Order Submitted from IP: ' . $HTTP_SERVER_VARS['REMOTE_ADDR'] . "\n" . $products_list) . // for testing, use this receipturl and it will show you the // values returned from iongate tep_draw_hidden_field('receipturl', 'DISPLAY') . //tep_draw_hidden_field('receipturl', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL', false)) . // if you don't set this, iongate will display input forms for any missing // or invalid data. tep_draw_hidden_field('returnallerrors', 'YES') . $process_button_string .= tep_draw_hidden_field(tep_session_name(), tep_session_id()); return $process_button_string; } // this method gets called after the processing is done but before the app server // accepts the result. It is used to check for errors. function before_process() { global $HTTP_GET_VARS; if ($HTTP_GET_VARS['ResponseCode'] != '3') { tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error=' . $this->code . '&error=' . urlencode(MODULE_PAYMENT_USIGHT_TEXT_GATEWAY_TIMEOUT), 'SSL', true, false)); } if ($HTTP_GET_VARS['ResponseCode'] != '2') { tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'payment_error=' . $this->code . '&error=' . urlencode(MODULE_PAYMENT_USIGHT_TEXT_ERROR_MESSAGE . '<br>' . $HTTP_GET_VARS['AUTHRESPONSE']), 'SSL', true, false)); } } function after_process() { return false; } function get_error() { global $HTTP_GET_VARS; $error = array('title' => MODULE_PAYMENT_USIGHT_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_USIGHT_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 Usight Module', 'MODULE_PAYMENT_USIGHT_STATUS', 'True', 'Do you want to accept Usight 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 Username', 'MODULE_PAYMENT_USIGHT_LOGIN', 'testing', 'The login username used for the Usight 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_USIGHT_TESTMODE', 'Test', 'Transaction mode used for processing orders', '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 ('Customer Notifications', 'MODULE_PAYMENT_USIGHT_EMAIL_CUSTOMER', 'False', 'Should Usight e-mail a receipt to the customer?', '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, set_function, date_added) values ('Merchant Notifications', 'MODULE_PAYMENT_USIGHT_EMAIL_MERCHANT', 'True', 'Should Usight e-mail a receipt to the store owner?', '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, set_function, date_added) values ('Accept Visa', 'MODULE_PAYMENT_USIGHT_ACCEPT_VISA', 'True', 'Should we accept Visa?', '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, set_function, date_added) values ('Accept Mastercard', 'MODULE_PAYMENT_USIGHT_ACCEPT_MASTERCARD', 'True', 'Should we accept Mastercard?', '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, set_function, date_added) values ('Accept American Express', 'MODULE_PAYMENT_USIGHT_ACCEPT_AMEX', 'True', 'Should we accept American Express?', '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, set_function, date_added) values ('Accept Discover', 'MODULE_PAYMENT_USIGHT_ACCEPT_DISCOVER', 'True', 'Should we accept Discover?', '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, set_function, date_added) values ('Accept Diners Club', 'MODULE_PAYMENT_USIGHT_ACCEPT_DINERS', 'True', 'Should we accept Diners Club?', '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, set_function, date_added) values ('Accept JCB', 'MODULE_PAYMENT_USIGHT_ACCEPT_JCB', 'True', 'Should we accept JCB?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())"); } function remove() { tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')"); } function keys() { return array('MODULE_PAYMENT_USIGHT_STATUS', 'MODULE_PAYMENT_USIGHT_LOGIN', 'MODULE_PAYMENT_USIGHT_TESTMODE', 'MODULE_PAYMENT_USIGHT_EMAIL_CUSTOMER', 'MODULE_PAYMENT_USIGHT_EMAIL_MERCHANT', 'MODULE_PAYMENT_USIGHT_ACCEPT_VISA', 'MODULE_PAYMENT_USIGHT_ACCEPT_MASTERCARD', 'MODULE_PAYMENT_USIGHT_ACCEPT_AMEX', 'MODULE_PAYMENT_USIGHT_ACCEPT_DISCOVER', 'MODULE_PAYMENT_USIGHT_ACCEPT_DINERS', 'MODULE_PAYMENT_USIGHT_ACCEPT_JCB'); } // this internal method returns an array keyed by state name, with a value of state code function _state_list() { $list = array('ALABAMA' => 'AL' , 'ALASKA' => 'AK' , 'AMERICAN SAMOA' => 'AS' , 'ARIZONA' => 'AZ' , 'ARKANSAS' => 'AR' , 'CALIFORNIA' => 'CA' , 'COLORADO' => 'CO' , 'CONNECTICUT' => 'CT' , 'DELAWARE' => 'DE' , 'DISTRICT OF COLUMBIA' => 'DC' , 'FEDERATED STATES OF MICRONESIA' => 'FM' , 'FLORIDA' => 'FL' , 'GEORGIA' => 'GA' , 'GUAM' => 'GU' , 'HAWAII' => 'HI' , 'IDAHO' => 'ID' , 'ILLINOIS' => 'IL' , 'INDIANA' => 'IN' , 'IOWA' => 'IA' , 'KANSAS' => 'KS' , 'KENTUCKY' => 'KY' , 'LOUISIANA' => 'LA' , 'MAINE' => 'ME' , 'MARSHALL ISLANDS' => 'MH' , 'MARYLAND' => 'MD' , 'MASSACHUSETTS' => 'MA' , 'MICHIGAN' => 'MI' , 'MINNESOTA' => 'MN' , 'MISSOURI' => 'MS' , 'MONTANA' => 'MT' , 'NEBRASKA' => 'NE' , 'NEVADA' => 'NV' , 'NEW HAMPSHIRE' => 'NH' , 'NEW JERSEY' => 'NJ' , 'NEW MEXICO' => 'NM' , 'NEW YORK' => 'NY' , 'NORTH CAROLINA' => 'NC' , 'NORTH DAKOTA' => 'ND' , 'NORTHERN MARIANA ISLANDS' => 'MP' , 'OHIO' => 'OH' , 'OKLAHOMA' => 'OK' , 'OREGON' => 'OR' , 'PALAU' => 'PW' , 'PENNSYLVANIA' => 'PA' , 'PUERTO RICO' => 'PR' , 'RHODE ISLAND' => 'RI' , 'SOUTH CAROLINA' => 'SC' , 'SOUTH DAKOTA' => 'SD' , 'TENNESSEE' => 'TN' , 'TEXAS' => 'TX' , 'UTAH' => 'UT' , 'VERMONT' => 'VT' , 'VIRGIN ISLANDS' => 'VI' , 'VIRGINIA' => 'VA' , 'WASHINGTON' => 'WA' , 'WEST VIRGINIA' => 'WV' , 'WISCONSIN' => 'WI' , 'WYOMING' => 'WY' , 'ARMED FORCES AFRICA' => 'AE' , 'ARMED FORCES EUROPE' => 'AE' , 'ARMED FORCES CANADA' => 'AE' , 'ARMED FORCES MIDDLE EAST' => 'AE' , 'ARMED FORCES AMERICAS' => 'AA' , 'ARMED FORCES PACIFIC' => 'AP'); return $list; } } ?>
  11. John, that is a great idea. Thanks for getting me on the right track. Usight.com does have a help page with examples of how to interface with their gateway. Now, just to figure out how this OSC stuff works. I'll post a contribution if I end up getting it to work. Thanks
  12. I also use uSight gateway, and need a payment module contribution. I am willing to write one, but do not know how to do that. Usight told me they will not do it for me either. How do I go about this? How should I begin? Can anyone help us? Thanks.
×