[TEP-COMMIT] CVS: catalog/catalog/includes/modules/payment authorizenet.php,1.49,1.50

"Thomas A. Moulton" <[email protected]>
Newsgroups gmane.comp.web.oscommerce.cvs
Message-ID <[email protected]>
Update of /cvsroot/tep/catalog/catalog/includes/modules/payment
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17863/includes/modules/payment

Modified Files:
	authorizenet.php 
Log Message:
Add updated Authorizenet module certified with the latest API.

Gateway changes needed to newest configuration


Index: authorizenet.php
===================================================================
RCS file: /cvsroot/tep/catalog/catalog/includes/modules/payment/authorizenet.php,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- authorizenet.php	17 Nov 2003 20:34:31 -0000	1.49
+++ authorizenet.php	26 Jan 2004 02:59:08 -0000	1.50
@@ -9,9 +9,14 @@
 
   Released under the GNU General Public License
 */
+// need if (exists()) and error message maybe have admin message too
+   if (file_exists(MODULE_PAYMENT_AUTHORIZENET_LOGIN_FILE)) {
+     include(MODULE_PAYMENT_AUTHORIZENET_LOGIN_FILE); // Get our private defines
+   }
 
   class authorizenet {
-    var $code, $title, $description, $enabled;
+    var $code, $title, $description, $enabled, $sort_order, $order_status, $form_action_url;
+    var $cc_card_type, $cc_card_number, $cc_expiry_month, $cc_expiry_year;
 
 // class constructor
     function authorizenet() {
@@ -21,6 +26,9 @@
       $this->title = MODULE_PAYMENT_AUTHORIZENET_TEXT_TITLE;
       $this->description = MODULE_PAYMENT_AUTHORIZENET_TEXT_DESCRIPTION;
       $this->enabled = ((MODULE_PAYMENT_AUTHORIZENET_STATUS == 'True') ? true : false);
+      if (MODULE_PAYMENT_AUTHORIZENET_LOGIN == 'MODULE_PAYMENT_AUTHORIZENET_LOGIN') {
+        $this->enabled = false; // Login Name not defined, disable
+      }
       $this->sort_order = MODULE_PAYMENT_AUTHORIZENET_SORT_ORDER;
 
       if ((int)MODULE_PAYMENT_AUTHORIZENET_ORDER_STATUS_ID > 0) {
@@ -29,10 +37,12 @@
 
       if (is_object($order)) $this->update_status();
 
-      $this->form_action_url = 'https://secure.authorize.net/gateway/transact.dll';
+      if (MODULE_PAYMENT_AUTHORIZENET_GATEWAY_METHOD == 'SIM') {
+        $this->form_action_url = 'https://secure.authorize.net/gateway/transact.dll';
+      // } else $this->process_action_url = 'https://certification.authorize.net/gateway/transact.dll';
+      } else $this->process_action_url = 'https://secure.authorize.net/gateway/transact.dll';
     }
 
-// Authorize.net utility functions
 // DISCLAIMER:
 //     This code is distributed in the hope that it will be useful, but without any warranty;
 //     without even the implied warranty of merchantability or fitness for a particular purpose.
@@ -90,11 +100,11 @@
   $tstamp = time ();
   $fingerprint = $this->hmac ($txnkey, $loginid . "^" . $sequence . "^" . $tstamp . "^" . $amount . "^" . $currency);
 
-  $str = tep_draw_hidden_field('x_fp_sequence', $sequence) .
-         tep_draw_hidden_field('x_fp_timestamp', $tstamp) .
-         tep_draw_hidden_field('x_fp_hash', $fingerprint);
+  $vars = array('x_fp_sequence' => $sequence,
+                'x_fp_timestamp' => $tstamp,
+                'x_fp_hash' => $fingerprint);
 
-  return $str;
+  return $vars;
 }
 // end authorize.net code
 
@@ -141,23 +151,58 @@
     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)));
-      }
+      if (MODULE_PAYMENT_AUTHORIZENET_METHOD == 'Credit Card') {
+        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_AUTHORIZENET_TEXT_CREDIT_CARD_OWNER,
-                                                 'field' => tep_draw_input_field('authorizenet_cc_owner', $order->billing['firstname'] . ' ' . $order->billing['lastname'])),
-                                           array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_CREDIT_CARD_NUMBER,
-                                                 'field' => tep_draw_input_field('authorizenet_cc_number')),
-                                           array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_CREDIT_CARD_EXPIRES,
-                                                 'field' => tep_draw_pull_down_menu('authorizenet_cc_expires_month', $expires_month) . '&nbsp;' . tep_draw_pull_down_menu('authorizenet_cc_expires_year', $expires_year))));
+        $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_AUTHORIZENET_TEXT_CREDIT_CARD_OWNER,
+                                                   'field' => tep_draw_input_field('authorizenet_cc_owner', $order->billing['firstname'] . ' ' . $order->billing['lastname'])),
+                                             array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_CREDIT_CARD_NUMBER,
+                                                   'field' => tep_draw_input_field('authorizenet_cc_number')),
+                                             array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_CREDIT_CARD_EXPIRES,
+                                                   'field' => tep_draw_pull_down_menu('authorizenet_cc_expires_month', $expires_month, $today['mon']) . '&nbsp;' . tep_draw_pull_down_menu('authorizenet_cc_expires_year', $expires_year))));
+      } else { // eCheck
+        $acct_types = array(array('id' => 'CHECKING', 'text' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_TYPE_CHECK),
+                            array('id' => 'SAVINGS', 'text' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_TYPE_SAVINGS));
+        $org_types = array(array('id' => 'I', 'text' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_ORG_PERSONAL),
+                           array('id' => 'B', 'text' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_ORG_BUSINESS));
+        $fields = array(array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_NAME,
+                              'field' => tep_draw_input_field('authorizenet_bank_owner', $order->billing['firstname'] . ' ' . $order->billing['lastname'])),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_TYPE,
+                              'field' => tep_draw_pull_down_menu('authorizenet_bank_acct_type', $acct_types)),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_NAME,
+                              'field' => tep_draw_input_field('authorizenet_bank_name')),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ABA_CODE,
+                              'field' => tep_draw_input_field('authorizenet_bank_aba')),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_NUM,
+                              'field' => tep_draw_input_field('authorizenet_bank_acct')));
 
+        if (MODULE_PAYMENT_AUTHORIZENET_WELLSFARGO == 'Yes') { // Add extra fields
+          $fields_wf = array(array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_ORG,
+                                   'field' => tep_draw_pull_down_menu('wellsfargo_org_type', $org_types)),
+                             array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_INTRO,
+                                   'field' => ''),
+                             array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_TAXID,
+                                   'field' => tep_draw_input_field('wellsfargo_taxid')),
+                             array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_DLNUM,
+                                   'field' => tep_draw_input_field('wellsfargo_dlnum')),
+                             array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_STATE,
+                                   'field' => tep_draw_input_field('wellsfargo_state')),
+                             array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_DOB,
+                                   'field' => tep_draw_input_field('wellsfargo_dob')));
+           $fields = array_merge($fields, $fields_wf);
+        }
+        $selection = array('id' => $this->code,
+                           'module' => $this->title,
+                           'fields' => $fields);
+      }
       return $selection;
     }
 
@@ -166,35 +211,37 @@
         global $_POST;
       }
 
-      include(DIR_WS_CLASSES . 'cc_validation.php');
+      if (MODULE_PAYMENT_AUTHORIZENET_METHOD == 'Credit Card') {
+        include(DIR_WS_CLASSES . 'cc_validation.php');
 
-      $cc_validation = new cc_validation();
-      $result = $cc_validation->validate($_POST['authorizenet_cc_number'], $_POST['authorizenet_cc_expires_month'], $_POST['authorizenet_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;
-      }
+        $cc_validation = new cc_validation();
+        $result = $cc_validation->validate($_POST['authorizenet_cc_number'], $_POST['authorizenet_cc_expires_month'], $_POST['authorizenet_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) . '&authorizenet_cc_owner=' . urlencode($_POST['authorizenet_cc_owner']) . '&authorizenet_cc_expires_month=' . $_POST['authorizenet_cc_expires_month'] . '&authorizenet_cc_expires_year=' . $_POST['authorizenet_cc_expires_year'];
+        if ( ($result == false) || ($result < 1) ) {
+          $payment_error_return = 'payment_error=' . $this->code . '&error=' . urlencode($error) . '&authorizenet_cc_owner=' . urlencode($_POST['authorizenet_cc_owner']) . '&authorizenet_cc_expires_month=' . $_POST['authorizenet_cc_expires_month'] . '&authorizenet_cc_expires_year=' . $_POST['authorizenet_cc_expires_year'];
 
-        tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, $payment_error_return, 'SSL', true, false));
-      }
+          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;
+        $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() {
@@ -202,52 +249,148 @@
         global $_POST;
       }
 
-      $confirmation = array('title' => $this->title . ': ' . $this->cc_card_type,
-                            'fields' => array(array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_CREDIT_CARD_OWNER,
-                                                    'field' => $_POST['authorizenet_cc_owner']),
-                                              array('title' => MODULE_PAYMENT_AUTHORIZENET_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_AUTHORIZENET_TEXT_CREDIT_CARD_EXPIRES,
-                                                    'field' => strftime('%B, %Y', mktime(0,0,0,$_POST['authorizenet_cc_expires_month'], 1, '20' . $_POST['authorizenet_cc_expires_year'])))));
+      if (MODULE_PAYMENT_AUTHORIZENET_METHOD == 'Credit Card') {
+        $confirmation = array('title' => $this->title . ': ' . $this->cc_card_type,
+                              'fields' => array(array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_CREDIT_CARD_OWNER,
+                                                      'field' => $_POST['authorizenet_cc_owner']),
+                                                array('title' => MODULE_PAYMENT_AUTHORIZENET_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_AUTHORIZENET_TEXT_CREDIT_CARD_EXPIRES,
+                                                      'field' => strftime('%B, %Y', mktime(0,0,0,$_POST['authorizenet_cc_expires_month'], 1, '20' . $_POST['authorizenet_cc_expires_year'])))));
+      } else { // eCheck
+        $fields = array(array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_NAME,
+                              'field' => $_POST['authorizenet_bank_owner']),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_TYPE,
+                              'field' => $_POST['authorizenet_bank_acct_type']),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_NAME,
+                              'field' => $_POST['authorizenet_bank_name']),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ABA_CODE,
+                              'field' => $_POST['authorizenet_bank_aba']),
+                        array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_BANK_ACCT_NUM,
+                              'field' => $_POST['authorizenet_bank_acct']));
 
+        if (MODULE_PAYMENT_AUTHORIZENET_WELLSFARGO == 'Yes') { // Add extra fields
+          if (tep_not_null($_POST['wellsfargo_taxid'])) {
+            $fields_wf = array(array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_TAXID,
+                                     'field' => $_POST['wellsfargo_taxid']));
+          } else {
+            $fields_wf = array(array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_DLNUM,
+                                     'field' => $_POST['wellsfargo_dlnum']),
+                               array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_STATE,
+                                     'field' => $_POST['wellsfargo_state']),
+                               array('title' => MODULE_PAYMENT_AUTHORIZENET_TEXT_WF_DOB,
+                                     'field' => $_POST['wellsfargo_dob']));
+          }
+          $fields = array_merge($fields, $fields_wf);
+        }
+        $confirmation = array('title' => $this->title . ' : eCheck',
+                              'fields' => $fields);
+      }
       return $confirmation;
     }
 
-    function process_button() {
-      global $osC_Session, $osC_Customer, $order;
+    function make_gateway_vars() {
+      global $order, $osC_Customer;
 
-      $sequence = rand(1, 1000);
-      $process_button_string = tep_draw_hidden_field('x_Login', MODULE_PAYMENT_AUTHORIZENET_LOGIN) .
-                               tep_draw_hidden_field('x_Card_Num', $this->cc_card_number) .
-                               tep_draw_hidden_field('x_Exp_Date', $this->cc_expiry_month . substr($this->cc_expiry_year, -2)) .
-                               tep_draw_hidden_field('x_Amount', number_format($order->info['total'], 2)) .
-                               tep_draw_hidden_field('x_Relay_URL', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL', false)) .
-                               tep_draw_hidden_field('x_Method', ((MODULE_PAYMENT_AUTHORIZENET_METHOD == 'Credit Card') ? 'CC' : 'ECHECK')) .
-                               tep_draw_hidden_field('x_Version', '3.0') .
-                               tep_draw_hidden_field('x_Cust_ID', $osC_Customer->id) .
-                               tep_draw_hidden_field('x_Email_Customer', ((MODULE_PAYMENT_AUTHORIZENET_EMAIL_CUSTOMER == 'True') ? 'TRUE': 'FALSE')) .
-                               tep_draw_hidden_field('x_first_name', $order->billing['firstname']) .
-                               tep_draw_hidden_field('x_last_name', $order->billing['lastname']) .
-                               tep_draw_hidden_field('x_address', $order->billing['street_address']) .
-                               tep_draw_hidden_field('x_city', $order->billing['city']) .
-                               tep_draw_hidden_field('x_state', $order->billing['state']) .
-                               tep_draw_hidden_field('x_zip', $order->billing['postcode']) .
-                               tep_draw_hidden_field('x_country', $order->billing['country']['title']) .
-                               tep_draw_hidden_field('x_phone', $order->customer['telephone']) .
-                               tep_draw_hidden_field('x_email', $order->customer['email_address']) .
-                               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_Customer_IP', tep_get_ip_address()) .
-                               $this->InsertFP(MODULE_PAYMENT_AUTHORIZENET_LOGIN, MODULE_PAYMENT_AUTHORIZENET_TXNKEY, number_format($order->info['total'], 2), $sequence);
-      if (MODULE_PAYMENT_AUTHORIZENET_TESTMODE == 'Test') $process_button_string .= tep_draw_hidden_field('x_Test_Request', 'TRUE');
+      if (MODULE_PAYMENT_AUTHORIZENET_METHOD == 'Credit Card') {
+        $gw_pay_type = array('x_Card_Num' => $this->cc_card_number,
+                             'x_Exp_Date' => $this->cc_expiry_month . substr($this->cc_expiry_year, -2),
+                             'x_Type' => MODULE_PAYMENT_AUTHORIZENET_CREDIT_CAPTURE,
+                             'x_Method' => 'CC');
+      }
+      if (MODULE_PAYMENT_AUTHORIZENET_METHOD == 'eCheck') {
+        $gw_pay_type = array('x_bank_acct_name' => $this->ec_bank_owner,
+                             'x_bank_acct_type' => $this->ec_bank_acct_type,
+                             'x_bank_name' => $this->ec_bank_name,
+                             'x_bank_aba_code' => $this->ec_bank_aba,
+                             'x_bank_acct_num' => $this->ec_bank_acct,
+                             'x_Type' => 'AUTH_CAPTURE',
+                             'x_echeck_type' => 'WEB',
+                             'x_Method' => 'ECHECK');
 
-      $process_button_string .= tep_draw_hidden_field($osC_Session->name, $osC_Session->id);
+        if (MODULE_PAYMENT_AUTHORIZENET_WELLSFARGO == 'Yes') { // Add extra fields
+          if (tep_not_null($this->wf_taxid)) {
+            $gw_pay_type2 = array('x_customer_tax_id' => $this->wf_taxid,
+                                  'x_customer_organization_type' => $this->wf_org_type);
+          } else {
+            $gw_pay_type2 = array('x_drivers_license_number' => $this->wf_dlnum,
+                                  'x_drivers_license_state' => $this->wf_state,
+                                  'x_drivers_license_dob' => $this->wf_dob,
+                                  'x_customer_organization_type' => $this->wf_org_type);
+          }
+          $gw_pay_type = array_merge($gw_pay_type, $gw_pay_type2);
+        }
+      }
+      $gw_common= array('x_Login' => MODULE_PAYMENT_AUTHORIZENET_LOGIN, 
+                        'x_tran_key' => MODULE_PAYMENT_AUTHORIZENET_TXNKEY,
+                        'x_Amount' => number_format($order->info['total'], 2, '.', ''),
+                        'x_Version' => '3.0',
+                        'x_Cust_ID' => $osC_Customer,
+                        'x_Email_Customer' => ((MODULE_PAYMENT_AUTHORIZENET_EMAIL_CUSTOMER == 'True') ? 'TRUE': 'FALSE'),
+                        'x_first_name' => $order->billing['firstname'],
+                        'x_last_name' => $order->billing['lastname'],
+                        'x_company' => $order->billing['company'],
+                        'x_address' => $order->billing['street_address'],
+                        'x_city' => $order->billing['city'],
+                        'x_state' => $order->billing['state'],
+                        'x_zip' => $order->billing['postcode'],
+                        'x_country' => $order->billing['country']['title'],
+                        'x_phone' => $order->customer['telephone'],
+                        'x_email' => $order->customer['email_address'],
+                        'x_ship_to_first_name' => $order->delivery['firstname'],
+                        'x_ship_to_last_name' => $order->delivery['lastname'],
+                        'x_ship_to_address' => $order->delivery['street_address'],
+                        'x_ship_to_city' => $order->delivery['city'],
+                        'x_ship_to_state' => $order->delivery['state'],
+                        'x_ship_to_zip' => $order->delivery['postcode'],
+                        'x_ship_to_country' => $order->delivery['country']['title'],
+                        'x_Customer_IP' => getenv('REMOTE_ADDR'));
+
+      $gw_vars = array_merge($gw_common, $gw_pay_type);
+      return $gw_vars;
+    }
+
+    function process_button() {
+      if (PHP_VERSION < 4.1) {
+        global $_POST;
+      }
 
+      $process_button_string = '';
+
+      if (MODULE_PAYMENT_AUTHORIZENET_GATEWAY_METHOD == 'SIM') {
+        $gw_vars = $this->make_gateway_vars();
+        $sequence = rand(1, 1000);
+        $gw_vars = array_merge($gw_vars, $this->InsertFP(MODULE_PAYMENT_AUTHORIZENET_LOGIN, MODULE_PAYMENT_AUTHORIZENET_TXNKEY, $gw_vars['X_Amount'], $sequence));
+        $gw_vars['x_Relay_URL'] = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL', false);
+        $gw_vars['x_Relay_Response'] = 'TRUE';
+        $gw_vars['x_delim_data'] = 'TRUE';
+        $gw_vars['x_delim_char'] = '|';
+        if (MODULE_PAYMENT_AUTHORIZENET_TESTMODE == 'Test') $gw_vars['x_Test_Request'] = 'TRUE';
+        $gw_vars[$osC_Session->name] = $osC_Session->id;
+        reset($gw_vars);
+        while (list($key, $value) = each($gw_vars)) {
+          $process_button_string .= tep_draw_hidden_field($key, $value) . "\n";
+        }
+      } else {
+        if (MODULE_PAYMENT_AUTHORIZENET_METHOD == 'Credit Card') {
+          $process_button_string .= tep_draw_hidden_field('authorizenet_cc_number', $this->cc_card_number) . "\n";
+          $process_button_string .= tep_draw_hidden_field('authorizenet_cc_expiry_month', $this->cc_expiry_month) . "\n";
+          $process_button_string .= tep_draw_hidden_field('authorizenet_cc_expiry_year', $this->cc_expiry_year) . "\n";
+        } else { // eCheck
+          $process_button_string .= tep_draw_hidden_field('authorizenet_bank_owner', $_POST['authorizenet_bank_owner']) . "\n";
+          $process_button_string .= tep_draw_hidden_field('authorizenet_bank_acct_type', $_POST['authorizenet_bank_acct_type']) . "\n";
+          $process_button_string .= tep_draw_hidden_field('authorizenet_bank_name', $_POST['authorizenet_bank_name']) . "\n";
+          $process_button_string .= tep_draw_hidden_field('authorizenet_bank_aba', $_POST['authorizenet_bank_aba']) . "\n";
+          $process_button_string .= tep_draw_hidden_field('authorizenet_bank_acct', $_POST['authorizenet_bank_acct']) . "\n";
+          if (MODULE_PAYMENT_AUTHORIZENET_WELLSFARGO == 'Yes') { // Add extra fields
+            $process_button_string .= tep_draw_hidden_field('wellsfargo_taxid', $_POST['wellsfargo_taxid']) . "\n";
+            $process_button_string .= tep_draw_hidden_field('wellsfargo_dlnum', $_POST['wellsfargo_dlnum']) . "\n";
+            $process_button_string .= tep_draw_hidden_field('wellsfargo_state', $_POST['wellsfargo_state']) . "\n";
+            $process_button_string .= tep_draw_hidden_field('wellsfargo_dob', $_POST['wellsfargo_dob']) . "\n";
+            $process_button_string .= tep_draw_hidden_field('wellsfargo_org_type', $_POST['wellsfargo_org_type']) . "\n";
+          }
+        }
+      }
       return $process_button_string;
     }
 
@@ -256,12 +399,60 @@
         global $_POST;
       }
 
-      if ($_POST['x_response_code'] == '1') return;
-      if ($_POST['x_response_code'] == '2') {
-        tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_AUTHORIZENET_TEXT_DECLINED_MESSAGE), 'SSL', true, false));
+      if (MODULE_PAYMENT_AUTHORIZENET_GATEWAY_METHOD == 'AIM') {
+        if (MODULE_PAYMENT_AUTHORIZENET_METHOD == 'Credit Card') {
+          $this->cc_card_number = $_POST['authorizenet_cc_number'];
+          $this->cc_expiry_month = $_POST['authorizenet_cc_expiry_month'];
+          $this->cc_expiry_year = $_POST['authorizenet_cc_expiry_year'];
+        } else { // eCheck
+          $this->ec_bank_owner = $_POST['authorizenet_bank_owner'];
+          $this->ec_bank_acct_type = $_POST['authorizenet_bank_acct_type'];
+          $this->ec_bank_name = $_POST['authorizenet_bank_name'];
+          $this->ec_bank_aba = $_POST['authorizenet_bank_aba'];
+          $this->ec_bank_acct = $_POST['authorizenet_bank_acct'];
+          if (MODULE_PAYMENT_AUTHORIZENET_WELLSFARGO == 'Yes') { // Add extra fields
+            $this->wf_taxid = $_POST['wellsfargo_taxid'];
+            $this->wf_dlnum = $_POST['wellsfargo_dlnum'];
+            $this->wf_state = $_POST['wellsfargo_state'];
+            $this->wf_dob = $_POST['wellsfargo_dob'];
+            $this->wf_org_type = $_POST['wellsfargo_org_type'];
+          }
+        }
+        $gw_vars = $this->make_gateway_vars();
+        $sequence = rand(1, 1000);
+        // $gw_vars = array_merge($gw_vars, $this->InsertFP(MODULE_PAYMENT_AUTHORIZENET_LOGIN, MODULE_PAYMENT_AUTHORIZENET_TXNKEY, $gw_vars['X_Amount'], $sequence));
+        if (MODULE_PAYMENT_AUTHORIZENET_TESTMODE == 'Test') $gw_vars['x_Test_Request'] = 'TRUE';
+        $gw_vars[tep_session_name()] = tep_session_id();
+        $gw_vars['x_delim_data'] = 'TRUE';
+        $gw_vars['x_delim_char'] = '|';
+        $gw_vars['x_relay_response'] = 'FALSE';
+        reset($gw_vars);
+        $curl_opts = ' ' . $this->process_action_url;
+        while (list($key, $value) = each($gw_vars)) {
+          $curl_opts .= " -d " . $key . "=" . urlencode($value);
+        }
+        $handle = popen(MODULE_PAYMENT_AUTHORIZENET_CURL . $curl_opts, "r");
+        $str = '';
+        while (!feof($handle)) {
+          $str .= fread($handle, 2048);
+        }
+        pclose($handle);
+        $result = explode("|", urldecode($str));
+        $x_response_code = $result[0];
+        $x_response_reason_text = $result[3];
+// echo $x_response_code . " " . $x_response_reason_text . "<br>";
+ // echo urldecode($str); exit(0);
+      } else {
+        $x_response_code = $_POST['x_response_code'];
+        $x_response_reason_text = $_POST['x_response_reason_text'];
+      }
+
+      if ($x_response_code == '1') return;
+      if ($x_response_code == '2') {
+        tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_AUTHORIZENET_TEXT_DECLINED_MESSAGE.$x_response_reason_text), 'SSL', true, false));
       }
       // Code 3 is an error - but anything else is an error too (IMHO)
-      tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_AUTHORIZENET_TEXT_ERROR_MESSAGE), 'SSL', true, false));
+      tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_AUTHORIZENET_TEXT_ERROR_MESSAGE.$x_response_reason_text) . '&error=' . urlencode($x_response_reason_text), 'SSL', true, false));
     }
 
     function after_process() {
@@ -287,24 +478,29 @@
       return $this->_check;
     }
 
+    function remove() {
+      tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
+    }
+
     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 Authorize.net Module', 'MODULE_PAYMENT_AUTHORIZENET_STATUS', 'True', 'Do you want to accept Authorize.net 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_AUTHORIZENET_LOGIN', 'testing', 'The login username used for the Authorize.net service', '6', '0', now())");
+      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Include file that defines the Login Username', 'MODULE_PAYMENT_AUTHORIZENET_LOGIN_FILE', '" . DIR_FS_CATALOG . "includes/local/auth_login.php', 'The full path to the file that defines the login username used for the Authorize.net service. This should be a secure file. The PHP variable MODULE_PAYMENT_AUTHORIZENET_LOGIN must be defined here.', '6', '0', now())");
       tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Transaction Key', 'MODULE_PAYMENT_AUTHORIZENET_TXNKEY', 'Test', 'Transaction Key used for encrypting TP data', '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_AUTHORIZENET_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 ('Transaction Method', 'MODULE_PAYMENT_AUTHORIZENET_METHOD', 'Credit Card', 'Transaction method used for processing orders', '6', '0', 'tep_cfg_select_option(array(\'Credit Card\', \'eCheck\'), ', 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 ('Gateway Method', 'MODULE_PAYMENT_AUTHORIZENET_GATEWAY_METHOD', 'AIM', 'Gateway transaction method used for processing orders', '6', '0', 'tep_cfg_select_option(array(\'AIM\', \'SIM\'), ', 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_AUTHORIZENET_EMAIL_CUSTOMER', 'False', 'Should Authorize.Net 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, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_AUTHORIZENET_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', now())");
       tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Payment Zone', 'MODULE_PAYMENT_AUTHORIZENET_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '2', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
       tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Order Status', 'MODULE_PAYMENT_AUTHORIZENET_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', 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 ('Credit Card Mode', 'MODULE_PAYMENT_AUTHORIZENET_CREDIT_CAPTURE', 'AUTH_CAPTURE', 'Credit Card processing method. Authorize Only or Authorize and Capture (Collect Funds)', '6', '0', 'tep_cfg_select_option(array(\'AUTH_CAPTURE\', \'AUTH_ONLY\'), ', 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 ('Wells Fargo Secure Source Account?', 'MODULE_PAYMENT_AUTHORIZENET_WELLSFARGO', 'No', 'Set to YES if your account is with Wells Fargo', '6', '0', 'tep_cfg_select_option(array(\'No\', \'Yes\'), ', now())");
+      tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Path to cURL', 'MODULE_PAYMENT_AUTHORIZENET_CURL', '/usr/local/bin/curl', 'The full path to the cURL program (ask your hosting provider)', '6', '0', now())");
     }
 
-    function remove() {
-      tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
-    }
-
+// Authorize.net utility functions
     function keys() {
-      return array('MODULE_PAYMENT_AUTHORIZENET_STATUS', 'MODULE_PAYMENT_AUTHORIZENET_LOGIN', 'MODULE_PAYMENT_AUTHORIZENET_TXNKEY', 'MODULE_PAYMENT_AUTHORIZENET_TESTMODE', 'MODULE_PAYMENT_AUTHORIZENET_METHOD', 'MODULE_PAYMENT_AUTHORIZENET_EMAIL_CUSTOMER', 'MODULE_PAYMENT_AUTHORIZENET_ZONE', 'MODULE_PAYMENT_AUTHORIZENET_ORDER_STATUS_ID', 'MODULE_PAYMENT_AUTHORIZENET_SORT_ORDER');
+      return array('MODULE_PAYMENT_AUTHORIZENET_STATUS', 'MODULE_PAYMENT_AUTHORIZENET_LOGIN_FILE', 'MODULE_PAYMENT_AUTHORIZENET_TXNKEY', 'MODULE_PAYMENT_AUTHORIZENET_GATEWAY_METHOD', 'MODULE_PAYMENT_AUTHORIZENET_TESTMODE', 'MODULE_PAYMENT_AUTHORIZENET_METHOD', 'MODULE_PAYMENT_AUTHORIZENET_CREDIT_CAPTURE', 'MODULE_PAYMENT_AUTHORIZENET_WELLSFARGO', 'MODULE_PAYMENT_AUTHORIZENET_EMAIL_CUSTOMER', 'MODULE_PAYMENT_AUTHORIZENET_ZONE', 'MODULE_PAYMENT_AUTHORIZENET_ORDER_STATUS_ID', 'MODULE_PAYMENT_AUTHORIZENET_SORT_ORDER', 'MODULE_PAYMENT_AUTHORIZENET_CURL');
     }
   }
 ?>



-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.