First certified version of plugin.
authorChuck Scott <cscott@gaslightmedia.com>
Thu, 23 Apr 2015 20:51:44 +0000 (16:51 -0400)
committerChuck Scott <cscott@gaslightmedia.com>
Thu, 23 Apr 2015 20:51:44 +0000 (16:51 -0400)
18 files changed:
NOTES.txt [new file with mode: 0644]
assets/checkout_tests.html [new file with mode: 0644]
assets/index.php [new file with mode: 0644]
classes/MesTridentGateway.php
classes/glmMesGateway.php
classes/index.php [new file with mode: 0644]
defines.php
glm-woocommerce-merchant-e-solutions-gateway.php [new file with mode: 0644]
i18n/languages/default.pot [new file with mode: 0644]
i18n/languages/do_xgettext [new file with mode: 0755]
i18n/languages/glm-woocommerce-merchant-e-solutions-gateway.pot [new file with mode: 0644]
i18n/languages/index.php [new file with mode: 0644]
index.php
readme.txt
views/paymentForm.php [deleted file]
woo-includes/class-wc-dependencies.php [new file with mode: 0644]
woo-includes/index.php [new file with mode: 0644]
woo-includes/woo-functions.php [new file with mode: 0644]

diff --git a/NOTES.txt b/NOTES.txt
new file mode 100644 (file)
index 0000000..860210c
--- /dev/null
+++ b/NOTES.txt
@@ -0,0 +1,6 @@
+Development Notes
+-----------------
+
+
+* Do I need the following???
+
diff --git a/assets/checkout_tests.html b/assets/checkout_tests.html
new file mode 100644 (file)
index 0000000..dadaa7e
--- /dev/null
@@ -0,0 +1,63 @@
+<html>
+
+    <head>
+    </head>
+    
+    <body>
+        <h2>GLM MES Payment Gateway Test Information</h2>
+        <p>
+            Any valid credit card number may be used when the "Transaction Mode" is set to "Test Mode". 
+            In test mode, all transactions are simulated and will not impact the cardholder's account.
+        </p> 
+        
+        <h3>Credit Card Test Numbers</h3>
+        <pre>
+            Cart Type         Card Number
+            ----------------- -----------------
+            Visa 16 digit     4012301230123010
+            Visa 13 digit     4012301230158
+            MasterCard        5123012301230120 
+            American Express  349999999999991
+            Discover          6011011231231235 
+            JCB               3528288605211810
+        </pre>
+        
+        <h3>Address Verification Tests</h3>
+        <p>
+            The following test data and responses may be helpful for testing this payment gateway 
+            and validating that a particular implementation is functioning properly.
+        </p>
+        <pre>
+            Address Verification Tests
+            Street #     ZIP/postal code   Result 
+            ------------ ---------------- --------------------------------------------------------
+            123          55555            Y - street and postal code match
+            123          999991111        Y - street and postal code match (Visa) 
+                                          X - street and postal code match (MasterCard)
+            123          EH8 9ST          D - exact match, international 
+            123          Other Zip        A - address match, zip mismatch 
+            234          Any Zip          U - address unavailable   
+            345          Any Zip          G - verification unavailable due to international 
+                                              issuer non-participation (Visa and MasterCard only)
+            456          Any Zip          R - issuer system unavailable, retry 
+            235          Any Zip          S - AVS not supported 
+            (other)      55555            Z - address mismatch, 5-digit zip match 
+            (other)      EH8 9ST          Z - address mismatch, international zip match  
+        </pre>
+        
+        <h3>Credit Card Security Code Tests</h3>
+        <pre>
+            CCV, CVC, CID Code Tests
+            Code             Result
+            ---------------- ------------------------------
+            123              M - Match
+            234              P - Not Processed
+            345              U - Issuer is not certified
+            (other 3 digit)  N - No Match
+            1234 (AMEX)      M - Match
+            2345 (AMEX)      P - Not Processed
+            (other 4 digit)  N - No Match
+        </pre>      
+    </body>
+
+</html>
\ No newline at end of file
diff --git a/assets/index.php b/assets/index.php
new file mode 100644 (file)
index 0000000..7e91415
--- /dev/null
@@ -0,0 +1,2 @@
+<?php
+// Silence is golden.
\ No newline at end of file
index 2978140..2d57a56 100644 (file)
@@ -38,12 +38,12 @@ class TpgTransaction
             "transaction_id",
             "card_present",
             "reference_number",
-            "merchant_name",
-            "merchant_city",
-            "merchant_state",
-            "merchant_zip",
-            "merchant_category_code",
-            "merchant_phone",
+//            "merchant_name",
+//            "merchant_city",
+//            "merchant_state",
+//            "merchant_zip",
+//            "merchant_category_code",
+//            "merchant_phone",
             "invoice_number",
             "tax_amount",
             "ship_to_zip",
index c83ad79..24e6c9b 100644 (file)
@@ -14,6 +14,8 @@
  * @link     http://dev.gaslightmedia.com/
  */
 
+/***** NOTE NEED TO SCAN THIS FOR LANGUAGE SUPPORT ******/
+
 /*
  * MES Gateway class
  *
  * http://docs.woothemes.com/wc-apidocs/class-WC_Payment_Gateway.html
  *
  * Development Credentials
- * Merchant Name       Gaslight Media
- * Profile ID          94100012117800000059
- * Profile Key         cBCBDBscxFpIRCJzcBqnKFORrBcNJXCt
- * Request URL         https://cert.merchante-solutions.com/mes-api/tridentApi
+ * Merchant Name Gaslight Media
+ * Profile ID 94100012117800000059
+ * Profile Key cBCBDBscxFpIRCJzcBqnKFORrBcNJXCt
+ * Request URL https://cert.merchante-solutions.com/mes-api/tridentApi
  *
  */
 class GlmMesGateway extends WC_Payment_Gateway
 {
 
-   /**
+    /**
+     * Plugin Name
+     *
+     * @var $name
+     */
+    public $name;
+
+    /**
+     * Text Domain
+     *
+     * @access public
+     * @var string
+     */
+    public $text_domain;
+
+    /**
      * Cards Accepted
      *
      * @var $visa
      * @var $mastercard
      * @var $amex
+     * @var $discover
      * @access public
      */
     public $visa = false;
     public $mastercard = false;
     public $amex = false;
+    public $discover = false;
+
     /**
      * Transaction Mode
      *
@@ -48,6 +68,7 @@ class GlmMesGateway extends WC_Payment_Gateway
      * @access public
      */
     public $transaction_mode;
+
     /**
      * Gateway Icon URL
      *
@@ -55,13 +76,15 @@ class GlmMesGateway extends WC_Payment_Gateway
      * @access public
      */
     public $icon;
-   /**
+
+    /**
      * Profile ID
      *
      * @var $profile_id
      * @access public
      */
     public $profile_id;
+
     /**
      * Profile Key
      *
@@ -69,6 +92,7 @@ class GlmMesGateway extends WC_Payment_Gateway
      * @access public
      */
     public $profile_key;
+
     /**
      * Processing URL
      *
@@ -76,420 +100,963 @@ class GlmMesGateway extends WC_Payment_Gateway
      * @access public
      */
     public $url;
+
     /**
-     * Credit Card Months
+     * Gateway Settings
      *
-     * @var $cc_months
+     * @var $settings
      * @access public
      */
-    public $cc_months;
+    public $settings;
+
     /**
-     * Credit Card Exp Years
+     * Gateway Settings
      *
-     * @var $cc_start_year
-     * @var $cc_end_year
-     * @access public
+     * @var $ccNumb
+     * @var $cc_exp
+     * @var $cc_cvc
+     *
+     * @access private
      */
-    public $cc_start_year;
-    public $cc_end_year;
+    private $ccNumb;
+    private $cc_exp;
+    private $cc_cvc;
+
     /**
-     * Cleaned User Input Array
+     * Amount driven test value
      *
-     * @var $glm_mes_in
+     * @var $amount_driven_test
      * @access public
      */
-    public $glm_mes_in;
+    public $amount_driven_test;
 
+    /**
+     * Customer Order object
+     *
+     * @var $cust_order
+     * @access public
+     */
+    public $cust_order;
 
+    /**
+     * Gateway Response Arrays
+     *
+     * @var $respDescr
+     * @var $amountDrivenTests
+     * @access public
+     */
+    public $respDescr;
+    public $amountDrivenTests;
 
     public function __construct ()
     {
-        // Add filter for our gateway
-        add_filter( 'woocommerce_payment_gateways', array( $this, 'glmMesAddGateway') );
-
-        $this->id = GLM_MES_ID;
-
-        // Title of gateway and description displayed in WooCommerce Checkout configuration pages
-        $this->method_title = __( GLM_MES_SHORT_NAME, GLM_MES_ID );
-        $this->method_description = __( GLM_MES_DESCRIPTION, GLM_MES_ID );
-
-        // Icon displayed with gateway in checkout page
-        $this -> icon = GLM_MES_ICON;
+        $this->name = GLM_MES_NAME;
+        $this->text_domain = GLM_MES_DIR;
+
+        $this->respDescr = array(
+
+                '001' => __('Please contact your credit card issuer or try another card.', 'glm-merchant_e_solutions'),
+                '002' => __('Please contact your credit card issuer or try another card', 'glm-merchant_e_solutions'),
+                '004' => __('Your card may not be used at this time. Please contact your credit card issuer or try another card.', 'glm-merchant_e_solutions'),
+                '005' => __('Your purchase using this credit card has been declined. If you have another credit card, you may try that at this time.', 'glm-merchant_e_solutions'),
+                '007' => __('Please contact your credit card issuer or try another card', 'glm-merchant_e_solutions'),
+                '014' => __('Your credit card number appears to be incorrect. Please check the card number you entered and try again.', 'glm-merchant_e_solutions'),
+                '015' => __('Your credit card number appears to be incorrect. Please check the card number you entered and try again.', 'glm-merchant_e_solutions'),
+                '019' => __('Your card was not successfully processed. Please try again. If you continue to get this response, please call for assistance.', 'glm-merchant_e_solutions'),
+                '041' => __('Please contact your credit card issuer or try another card.', 'glm-merchant_e_solutions'),
+                '043' => __('Please contact your credit card issuer or try another card.', 'glm-merchant_e_solutions'),
+                '051' => __('Your card is not currently able to cover the cost of this purchase. Delete contents from your cart or try again later.', 'glm-merchant_e_solutions'),
+                '054' => __('Your card appears to be expired. Please check your credit card information below or try another card.', 'glm-merchant_e_solutions'),
+                '057' => __('This purchase is not permitted with your credit card. Please contact your credit card issuer or try another card.', 'glm-merchant_e_solutions'),
+                '059' => __('Please contact your credit card issuer or try another card.', 'glm-merchant_e_solutions'),
+                '084' => __('There was a problem processing your credit cart. If you continue to get this response, please call for assistance.', 'glm-merchant_e_solutions'),
+                '110' => __('We do not accept this type of credit card. Please try another card or call for assistance.', 'glm-merchant_e_solutions'),
+                '114' => __('You did not supply all required credit card information. Please check your credit card payment information below.', 'glm-merchant_e_solutions'),
+                '210' => __('The address you entered did not satisfactorlly match the cardholder\'s address.', 'glm-merchant_e_solutions'),
+                '211' => __('The card security code (3 or 4 digit code, usually on the back of the card) did not match.', 'glm-merchant_e_solutions')
 
-        // Displays checkout fields for "direct" integration
-        $this->has_fields = true;
-
-        // Supports the default credit card form
-        $this->supports = array( 'default_credit_card_form' );
+        );
 
-        // Setup Fields and Settings
-        $this->init_form_fields();
-        $this->init_settings();
+        $this->amountDrivenTests = array(
+                '' => __('(none)', 'glm-merchant_e_solutions'),
+                '0.00' => '$0.00'.__('Card OK', 'glm-merchant_e_solutions'),
+                '0.01' => '$0.01'.__('Call', 'glm-merchant_e_solutions'),
+                '0.02' => '$0.02'.__('Call - special condition', 'glm-merchant_e_solutions'),
+                '0.04' => '$0.04'.__('Hold-call - pick up card (no fraud)', 'glm-merchant_e_solutions'),
+                '0.05' => '$0.05'.__('Decline - do not honor', 'glm-merchant_e_solutions'),
+                '0.07' => '$0.07'.__('Hold-call - pick up card (fraud)', 'glm-merchant_e_solutions'),
+                '0.14' => '$0.14'.__('Card # error', 'glm-merchant_e_solutions'),
+                '0.15' => '$0.15'.__('No such issuer', 'glm-merchant_e_solutions'),
+                '0.19' => '$0.19'.__('Re-enter transaction', 'glm-merchant_e_solutions'),
+                '0.41' => '$0.41'.__('Hold-call - pickup card (fraud: lost card)', 'glm-merchant_e_solutions'),
+                '0.43' => '$0.43'.__('Hold-call - pickup card (fraud: stolen card)', 'glm-merchant_e_solutions'),
+                '0.51' => '$0.51'.__('Decline - insufficient funds', 'glm-merchant_e_solutions'),
+                '0.54' => '$0.54'.__('Expired card', 'glm-merchant_e_solutions'),
+                '0.57' => '$0.57'.__('Transaction not permitted to cardholder', 'glm-merchant_e_solutions'),
+                '0.59' => '$0.59'.__('Suspected fraud', 'glm-merchant_e_solutions'),
+                '0.84' => '$0.84'.__('Invalid Auth', 'glm-merchant_e_solutions'),
+                '0.86' => '$0.86'.__('Unable to validate pin (not used in this plugin)', 'glm-merchant_e_solutions'),
+                '1.10' => '$1.10'.__('Card type not accepted by merchant', 'glm-merchant_e_solutions')
+        );
 
-        // Get the title and description for this checkout method to use in checkout page
-        $this->title = $this->get_option( 'title' );
-        $this->description = $this->get_option( 'description' );
+        // Add filter for our gateway
+        add_filter('woocommerce_payment_gateways',
+                array(
+                        $this,
+                        'glmMesAddGateway'
+                ));
+
+        // Add localization
+        add_action('init',
+                array(
+                        $this,
+                        'load_plugin_textdomain'
+                ));
 
-        // Add credit cards available to the description
-        $this->description .= '<h4>Credit Cards Accepted</h4><p>'
-            .($this->settings['visa'] == 'yes' ? '<img src="'.GLM_MES_ASSETS_URL.'/visa.png">' : '')
-            .($this->settings['mastercard'] == 'yes' ? '<img src="'.GLM_MES_ASSETS_URL.'/mastercard.png">' : '')
-            .($this->settings['amex'] == 'yes' ? '<img src="'.GLM_MES_ASSETS_URL.'/amex.png">' : '')
-            .'</p>';
+        $this->id = GLM_MES_ID;
 
-        // Set the transaction mode selected in the WooCommerce Checkout configuration page for this gateway
-        $this -> transaction_mode = $this->settings['transaction_mode'];
+        // Is WooCommerce activated?
+        if (! in_array('woocommerce/woocommerce.php',
+                apply_filters('active_plugins', get_option('active_plugins')))) {
 
-        // Determine if we're in test or production mode
-        switch ($this -> settings['transaction_mode']) {
+            if (is_admin()) {
+                add_action('admin_notices',
+                        array(
+                                $this,
+                                'woocommerce_missing_notice'
+                        ));
+                }
+            return false;
+
+        } elseif (defined('WC_VERSION') &&
+                 version_compare(WC_VERSION, GLM_MES_REQUIRED_WOO_VERSION, '>=')) {
+
+            // Title of gateway and description displayed in WooCommerce Checkout configuration pages
+            $this->method_description = __('A Merchant e-Solutions payment Gateway plug-in for WooCommerce.', 'glm-merchant_e_solutions');
+
+            // Icon displayed with gateway in checkout page
+            $this->icon = GLM_MES_ICON;
+
+            // Displays checkout fields for "direct" integration
+            $this->has_fields = true;
+
+            // Supports the default credit card form
+            $this->supports = array(
+                    'default_credit_card_form',
+                    'refunds'
+            );
+
+            // Setup Fields and Settings
+            $this->init_form_fields();
+            $this->init_settings();
+
+            // Get the title and description for this checkout method to use on
+            // the checkout page
+            $this->title = $this->settings['title'];
+            $this->description = $this->settings['description'];
+
+            $this->settings['address_verification'] == $this->settings['address_verification'];
+            $this->settings['cvv_required'] = $this->settings['cvv_required'];
+
+            // Add credit cards available to the description
+            $this->description .= '<h4>Credit Cards Accepted</h4><p>' . ($this->settings['visa'] ==
+                     'yes' ? '<img src="' . GLM_MES_ASSETS_URL . '/visa.png">' : '') . ($this->settings['mastercard'] ==
+                     'yes' ? '<img src="' . GLM_MES_ASSETS_URL .
+                     '/mastercard.png">' : '') . ($this->settings['amex'] ==
+                     'yes' ? '<img src="' . GLM_MES_ASSETS_URL . '/amex.png">' : '') . ($this->settings['discover'] ==
+                     'yes' ? '<img src="' . GLM_MES_ASSETS_URL .
+                     '/discover.png">' : '') . '</p>';
+
+            // Check for SSL
+            add_action('admin_notices', array(
+                    $this,
+                    'ssl_check'
+            ));
+
+            // Set the transaction mode selected in the WooCommerce Checkout
+            // configuration page for this gateway
+            $this->transaction_mode = $this->settings['transaction_mode'];
+
+            // Determine if we're in test or production mode
+            switch ($this->settings['transaction_mode']) {
+
+                case 'test':
+                    $this->profile_id = $this->settings['test_profile_id'];
+                    $this->profile_key = $this->settings['test_profile_key'];
+                    $this->host = $this->settings['test_url'];
+                    $this->amount_driven_test = $this->settings['amount_driven_test'];
+                    break;
+
+                case 'production':
+                    $this->profile_id = $this->settings['prod_profile_id'];
+                    $this->profile_key = $this->settings['prod_profile_key'];
+                    $this->host = $this->settings['prod_url'];
+                    break;
+            }
+
+            // Set debug defines
+            if (! defined('GLM_MES_DEBUG')) {
+                $d = ($this->settings['mes_debug'] == 'yes');
+                define('GLM_MES_DEBUG', $d);
+                $d = ($this->settings['mes_debug_verbose'] == 'yes');
+                define('GLM_MES_DEBUG_VERBOSE', $d);
+            }
+
+            // Process admin options
+            if (is_admin()) {
+                add_action(
+                        'woocommerce_update_options_payment_gateways_' . $this->id,
+                        array(
+                                $this,
+                                'process_admin_options'
+                        ));
+            }
 
-            case 'test':
-                $this->profile_id = $this -> settings['test_profile_id'];
-                $this->profile_key = $this -> settings['test_profile_key'];
-                $this->host = $this -> settings['test_url'];
-                break;
+        } else {
 
-            case 'production':
-                $this->profile_id = $this -> settings['prod_profile_id'];
-                $this->profile_key = $this -> settings['prod_profile_key'];
-                $this->host = $this -> settings['prod_url'];
-                break;
+            if (is_admin()) {
+                add_action('admin_notices',
+                        array(
+                                $this,
+                                'upgrade_notice'
+                        ));
+            }
+            return false;
 
         }
 
-        if (!defined('GLM_MES_DEBUG')) {
-            $d = ($this -> settings['mes_debug'] == 'yes');
-            define('GLM_MES_DEBUG', $d);
-            $d = ($this -> settings['mes_debug_verbose'] == 'yes');
-            define('GLM_MES_DEBUG_VERBOSE', $d);
+        // Add Checkout Page Messsages
+        if (!is_admin()) {
+            add_action('woocommerce_before_checkout_form',
+                    array(
+                            $this,
+                            'glmMesCheckoutMessages'
+                    ));
         }
 
-        add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
-
     }
 
     // Tell WooCommerce that we exist
-    public function glmMesAddGateway( $methods )
+    public function glmMesAddGateway ($methods)
     {
         $methods[] = 'GlmMesGateway';
+
         return $methods;
     }
 
-    /*
-     *  Initialize Form Fields
+    // Place message at top of checkout page
+    public function glmMesCheckoutMessages ($methods)
+    {
+        static $msg_sent = false;
+
+        if ($this->settings['transaction_mode'] == 'test') {
+
+            if (!$msg_sent) {
+                wc_add_notice('<b style="color: red;">PAYMENT GATEWAY OPERATING IN TEST MODE</b><br>
+                    <p>
+                        The credit card payment gateway is operating in test mode.
+                        All transactions are simulated. There will be no impact on cardholder\'s account,
+                        nor will there be any actual funds transfered to the merchant account.
+                        Click below for a list of card numbers, addresses, and card security codes that may be used
+                        for testing.
+                        <br>
+                        <a href="'.GLM_MES_ASSETS_URL.'/checkout_tests.html" target="_blank" style="font-size: 1.2em;">Show Test Options</a>
+                        <br>
+                        Also note that "Amount Driven Tests" may be selected in "WooCommerce" -> "Settings" -> "Checkout" -> "GLM Merchant e-Solutions"
+                    </p>
+                ', 'notice');
+
+                $msg_sent = true;
+            }
+        }
+    }
+
+    /**
+     * Check if SSL has been set for checkout
+     * Warn admin user if not.
+     *
+     * @access public
+     * @return
+     *
+     */
+    public function ssl_check ()
+    {
+        // This is used to prevent duplicate messages
+        static $ssl_check_sent = false;
+
+        if ($this->enabled == "yes" && ! $ssl_check_sent) {
+            if (get_option('woocommerce_force_ssl_checkout') == "no") {
+//**** USE ONLY SINGLE QUOTES
+                echo "<div class=\"error\"><p>" .
+                         sprintf(
+                                __(
+                                        "
+                        <strong>%s</strong> is enabled and WooCommerce is not forcing the
+                        SSL certificate on your checkout page. <br>Please ensure that you have
+                        a valid SSL certificate and that you are <a href=\"%s\">forcing
+                        the checkout pages to be secured.</a>",
+                                'glm-merchant_e_solutions'),
+                                 GLM_MES_SHORT_NAME,
+                                admin_url('admin.php?page=wc-settings&tab=checkout')) .
+                         "</p></div>";
+                $ssl_check_sent = true;
+            }
+        }
+    }
+
+    /**
+     * WooCommerce Payment Gateway Upgrade Notice.
      *
-     *  Add form fields to the WooCommerce Checkout page for this gateway
+     * @access public
+     * @return string
      */
+    public function upgrade_notice ()
+    {
+        echo '<div class="updated woocommerce-message wc-connect"><p>' .
+                 sprintf(
+                        __(
+                                '%s depends on version %s and up of WooCommerce! Please upgrade before activating.',
+                                'glm-merchant_e_solutions'), $this->name,
+                        GLM_MES_REQUIRED_WOO_VERSION) . '</p></div>';
+    }
 
+    /**
+     * Load Localisation files.
+     *
+     * Note: the first-loaded translation file overrides any
+     * following ones if the same translation is present.
+     *
+     * @access public
+     * @return void
+     */
+    public function load_plugin_textdomain ()
+    {
+        // Set filter for plugin's languages directory
+        $lang_dir = dirname(plugin_basename(__FILE__)) . '/languages/';
+        $lang_dir = apply_filters(
+                'woocommerce_' . GLM_MES_SLUG . '_languages_directory',
+                GLM_MES_LANGUAGE_PATH);
+
+        // Traditional WordPress plugin locale filter
+        $locale = apply_filters('plugin_locale', get_locale(),
+                $this->text_domain);
+        $mofile = sprintf('%1$s-%2$s.mo', $this->text_domain, $locale);
+
+        // Setup paths to current locale file
+        $mofile_local = GLM_MES_LANGUAGE_PATH . $mofile;
+        $mofile_global = WP_LANG_DIR . '/' . $this->text_domain . '/' . $mofile;
+        if (file_exists($mofile_global)) {
+
+            // Look in global /wp-content/languages/plugin-name/ folder
+            load_textdomain($this->text_domain, $mofile_global);
+        } else
+            if (file_exists($mofile_local)) {
+                // Look in local /wp-content/plugins/plugin-name/languages/
+                // folder
+                load_textdomain($this->text_domain, $mofile_local);
+            } else {
+                // Load the default language files
+                load_plugin_textdomain($this->text_domain, false, $lang_dir);
+            }
+    }
 
-    public function init_form_fields()
+    /*
+     * Initialize Form Fields
+     *
+     * Add form fields to the WooCommerce Checkout page for this gateway
+     */
+    public function init_form_fields ()
     {
 
         $this->form_fields = array(
 
                 // Enable gateway chackbox
                 'enabled' => array(
-                        'title' => __( 'Enable/Disable', 'woocommerce' ),
+                        'title' => __('Enable/Disable', 'glm-merchant_e_solutions'),
                         'type' => 'checkbox',
-                        'label' => __( 'Enable Merchant e-Solutions Gateway', 'woocommerce' ),
+                        'label' => __('Enable Merchant e-Solutions Gateway',
+                                'glm-merchant_e_solutions'),
                         'default' => 'yes'
                 ),
 
                 // Title displayed to user for this payment method
                 'title' => array(
-                        'title' => __( 'Title', 'woocommerce' ),
+                        'title' => __('Title', 'glm-merchant_e_solutions'),
                         'type' => 'text',
-                        'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ),
-                        'default' => __( 'Credit Card Payment', 'woocommerce' ),
-                        'desc_tip'      => true,
+                        'description' => __(
+                                'This controls the title which the user sees during checkout.',
+                                'glm-merchant_e_solutions'),
+                        'default' => __('Credit Card Payment', 'glm-merchant_e_solutions'),
+                        'desc_tip' => true
                 ),
 
                 // Description to customer at checkout
                 'description' => array(
-                        'title' => __( 'Description', 'woocommerce' ),
+                        'title' => __('Description', 'glm-merchant_e_solutions'),
                         'type' => 'textarea',
                         'default' => 'A description of this payment method to the user at checkout. Include cards accepted, etc.'
                 ),
 
                 'sep_0' => array(
-                        'title'       => __( 'Credit Cards Accepted', 'woocommerce' ),
-                        'type'        => 'title',
-                        'description' => '',
+                        'title' => __('Credit Cards Accepted', 'glm-merchant_e_solutions'),
+                        'type' => 'title',
+                        'description' => ''
                 ),
 
                 // Visa
                 'visa' => array(
-                        'title'       => __( '', 'woocommerce' ),
-                        'type'        => 'checkbox',
-                        'label' => __( 'Visa', 'woocommerce' ),
-                        'desc_tip'    => false,
+                        'title' => '',
+                        'type' => 'checkbox',
+                        'label' => __('Visa', 'glm-merchant_e_solutions'),
+                        'desc_tip' => false,
                         'default' => 'no'
                 ),
 
                 // MasterCard
                 'mastercard' => array(
-                        'title'       => __( '', 'woocommerce' ),
-                        'type'        => 'checkbox',
-                        'label' => __( 'MasterCard', 'woocommerce' ),
-                        'desc_tip'    => false,
+                        'title' => '',
+                        'type' => 'checkbox',
+                        'label' => __('MasterCard', 'glm-merchant_e_solutions'),
+                        'desc_tip' => false,
                         'default' => 'no'
                 ),
 
                 // Amex
                 'amex' => array(
-                        'title'       => __( '', 'woocommerce' ),
-                        'type'        => 'checkbox',
-                        'label' => __( 'American Express', 'woocommerce' ),
-                        'desc_tip'    => false,
+                        'title' => '',
+                        'type' => 'checkbox',
+                        'label' => __('American Express', 'glm-merchant_e_solutions'),
+                        'desc_tip' => false,
+                        'default' => 'no'
+                ),
+
+                // Discover
+                'discover' => array(
+                        'title' => '',
+                        'type' => 'checkbox',
+                        'label' => __('Discover', 'glm-merchant_e_solutions'),
+                        'desc_tip' => false,
+                        'default' => 'no'
+                ),
+
+                // Require Address Verification
+                'address_verification' => array(
+                        'title' => __('Require Address Verification', 'glm-merchant_e_solutions'),
+                        'type' => 'checkbox',
+                        'label' => __('Check to require valid address verification before charging credit card.', 'glm-merchant_e_solutions'),
+                        'default' => 'no'
+                ),
+
+                // Require Credit Card CCV/CVC/CID
+                'cvv_required' => array(
+                        'title' => __('Require CVV/CVC/CID', 'glm-merchant_e_solutions'),
+                        'type' => 'checkbox',
+                        'label' => __('Check to require a valid credit card CVV/CVC/CID when charging card.', 'glm-merchant_e_solutions'),
                         'default' => 'no'
                 ),
 
                 'sep_1' => array(
-                        'title'       => __( 'Test Mode Credentials', 'woocommerce' ),
-                        'type'        => 'title',
-                        'description' => '',
+                        'title' => __('Test Mode Credentials', 'glm-merchant_e_solutions'),
+                        'type' => 'title',
+                        'description' => ''
                 ),
 
                 // MeS Gateway Profile ID
                 'test_profile_id' => array(
-                        'title' => __( 'Test Profile ID', 'woocommerce' ),
+                        'title' => __('Test Profile ID', 'glm-merchant_e_solutions'),
                         'type' => 'text',
-                        'default' => __( '9410000xxxxx00000001', 'woocommerce' ),
-                        'desc_tip'      => false,
+                        'desc_tip' => false,
+                        'placeholder' => '9410000xxxxx00000001'
                 ),
 
                 // MeS Gateway Profile Key
                 'test_profile_key' => array(
-                        'title' => __( 'Test Profile Key', 'woocommerce' ),
+                        'title' => __('Test Profile Key', 'glm-merchant_e_solutions'),
                         'type' => 'text',
-                        'default' => __( 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'woocommerce' ),
-                        'desc_tip'      => false,
+                        'desc_tip' => false,
+                        'placeholder' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
                 ),
 
                 // MeS Gateway Test URL
                 'test_url' => array(
-                        'title' => __( 'Test URL', 'woocommerce' ),
+                        'title' => __('Test URL', 'glm-merchant_e_solutions'),
                         'type' => 'text',
-                        'default' => __( 'https://cert.merchante-solutions.com/mes-api/tridentApi', 'woocommerce' ),
-                        'desc_tip'      => false,
+                        'default' => 'https://cert.merchante-solutions.com/mes-api/tridentApi',
+                        'desc_tip' => false
                 ),
 
                 'sep_2' => array(
-                        'title'       => __( '<p>&nbsp;</p>Production Mode Credentials', 'woocommerce' ),
-                        'type'        => 'title',
-                        'description' => '',
+                        'title' => '<p>&nbsp;</p>'.__(
+                                'Production Mode Credentials',
+                                'glm-merchant_e_solutions'),
+                        'type' => 'title',
+                        'description' => ''
                 ),
 
                 // MeS Gateway Profile ID
                 'prod_profile_id' => array(
-                        'title' => __( 'Production Profile ID', 'woocommerce' ),
+                        'title' => __('Production Profile ID', 'glm-merchant_e_solutions'),
                         'type' => 'text',
-                        'default' => __( '9410000xxxxx00000001', 'woocommerce' ),
-                        'desc_tip'      => false,
+                        'desc_tip' => false,
+                        'placeholder' => '9410000xxxxx00000001'
                 ),
 
                 // MeS Gateway Profile Key
                 'prod_profile_key' => array(
-                        'title' => __( 'Production Profile Key', 'woocommerce' ),
+                        'title' => __('Production Profile Key', 'glm-merchant_e_solutions'),
                         'type' => 'text',
-                        'default' => __( 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'woocommerce' ),
-                        'desc_tip'      => false,
+                        'desc_tip' => false,
+                        'placeholder' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
                 ),
 
                 // MeS Gateway Test URL
                 'prod_url' => array(
-                        'title' => __( 'Production URL', 'woocommerce' ),
+                        'title' => __('Production URL', 'glm-merchant_e_solutions'),
                         'type' => 'text',
-                        'default' => __( 'https://cert.merchante-solutions.com/mes-api/tridentApi', 'woocommerce' ),
-                        'desc_tip'      => false,
+                        'default' => 'https://cert.merchante-solutions.com/mes-api/tridentApi',
+                        'desc_tip' => false
                 ),
 
                 'sep_3' => array(
-                        'title'       => __( '<p>&nbsp;</p>Mode Selection', 'woocommerce' ),
-                        'type'        => 'title',
-                        'description' => '',
+                        'title' => '<p>&nbsp;</p>'.__('Mode Selection', 'glm-merchant_e_solutions'),
+                        'type' => 'title',
+                        'description' => ''
                 ),
 
                 // Set Transaction Mode
                 'transaction_mode' => array(
-                        'title'       => __( 'Transaction Mode', 'woocommerce' ),
-                        'type'        => 'select',
-                        'label' => __( 'Must be in "Production Mode" for live transactions.', 'woocommerce' ),
-                        'description' => __( 'See <a href="http://resources.merchante-solutions.com/display/TPGPUB/Payment+Gateway+Certification+Request+Form" target="_blank">MeS Payment Certification Form</a> to apply for required ID and Key below.', 'woocommerce' ),
-                        'default'     => 'test',
-                        'desc_tip'    => false,
-                        'options'     => array(
-                                'test'       => __( 'Test Mode', 'woocommerce' ),
-                                'production' => __( 'Production Mode', 'woocommerce' )
+                        'title' => __('Transaction Mode', 'glm-merchant_e_solutions'),
+                        'type' => 'select',
+                        'label' => __(
+                                'Must be in "Production Mode" for live transactions.',
+                                'glm-merchant_e_solutions'
+                            ),
+                        'description' => sprintf(
+                                __('See %s MeS Payment Certification Form</a> to apply for required ID and Key.',
+                                'glm-merchant_e_solutions'),
+                                '<a href="http://resources.merchante-solutions.com/display/TPGPUB/Payment+Gateway+Certification+Request+Form" target="_blank">'
+                            ),
+                        'default' => 'test',
+                        'desc_tip' => false,
+                        'options' => array(
+                                'test' => __('Test Mode', 'glm-merchant_e_solutions'),
+                                'production' => __('Production Mode', 'glm-merchant_e_solutions')
                         )
                 ),
 
+                // Amount driven Transaction Tests
+                'amount_driven_test' => array(
+                        'title' => __('Amount Driven Tests', 'glm-merchant_e_solutions'),
+                        'type' => 'select',
+                        'description' => __('Selecting an amount driven test will set the payment amount for the transaction to the specific value
+                                and will cause the payment gateway to return the associated respose. This may be used to test all
+                                possible response types that might be experienced in production use.', 'glm-merchant_e_solutions')
+                                .'<br><a href="'.GLM_MES_ASSETS_URL.'/checkout_tests.html" target="_blank" style="font-size: 1.2em;">'
+                                .__('Show Additional Test Options', 'glm-merchant_e_solutions').'</a>',
+                        'options' => $this->amountDrivenTests,
+                        'default' => '',
+                        'desc_tip' => false
+                ),
+
                 // Set Debug Mode
                 'mes_debug' => array(
-                        'title' => __( 'Enable Debug Information', 'woocommerce' ),
+                        'title' => __('Enable Debug Information', 'glm-merchant_e_solutions'),
                         'type' => 'checkbox',
-                        'label' => __( '', 'woocommerce' ),
+                        'label' => __('Check to enable debug output on checkout page.', 'glm-merchant_e_solutions'),
                         'default' => 'no'
                 ),
 
                 // Set Debug Verbose Mode
                 'mes_debug_verbose' => array(
-                        'title' => __( 'Enable Verbose Debug', 'woocommerce' ),
+                        'title' => __('Enable Verbose Debug', 'glm-merchant_e_solutions'),
                         'type' => 'checkbox',
-                        'label' => __( '', 'woocommerce' ),
+                        'label' => __('Check to enable verbose output on checkout page.', 'glm-merchant_e_solutions'),
                         'default' => 'no'
                 )
-
         );
+    }
 
+    /*
+     * Perform any required field validation
+     *
+     * No additional validation at this time
+     */
+    public function validate_fields()
+    {
+        return true;
     }
 
-/*
-    // Set Payment Fields
-    public function payment_fields()
+    /*
+     * Run PreAuth to check address and CSV if set
+     *
+     *
+     * @var string $tans_type 'PreAuth', 'Settle', 'Sale', or 'Refund'
+     * @var float $amount Override order amount, used for refunds
+     *
+     * @access public
+     * @return void
+     */
+    private function run_transaction($trans_type = false, $refund_amount = false, $transaction_id = false)
     {
-        // Set start and end years for card expiration
-        $this->cc_start_year = date('Y');
-        $this->cc_end_year =  $this->cc_start_year + GLM_MES_EXPIRE_YEARS;
+        $response = array(
+            'success' => false
+        );
 
-        if (GLM_MES_DEBUG_VERBOSE) {
-            wc_add_notice('GLM MeS Gateway: Parameters available to payment form...<p><pre>'.print_r($this,1).'</pre></p>', 'success' );
-        }
+        $doDebug = true;
+        $sendRequestData = false;
 
-        require_once (GLM_MES_PATH . '/views/paymentForm.php');
-    }
+        // Create transaction object
+        require_once (GLM_MES_CLASS_PATH . '/MesTridentGateway.php');
 
-    // Validate Payment Fields
-    public function validate_fields()
-    {
+        // Select transaction object by type requested
+        switch ($trans_type) {
 
-//        $this->$glm_mes_in['account_number'] =
-//        $this->sanitize_text_field(  )
-    }
-*/
+            case 'PreAuth':
 
-    /*
-     * Process order with MES Gateway
-     */
-    public function process_payment( $order_id ) {
+                if (GLM_MES_DEBUG_VERBOSE) {
+                    wc_add_notice('GLM MeS Gateway: Running Pre-Authorization', 'success');
+                }
 
-        // Get a copy of our order
-        global $woocommerce;
-        $custOrder = new WC_Order( $order_id );
+                // Only run pre-auth if address verification or CVV test is selected
+                if ($this->settings['address_verification'] == 'yes' ||
+                    $this->settings['cvv_required'] == 'yes' ) {
 
-        // Get our invoice number
-        $invNumb = str_replace( "#", "", $custOrder->get_order_number() );
+                        $trans = new TpgPreAuth($this->profile_id, $this->profile_key);
 
-        // Clean up the submitted credit card data
-        $ccNumb = str_replace( array(' ', '-' ), '', $_POST[GLM_MES_ID.'-card-number'] );
-        $cc_exp = str_replace( array( '/', ' '), '', $_POST[GLM_MES_ID.'-card-expiry'] );
-        $cc_cvc = ( isset( $_POST[GLM_MES_ID.'-card-cvc'] ) ) ? $_POST[GLM_MES_ID.'-card-cvc'] : '';
-
-        /* Some other things available to us
-         $custOrder->billing_first_name,
-         $custOrder->billing_last_name,
-         $custOrder->billing_address_1,
-         $custOrder->billing_city,
-         $custOrder->billing_state,
-         $custOrder->billing_postcode,
-         $custOrder->billing_country,
-         $custOrder->billing_phone,
-         $custOrder->billing_email,
-         $custOrder->shipping_first_name,
-         $custOrder->shipping_last_name,
-         $custOrder->shipping_company,
-         $custOrder->shipping_address_1,
-         $custOrder->shipping_city,
-         $custOrder->shipping_country,
-         $custOrder->shipping_state,
-         $custOrder->shipping_postcode,
-         $custOrder->user_id,
-         $_SERVER['REMOTE_ADDR'],
-        */
+                        $sendRequestData = true;
+
+                        break;
+
+                // otherwise, no pre-auth needs to be run, so say we're OK to go
+                } else {
+
+                    if (GLM_MES_DEBUG_VERBOSE) {
+                        wc_add_notice('GLM MeS Gateway: No Pre-Authorization requested', 'success');
+                    }
+
+                }
+
+                // break;  - If no pre-auth was required, we're just falling through to Sale
+
+            case 'Sale':
+
+                if (GLM_MES_DEBUG_VERBOSE) {
+                    wc_add_notice('GLM MeS Gateway: Running Credit Card', 'success');
+                }
+
+                $trans = new TpgSale($this->profile_id, $this->profile_key);
+
+                $sendRequestData = true;
+
+                break;
+
+            case 'Settle':      // Requires a prior pre-auth
+
+                if (GLM_MES_DEBUG_VERBOSE) {
+                    wc_add_notice('GLM MeS Gateway: Running Credit Card after Pre-Auth', 'success');
+                }
+
+                // If we don't have a transaction ID then can't run Settle
+                if (!$transaction_id) {
+                    if (GLM_MES_DEBUG_VERBOSE) {
+                        wc_add_notice('GLM MeS Gateway: No transaction ID was provided for a Settle request!', 'success');
+                    }
+                    return false;
+                }
+
+                // Send transaction amount or amount driven test value if set
+                if ($this->amount_driven_test) {
+                    $amount = $this->amount_driven_test;
+                } else {
+                    $amount = $this->cust_order->order_total;
+                }
+
+                $trans = new TpgSettle($this->profile_id, $this->profile_key, $transaction_id, $amount);
+
+                $sendRequestData = false;
+
+                break;
+
+            case 'Refund':
+
+                $trans = new TpgRefund($this->profile_id, $this->profile_key, $transaction_id);
+                $trans->setRequestField('transaction_amount', $refund_amount);
+
+                // Don't let debug data be output during a refund.
+                $doDebug = false;
+
+                break;
+
+            default:
+
+                // There is no reason to end up here!!!
+                $response['auth_response_text'] = "Invalid transaction type in run_transaction()!";
+                $response['auth_response_desr'] = "WARNING: This is an internal system error in the GLM MES Payment Gateway.";
+                return $response;
+
+                break;
 
-        if (GLM_MES_DEBUG_VERBOSE) {
-            wc_add_notice('GLM MeS Gateway: process_payment() called', 'success' );
-            wc_add_notice('GLM MeS Gateway: Customer Order Data<p><pre>'.print_r($custOrder,1).'</pre></p>', 'success' );
         }
 
-        // Create transaction object
-        require_once (GLM_MES_CLASS_PATH . '/MesTridentGateway.php');
-        $trans = new TpgSale( $this->profile_id, $this->profile_key, $this->settings );
+        if ($sendRequestData) {
+
+            // Send transaction amount
+            if ($this->amount_driven_test) {
+                $amount = $this->amount_driven_test;
+            } else {
+                $amount = $this->cust_order->order_total;
+            }
+
+            // Send billing information
+            $trans->setAvsRequest($this->cust_order->billing_address_1, $this->cust_order->billing_postcode);
+            $trans->setDynamicData(
+                $this->cust_order->billing_first_name . ' ' .
+                $this->cust_order->billing_last_name, $this->cust_order->billing_city,
+                $this->cust_order->billing_state, $this->cust_order->billing_postcode,
+                $this->cust_order->billing_phone
+            );
+
+            // Send shipping infomration
+            $trans->setRequestField('ship_first_name', $this->cust_order->shipping_first_name);
+            $trans->setRequestField('ship_last_name', $this->cust_order->shipping_last_name);
+            $trans->setRequestField('ship_addr1', $this->cust_order->shipping_address_1);
+            $trans->setRequestField('ship_city', $this->cust_order->shipping_city);
+            $trans->setRequestField('ship_state', $this->cust_order->shipping_state);
+            $trans->setRequestField('ship_zip', $this->cust_order->shipping_postcode);
+
+            // Send Card data
+            $trans->setRequestField('cvv2', $this->cc_cvc);
+            $trans->setRequestField('invoice_number', $this->invNumb);
+            $trans->setTransactionData($this->ccNumb, $this->cc_exp, $amount);
 
-        // Set transaction data
-        $trans->setAvsRequest( $custOrder->billing_address_1, $custOrder->billing_postcode );
-        $trans->setRequestField('cvv2', $cc_cvc);
-        $trans->setRequestField('invoice_number', $invNumb);
-        $trans->setTransactionData( $ccNumb, $cc_exp, $custOrder->order_total );
+        }
 
-        // Call the MeS Gateway
+        // Set the gateway host URL
         $trans->setHost($this->host);
 
-        if (GLM_MES_DEBUG_VERBOSE) {
-            wc_add_notice('GLM MeS Gateway: Transaction Request<p><pre>'.print_r($trans,1).'</pre></p>', 'success');
+        if ($doDebug && GLM_MES_DEBUG_VERBOSE) {
+            wc_add_notice(
+                    'GLM MeS Gateway: Transaction Request<p><pre>' .
+                    print_r($trans, 1) . '</pre></p>', 'success');
         }
 
+        // Execute the transaction
         $trans->execute();
 
-        if (GLM_MES_DEBUG_VERBOSE) {
-            wc_add_notice('GLM MeS Gateway: Response Fields<p><pre>'.print_r($tran2->ResponseFields,1).'</pre></p>', 'success');
-        }
+        // Get response codes and text
+        $response = $trans->ResponseFields;
 
-        // Check result
-        if( $trans->isApproved() ) {
-            $paymentState = 'approved';
-        } else {
-            $paymentState = 'fail';
-            $errorMsg = $trans->ResponseFields['auth_response_text'];
+        if ($doDebug && GLM_MES_DEBUG) {
+            wc_add_notice(
+                    'GLM MeS Gateway: Response Fields - Type = '.$trans_type.'<p><pre>' .
+                    print_r($response, 1) . '</pre></p>',
+                    'success');
         }
 
-        // Take action based on payment state
-        switch ($paymentState) {
+        // Check for success based on transaction type
+        switch ($trans_type) {
 
-            case 'complete':
+            case 'PreAuth':
 
-                // Mark order as complete
-                $order->payment_complete();
+                $auth = true;
 
-                // Return thank you page redirect
-                return array(
-                        'result' => 'success',
-                        'redirect' => $this->get_return_url( $order )
-                );
+                // Selectr "Show Additional Test Options" in "GLM Merchant e-Solutions" settings for these response codes.
 
-                break;
+                // If address verification
+                if ($this->settings['address_verification'] == 'yes') {
+                    if (!in_array($response['avs_result'], array('Y', 'X', 'D', 'S'))) {
+                        $auth = false;
+                        $response['auth_response_descr'] = "The address you entered does not seem to match the address for this credit card.
+                                Please check your address and try again.<br>";
+                    }
+                }
 
-            case 'call_for_approval':
+                // If CVV required
+                if ($this->settings['cvv_required'] == 'yes') {
+                    if (!in_array($response['cvv2_result'], array('M'))) {
+                        $auth = false;
+                        $response['auth_response_descr'] = 'You may not have entered the correct "Card Code" below.
+                                Please check the code on the back of your card and try again.<br>';
+                    }
+                }
 
-                // Mark as on-hold (use if payment delayed)
-                $order->update_status('on-hold', __( 'Awaiting authorization of Credit Card payment. Please call your Credit Card provider.', 'woocommerce' ));
-                return;
+                $response['success'] = $auth;
 
                 break;
 
-            case 'fail':
+            case 'Settle':
+            case 'Sale':
 
-                // Tell the user we had a payment failure
-                wc_add_notice( __("<h4>We're sorry, there was a problem with your payment...</h4><p><b>Reason:</b> ".$errorMsg.'</p><p>Please check your credit card information and try again.', 'woothemes') . $error_message, 'error' );
+                // Ask MES gateway code if the transaction was approved
+                $response['success'] = $trans->isApproved();
 
-                if (GLM_MES_DEBUG && !GLM_MES_DEBUG_VERBOSE) {
-                    wc_add_notice('GLM MeS Gateway: Response Fields<p><pre>'.print_r($trans->ResponseFields,1).'</pre></p>', 'success');
-                }
+                break;
+
+            case 'Refund':
 
-                return;
+                // Look at error_code to see if refund was successful
+                $response['success'] = false;
+                if ($response['error_code'] == '000') {
+                    $response['success'] = true;
+                }
 
                 break;
 
-            default:
+        }
 
-                // Need to figure this out
+        // Check for Gateway Error Codes
+        $lang = 'EN'; // *** TEMPORARY FOR TESTING ***
+        if (isset($this->respDescr[$response['error_code']])) {
+            $response['auth_response_descr'] .= $this->respDescr[$response['error_code']];
+        }
 
-                break;
+        return $response;
+
+    }
+
+    /*
+     * Process order with MES Gateway
+     */
+    public function process_payment ($order_id)
+    {
+
+        // Get a copy of our order
+        global $woocommerce;
+        $this->cust_order = new WC_Order($order_id);
+
+        // Get our invoice number
+        $this->invNumb = str_replace("#", "", $this->cust_order->get_order_number());
+
+        // Clean up the submitted credit card data
+        $this->ccNumb = str_replace(
+                array(
+                        ' ',
+                        '-'
+                ), '', $_POST[GLM_MES_ID . '-card-number']);
+        $this->cc_exp = str_replace(
+                array(
+                        '/',
+                        ' '
+                ), '', $_POST[GLM_MES_ID . '-card-expiry']);
+        $this->cc_cvc = (isset($_POST[GLM_MES_ID . '-card-cvc'])) ? $_POST[GLM_MES_ID .
+                 '-card-cvc'] : '';
+
+        /*
+         * Other data available from WooCommerce
+         *
+         * $this->cust_order->billing_first_name,
+         * $this->cust_order->billing_last_name,
+         * $this->cust_order->billing_address_1,
+         * $this->cust_order->billing_city,
+         * $this->cust_order->billing_state,
+         * $this->cust_order->billing_postcode,
+         * $this->cust_order->billing_country,
+         * $this->cust_order->billing_phone,
+         * $this->cust_order->billing_email,
+         *
+         * $this->cust_order->shipping_first_name,
+         * $this->cust_order->shipping_last_name,
+         * $this->cust_order->shipping_company,
+         * $this->cust_order->shipping_address_1,
+         * $this->cust_order->shipping_city,
+         * $this->cust_order->shipping_country,
+         * $this->cust_order->shipping_state,
+         * $this->cust_order->shipping_postcode,
+         *
+         * $this->cust_order->user_id,
+         *
+         */
+
+        if (GLM_MES_DEBUG_VERBOSE) {
+            wc_add_notice('GLM MeS Gateway: process_payment() called',
+                    'success');
+            wc_add_notice(
+                    'GLM MeS Gateway: Customer Order Data<p><pre>' .
+                             print_r($this->cust_order, 1) . '</pre></p>', 'success');
+        }
+
+        // Check if pre-authorization is required
+        if ($this->settings['address_verification'] == 'yes' ||
+                $this->settings['cvv_required'] == 'yes' ) {
+
+            // Try pre-authorization first
+            $response = $this->run_transaction('PreAuth');
+
+            // If pre-auth was not requested or was successful - run sale
+            if ($response['success']) {
+                $response = $this->run_transaction('Settle', false, $response['transaction_id']);
+            }
+
+        // Ohterwise we're just going to run it as a final sale
+        } else {
+
+            $response = $this->run_transaction('Sale', false, $response['transaction_id']);
+
+        }
+
+
+        // Check result
+        if ($response['success']) {
+
+            // Say the transaction is complete, mark as paid and empty cart
+            $this->cust_order->add_order_note( __( 'Merchant e-Solutions payment completed.', 'glm-merchant_e_solutions' ) );
+            $this->cust_order->payment_complete($response['transaction_id']);
+            $woocommerce->cart->empty_cart();
+
+            // Return thank you page redirect
+            return array(
+                    'result' => 'success',
+                    'redirect' => $this->get_return_url($this->cust_order)
+            );
+
+        } else {
+
+            // Tell the user we had a payment failure
+// THE VARIABLE DATA NEEDS TO BE APPENDED RATHER THAT INCLUDED. woothemes is not our method title
+            wc_add_notice(
+                    __(
+                            "<h4>We're sorry, there was a problem with your payment...</h4><p><b>Reason:</b> " .
+                                     $response['auth_response_text'] .
+                                     '</p><p>'.$response['auth_response_descr'],
+                                    'woothemes'), 'error');
+
+            // Add a note to the customer order for reference
+            $this->cust_order->add_order_note( 'Error: '. $response['auth_response_descr'] );
+
+            if (GLM_MES_DEBUG && ! GLM_MES_DEBUG_VERBOSE) {
+                wc_add_notice(
+                        'GLM MeS Gateway: Response Fields<p><pre>' .
+                                 print_r($trans->ResponseFields, 1) .
+                                 '</pre></p>', 'success');
+            }
 
         }
 
     }
 
+    /*
+     * Process a refund
+     */
+
+    public function process_refund( $order_id, $amount = null, $reason = '' )
+    {
+        // Get the order object
+        $order = wc_get_order( $order_id );
+
+        // Get the MES transaction ID stored with the order
+        $transaction_id = $order->get_transaction_id();
+
+        // Attempt the refund
+        $response = $this->run_transaction('Refund', $amount, $transaction_id);
+
+        // If refund was not successful
+        if (!$response['success']) {
+            $order->add_order_note( 'Refund not approved ('.$response['error_code'].'): '.$response['auth_response_text'].'<br><pre>'.print_r($response,1).'</pre>' );
+        }
+
+        // Return to WooCommerce with refund result status
+        return $response['success'];
+    }
 }
 
 ?>
\ No newline at end of file
diff --git a/classes/index.php b/classes/index.php
new file mode 100644 (file)
index 0000000..7e91415
--- /dev/null
@@ -0,0 +1,2 @@
+<?php
+// Silence is golden.
\ No newline at end of file
index 53400ec..3dff196 100644 (file)
@@ -9,15 +9,19 @@ define('GLM_MES_NAME', 'Gaslight Media WooCommerce Merchant e-Solutions Gateway'
 define('GLM_MES_SHORT_NAME', 'GLM Merchant e-Solutions');
 define('GLM_MES_DESCRIPTION', 'A Merchant e-Solutions payment Gateway plug-in for WooCommerce.');
 define('GLM_MES_ID', 'glm-merchant_e_solutions');
+define('GLM_MES_SLUG', 'glm_woocommerce_merchant_e_solutions_gateway');
 
 // Plugin Versions
 define('GLM_MES_VERSION', 0.1);
+define('GLM_MES_REQUIRED_WOO_VERSION', "2.3");
 
 // Directories
 define('GLM_MES_DIR', 'glm-woocommerce-merchant-e-solutions-gateway');
 define('GLM_MES_PATH', dirname(__FILE__));
 define('GLM_MES_CLASS_PATH', GLM_MES_PATH.'/classes');
 define('GLM_MES_ASSETS_PATH', GLM_MES_PATH.'/assets');
+define('GLM_MES_INCLUDES_PATH', GLM_MES_PATH.'/includes');
+define('GLM_MES_LANGUAGE_PATH', GLM_MES_PATH.'/i18n/languages');
 
 // URLs
 $pUrl = plugins_url( GLM_MES_DIR );
diff --git a/glm-woocommerce-merchant-e-solutions-gateway.php b/glm-woocommerce-merchant-e-solutions-gateway.php
new file mode 100644 (file)
index 0000000..3857768
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Plugin Name: GLM WooCommerce Merchant e-Solutions Gateway
+ * Plugin URI: http://www.gaslightmedia.com/
+ * Description: Gaslight Media Merchant e-Solutions support for WooCommerce. Provides a payment gateway that will process WooCommerce payments and refunds through Merchant e-Solutions. For more information on Merchant e-Solutions see their Website at <a href="https://www.merchante-solutions.com/">https://www.merchante-solutions.com/</a>.
+ * Version: 1.0
+ * Author: Chuck Scott
+ * Author URI: http://www.gaslightmedia.com/
+ * Text Domain: glm-woocommerce-merchant-e-solutions-gateway
+ * Domain Path: languages
+ * License: GPL2
+ */
+
+/**
+ * Gaslight Media Merchant e-Solutions Gateway
+ * Index
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package glmMerchantESolutions
+ * @author Chuck Scott <cscott@gaslightmedia.com>
+ * @license http://www.gaslightmedia.com Gaslightmedia
+ * @version 1.0
+ */
+
+/*
+ * Copyright 2014-2015 Charles Scott (email : cscott@gaslightmedia.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program 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. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+if( !defined( 'ABSPATH' ) ) exit; // Exit if accessed directly.
+require_once('woo-includes/woo-functions.php');
+
+// Get standard defined parameters
+require_once('defines.php');
+
+/**
+ * *******************************************************************************
+ *
+ * *** Directory and File Structure ***
+ *
+ * index.php
+ *
+ * Index file for this plugin. All plugin processing starts here. (See
+ * "Process Flow" below.)
+ *
+ * ********************************************************************************
+ */
+
+/*
+ *
+ * Activate, Deactivate, Uninstall hooks
+ *
+ */
+
+// Activate
+function glmMesPluginActivate ()
+{
+    require_once (GLM_MES_PATH . '/activate.php');
+    new glmMesPluginActivate();
+}
+register_activation_hook(__FILE__, 'glmMesPluginActivate');
+
+// Deactivate
+function glmMesPluginDeactivate ()
+{
+    require_once (GLM_MES_PATH . '/deactivate.php');
+    $x = new glmMesPluginDeactivate();
+    return false;
+}
+register_deactivation_hook(__FILE__, 'glmMesPluginDeactivate');
+
+
+/*
+ *
+ * Load Controller
+ *
+ */
+
+add_action( 'plugins_loaded', 'initMesGateway' );
+
+/**
+ * Initialize MES Gateway
+ *
+ * @return void
+ * @access public
+ */
+function initMesGateway()
+{
+    require_once (GLM_MES_CLASS_PATH . '/glmMesGateway.php');
+    new glmMesGateway();
+}
+
+
+?>
\ No newline at end of file
diff --git a/i18n/languages/default.pot b/i18n/languages/default.pot
new file mode 100644 (file)
index 0000000..3c208af
--- /dev/null
@@ -0,0 +1,366 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-04-22 14:29-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../.././includes/response_descriptions.php:14
+#: ../.././includes/response_descriptions.php:22
+#: ../.././includes/response_descriptions.php:23
+#: ../.././includes/response_descriptions.php:27
+msgid "Please contact your credit card issuer or try another card."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:15
+#: ../.././includes/response_descriptions.php:18
+msgid "Please contact your credit card issuer or try another card"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:16
+msgid ""
+"Your card may not be used at this time. Please contact your credit card "
+"issuer or try another card."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:17
+msgid ""
+"Your purchase using this credit card has been declined. If you have another "
+"credit card, you may try that at this time."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:19
+#: ../.././includes/response_descriptions.php:20
+msgid ""
+"Your credit card number appears to be incorrect. Please check the card "
+"number you entered and try again."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:21
+msgid ""
+"Your card was not successfully processed. Please try again. If you continue "
+"to get this response, please call for assistance."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:24
+msgid ""
+"Your card is not currently able to cover the cost of this purchase. Delete "
+"contents from your cart or try again later."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:25
+msgid ""
+"Your card appears to be expired. Please check your credit card information "
+"below or try another card."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:26
+msgid ""
+"This purchase is not permitted with your credit card. Please contact your "
+"credit card issuer or try another card."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:28
+msgid ""
+"There was a problem processing your credit cart. If you continue to get this "
+"response, please call for assistance."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:29
+msgid ""
+"We do not accept this type of credit card. Please try another card or call "
+"for assistance."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:30
+msgid ""
+"You did not supply all required credit card information. Please check your "
+"credit card payment information below."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:31
+msgid ""
+"The address you entered did not satisfactorlly match the cardholder's "
+"address."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:32
+msgid ""
+"The card security code (3 or 4 digit code, usually on the back of the card) "
+"did not match."
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:37
+msgid "(none)"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:38
+msgid "Card OK"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:39
+msgid "Call"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:40
+msgid "Call - special condition"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:41
+msgid "Hold-call - pick up card (no fraud)"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:42
+msgid "Decline - do not honor"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:43
+msgid "Hold-call - pick up card (fraud)"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:44
+msgid "Card # error"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:45
+msgid "No such issuer"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:46
+msgid "Re-enter transaction"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:47
+msgid "Hold-call - pickup card (fraud: lost card)"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:48
+msgid "Hold-call - pickup card (fraud: stolen card)"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:49
+msgid "Decline - insufficient funds"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:50
+msgid "Expired card"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:51
+msgid "Transaction not permitted to cardholder"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:52
+msgid "Suspected fraud"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:53
+msgid "Invalid Auth"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:54
+msgid "Unable to validate pin (not used in this plugin)"
+msgstr ""
+
+#: ../.././includes/response_descriptions.php:55
+msgid "Card type not accepted by merchant"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:192
+msgid "A Merchant e-Solutions payment Gateway plug-in for WooCommerce."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:351
+#, php-format
+msgid ""
+"\n"
+"                        <strong>%s</strong> is enabled and WooCommerce is "
+"not forcing the\n"
+"                        SSL certificate on your checkout page. <br>Please "
+"ensure that you have\n"
+"                        a valid SSL certificate and that you are <a href=\"%s"
+"\">forcing\n"
+"                        the checkout pages to be secured.</a>"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:377
+#, php-format
+msgid ""
+"%s depends on version %s and up of WooCommerce! Please upgrade before "
+"activating."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:433
+msgid "Enable/Disable"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:435
+msgid "Enable Merchant e-Solutions Gateway"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:442
+msgid "Title"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:445
+msgid "This controls the title which the user sees during checkout."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:447
+msgid "Credit Card Payment"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:453
+msgid "Description"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:459
+msgid "Credit Cards Accepted"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:468
+msgid "Visa"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:477
+msgid "MasterCard"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:486
+msgid "American Express"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:495
+msgid "Discover"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:502
+msgid "Require Address Verification"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:504
+msgid ""
+"Check to require valid address verification before charging credit card."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:510
+msgid "Require CVV/CVC/CID"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:512
+msgid "Check to require a valid credit card CVV/CVC/CID when charging card."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:517
+msgid "Test Mode Credentials"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:524
+msgid "Test Profile ID"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:532
+msgid "Test Profile Key"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:540
+msgid "Test URL"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:548
+msgid "Production Mode Credentials"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:556
+msgid "Production Profile ID"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:564
+msgid "Production Profile Key"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:572
+msgid "Production URL"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:579
+msgid "Mode Selection"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:586
+msgid "Transaction Mode"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:589
+msgid "Must be in \"Production Mode\" for live transactions."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:593
+#, php-format
+msgid ""
+"See %s MeS Payment Certification Form</a> to apply for required ID and Key."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:600
+msgid "Test Mode"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:601
+msgid "Production Mode"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:607
+msgid "Amount Driven Tests"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:609
+msgid ""
+"Selecting an amount driven test will set the payment amount for the "
+"transaction to the specific value\n"
+"                                and will cause the payment gateway to return "
+"the associated respose. This may be used to test all\n"
+"                                possible response types that might be "
+"experienced in production use."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:613
+msgid "Show Additional Test Options"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:621
+msgid "Enable Debug Information"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:623
+msgid "Check to enable debug output on checkout page."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:629
+msgid "Enable Verbose Debug"
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:631
+msgid "Check to enable verbose output on checkout page."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:919
+msgid "Merchant e-Solutions payment completed."
+msgstr ""
+
+#: ../.././classes/glmMesGateway.php:935
+msgid ""
+"<h4>We're sorry, there was a problem with your payment...</h4><p><b>Reason:</"
+"b> "
+msgstr ""
diff --git a/i18n/languages/do_xgettext b/i18n/languages/do_xgettext
new file mode 100755 (executable)
index 0000000..f53bf86
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/bash
+find ../../. -iname "*.php" | xargs xgettext --from-code=UTF-8 -LPHP -k_e -k_x -k__  -o default.pot
diff --git a/i18n/languages/glm-woocommerce-merchant-e-solutions-gateway.pot b/i18n/languages/glm-woocommerce-merchant-e-solutions-gateway.pot
new file mode 100644 (file)
index 0000000..89ae890
--- /dev/null
@@ -0,0 +1,27 @@
+# WordPress Plugin Boilerplate Copyright (c) {2014}
+msgid ""
+msgstr ""
+"Project-Id-Version: WooCommerce Payment Gateway Boilerplate 1.0.0\n"
+"Report-Msgid-Bugs-To: issues\n"
+"POT-Creation-Date: 2014-09-17 21:23+0100\n"
+"PO-Revision-Date: 2014-09-17 21:23+0100\n"
+"Last-Translator: \n"
+"Language-Team: WP-Translations <wpt@wp-translations.org>\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.9\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: _n_noop:1,2;_c;_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
+"X-Textdomain-Support: yes\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: includes/admin/views/admin-options.php:1
+#: includes/class-wc-gateway-payment-gateway-boilerplate.php:29
+#: includes/class-wc-gateway-payment-gateway-boilerplate.php:192
+msgid "Gateway Name"
+msgstr "Gaslight Media WooCommerce Merchant e-Solutions Payment Gateway"
+
diff --git a/i18n/languages/index.php b/i18n/languages/index.php
new file mode 100644 (file)
index 0000000..7e91415
--- /dev/null
@@ -0,0 +1,2 @@
+<?php
+// Silence is golden.
\ No newline at end of file
index c12332b..7e91415 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,103 +1,2 @@
 <?php
-/**
- * Plugin Name: GLM WooCommerce Merchant e-Solutions Gateway
- * Plugin URI: http://www.gaslightmedia.com/
- * Description: Gaslight Media Merchant e-Solutions support for WooCommerce
- * Version: 1.0
- * Author: Chuck Scott
- * Author URI: http://www.gaslightmedia.com/
- * License: GPL2
- */
-
-/**
- * Gaslight Media Merchant e-Solutions Gateway
- * Index
- *
- * PHP version 5.5
- *
- * @category glmWordPressPlugin
- * @package glmMerchantESolutions
- * @author Chuck Scott <cscott@gaslightmedia.com>
- * @license http://www.gaslightmedia.com Gaslightmedia
- * @version 1.0
- */
-
-/*
- * Copyright 2014-2015 Charles Scott (email : cscott@gaslightmedia.com)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2, as
- * published by the Free Software Foundation.
- *
- * This program 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. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-// Get standard defined parameters
-require_once('defines.php');
-
-/**
- * *******************************************************************************
- *
- * *** Directory and File Structure ***
- *
- * index.php
- *
- * Index file for this plugin. All plugin processing starts here. (See
- * "Process Flow" below.)
- *
- * ********************************************************************************
- */
-
-/*
- *
- * Activate, Deactivate, Uninstall hooks
- *
- */
-
-// Activate
-function glmMesPluginActivate ()
-{
-    require_once (GLM_MES_PATH . '/activate.php');
-    new glmMesPluginActivate();
-}
-register_activation_hook(__FILE__, 'glmMesPluginActivate');
-
-// Deactivate
-function glmMesPluginDeactivate ()
-{
-    require_once (GLM_MES_PATH . '/deactivate.php');
-    $x = new glmMesPluginDeactivate();
-    return false;
-}
-register_deactivation_hook(__FILE__, 'glmMesPluginDeactivate');
-
-
-/*
- *
- * Load Controller
- *
- */
-
-add_action( 'plugins_loaded', 'initMesGateway' );
-
-/**
- * Initialize MES Gateway
- *
- * @return void
- * @access public
- */
-function initMesGateway()
-{
-    require_once (GLM_MES_CLASS_PATH . '/glmMesGateway.php');
-    new glmMesGateway();
-}
-
-
-?>
\ No newline at end of file
+// Silence is golden.
\ No newline at end of file
index d7cf95e..dea9547 100644 (file)
@@ -13,10 +13,27 @@ Merchant e-Solutions credit card payment gateway.
 
 == Description ==
 
-More description goes here.
+This is a plug-in for WordPress/WooCommerce to process credit cards via the 
+"Merchant e-Solutions" payment gateway. 
+
+Features of this plugin are...
+
+* Only WooCommerce plug-in certified by Merchant e-Solutions
+* Highly integrated with WooCommerce
+* Processes payments direct throught Merchant e-Solutions - No additional service required
+* Admin options to require address and/or card code validation (checks these first with a pre-authorization check)
+* Selectable credit card icons for checkout payment form
+* Provides for input of both Test mode and Production mode cridentials
+* May be easily switched between test and production mode
+* Simple or verbose debug information for testing
+* Selectable "Ammount Driven Tests" for a variety of return codes
+* Accessible reference information for a variety of other tests for address and card code verification
+* Subscription includes perpetual use for the designated number of production sites and E-Mail support and updates for one year 
 
 == Installation ==
 
+When requesting production credentials with Merchant e-Solutions, specifiy that the Certified Product Name is "Gaslight Media".
+
 This section describes how to install the plugin and get it working.
 
 e.g.
@@ -27,6 +44,54 @@ e.g.
 
 == Frequently Asked Questions ==
 
+= What card numbers can I use for testing =
+
+Any valid credit card number may be used when the "Transaction Mode" is set to "Test Mode". 
+In test mode, all transactions are simulated and will not impact the cardholder's account. 
+
+The following card numbers may also be used for testing.
+Cart Type         Card Number
+----------------- -----------------
+Visa 16 digit     4012301230123010 
+Visa 13 digit     4012301230158
+MasterCard        5123012301230120 
+American Express  349999999999991 
+Discover          6011011231231235 
+JCB               3528288605211810  
+
+= What other testing data would be helpful =
+
+The following test data and responses may be helpful for testing this payment gateway 
+and validating that a particular implementation is functioning properly.
+
+Address Verification Tests
+Street #     ZIP/postal code   Result 
+------------ ---------------- --------------------------------------------------------
+123          55555            Y – street and postal code match
+123          999991111        Y – street and postal code match (Visa) 
+                              X – street and postal code match (MasterCard)
+123          EH8 9ST          D - exact match, international 
+123          Other Zip        A - address match, zip mismatch 
+234          Any Zip          U - address unavailable   
+345          Any Zip          G - verification unavailable due to international 
+                                  issuer non-participation (Visa and MasterCard only)
+456          Any Zip          R - issuer system unavailable, retry 
+235          Any Zip          S – AVS not supported 
+(other)      55555            Z - address mismatch, 5-digit zip match 
+(other)      EH8 9ST          Z - address mismatch, international zip match  
+
+CCV, CVC, CID Code Tests
+Code             Result
+---------------- ------------------------------
+123              M - Match
+234              P - Not Processed
+345              U - Issuer is not certified
+(other 3 digit)  N - No Match
+1234 (AMEX)      M - Match
+2345 (AMEX)      P - Not Processed
+(other 4 digit)  N - No Match      
+
+
 
 == Screenshots ==
 
diff --git a/views/paymentForm.php b/views/paymentForm.php
deleted file mode 100644 (file)
index cd42544..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-    <style type="text/css">
-        .form-row {
-            margin-bottom: 1em !important;
-        }
-        .glm-mes-field {
-            clear: both;
-        }
-        .glm-test-mode {
-            border: 1px solid black;
-            width: 95%;
-            text-align: center;
-            padding: 5px;
-            margin-bottom: 10px;
-            background-color: lightblue;
-        }
-        #glm-mes-section {
-            clear: both;
-        }
-        .glm-mes-card-types {
-            margin: 0px !important;
-        }
-        .glm-mes-card-img {
-            padding-right: .5em !important;
-        }
-        .glm-form-input-text {
-            background: #fff !important;
-        }
-    </style>
-
-<?php
-    if ($this->transaction_mode == 'test') {
-        echo '<div class="glm-test-mode">Operating in Test Mode</div>';
-    }
-?>
-   
-    <div id="glm-mes-section">
-        <p><?php echo $this->customer_message; ?></p>
-        <div class="glm-mes-cc-form" >
-            <p class="form-row">
-                <label>Cards Accepted</label>
-                <div class="glm-mes-card-types">
-                    <?php
-                        if ($this->visa == 'yes')           { echo '<img class="glm-mes-card-img" src="'.GLM_MES_ASSETS_URL.'/visa.png">'; }
-                        if ($this->mastercard == 'yes')     { echo '<img class="glm-mes-card-img" src="'.GLM_MES_ASSETS_URL.'/mastercard.png">'; }
-                        if ($this->amex == 'yes')           { echo '<img class="glm-mes-card-img" src="'.GLM_MES_ASSETS_URL.'/amex.png">'; }        
-                    ?>
-                </div>
-            </p>
-            <p>&nbsp;</p>
-            <p class="form-row">
-                <label for="glm_mes_account-number">Credit Card Number <span class="required">*</span></label>
-                <input type="text" class="input-text glm-form-input-text" id="glm-mes-account-number" name="glm_mes_account_number" maxlength="19" autocomplete="off" value="" />
-            </p>
-            <p class="form-row">
-                <label for="glm-mes-name-on-card">Name on Card <span class="required">*</span></label>
-                <input type="text" class="input-text glm-form-input-text" id="glm-mes-name-on-card" name="glm_mes_name_on_card" maxlength="60" autocomplete="off" value="" />
-            </p>
-            <p class="form-row">
-                <label for="glm-mes-exp-month">Expiration Date <span class="required">*</span></label>
-                <select name="glm_mes_exp_month" id="glm-mes-exp-month" class="" style="width:auto;">
-                    <option value="">Month</option>
-<?php
-    foreach ($this->cc_months as $k=>$v) {
-        echo '<option value="'.$k.'"'.($this->cc_month_month==$k?' selected="selected"':'').'>'.$k.' - '.$v.'</option>';
-    }
-?>                    
-                </select>
-                <select name="glm_mes_exp_year" id="glm-mes-exp-year" class="" style="width:auto;">
-                    <option value="">Year</option>
-<?php
-    for ($y=$this->cc_start_year ; $y<=$this->cc_end_year ; $y++) {
-        echo '<option value="'.$y.'"'.($this->glm_mes_exp_year==$y?' selected="selected"':'').'>'.$y.'</option>';
-    }
-?>                    
-                </select>
-            </p>
-            <p class="form-row">
-                <label for="glm-mes-security-code">Card Security Code <span class="required">*</span></label>
-                <input type="text" class="input-text glm-form-input-text" id="glm-mes-security-code" name="glm-mes-security-code" maxlength="4" style="width:60px" autocomplete="off" value="" />
-            </p>
-        </div>
-    </div>
-        
\ No newline at end of file
diff --git a/woo-includes/class-wc-dependencies.php b/woo-includes/class-wc-dependencies.php
new file mode 100644 (file)
index 0000000..e19fdae
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * WC Dependency Checker
+ *
+ * Checks if WooCommerce is enabled
+ */
+class WC_Dependencies
+{
+
+    private static $active_plugins;
+
+    public static function init ()
+    {
+        self::$active_plugins = (array) get_option('active_plugins', array());
+        if (is_multisite())
+            self::$active_plugins = array_merge(self::$active_plugins,
+                    get_site_option('active_sitewide_plugins', array()));
+    }
+
+    public static function woocommerce_active_check ()
+    {
+        if (! self::$active_plugins)
+            self::init();
+        return in_array('woocommerce/woocommerce.php', self::$active_plugins) ||
+                 array_key_exists('woocommerce/woocommerce.php',
+                        self::$active_plugins);
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/woo-includes/index.php b/woo-includes/index.php
new file mode 100644 (file)
index 0000000..7e91415
--- /dev/null
@@ -0,0 +1,2 @@
+<?php
+// Silence is golden.
\ No newline at end of file
diff --git a/woo-includes/woo-functions.php b/woo-includes/woo-functions.php
new file mode 100644 (file)
index 0000000..9a7b65d
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Functions used by plugins
+ */
+
+if (! class_exists('WC_Dependencies')) {
+    require_once ('class-wc-dependencies.php');
+}
+
+/**
+ * WC Detection
+ */
+if (! function_exists('is_woocommerce_active')) {
+
+    function is_woocommerce_active ()
+    {
+        return WC_Dependencies::woocommerce_active_check();
+    }
+}
+?>
\ No newline at end of file