/**
  * add_update_card function.
  *
  * @return void
  */
 public function add_update_card()
 {
     $permission = wp_verify_nonce($_POST['_wpnonce'], 'add_card_nonce');
     if (false == $permission) {
         echo 'error';
     } else {
         $gateway = new WC_Payeezy_Gateway();
         $payeezy = new WC_Payeezy_API();
         $response = $payeezy->verify($gateway);
         if (isset($response->transaction_status) && 'approved' == $response->transaction_status) {
             $current_cards = count($this->get_saved_cards());
             $make_default = isset($_POST['payeezy-make-default']) || !$current_cards;
             if ($make_default) {
                 $this->clear_default();
             }
             $new_card = empty($_POST['payeezy-card-id']);
             if ($new_card) {
                 $card = array('post_type' => 'payeezy_credit_card', 'post_title' => sprintf(__('Token %s – %s', 'woocommerce-payeezy'), $response->token->token_data->value, strftime(_x('%b %d, %Y @ %I:%M %p', 'Token date parsed by strftime', 'woocommerce-payeezy'))), 'post_content' => '', 'post_status' => 'publish', 'ping_status' => 'closed', 'post_author' => get_current_user_id(), 'post_password' => uniqid('card_'), 'post_category' => '');
                 $post_id = wp_insert_post($card);
                 $card_meta = array('token' => $response->token->token_data->value, 'expiry' => $response->card->exp_date, 'cardtype' => $response->card->type, 'is_default' => $make_default ? 'yes' : 'no');
                 add_post_meta($post_id, '_payeezy_card', $card_meta);
             } else {
                 $card_id = wc_clean($_POST['payeezy-card-id']);
                 $card = get_post($card_id);
                 $card_meta = get_post_meta($card->ID, '_payeezy_card', true);
                 if ('yes' == $card_meta['is_default']) {
                     $current_default = true;
                 } else {
                     $current_default = false;
                 }
                 $card->post_title = sprintf(__('Token %s – %s', 'woocommerce-payeezy'), $response->token->token_data->value, strftime(_x('%b %d, %Y @ %I:%M %p', 'Token date parsed by strftime', 'woocommerce-payeezy')));
                 wp_update_post($card);
                 $new_card_meta = array('token' => $response->token->token_data->value, 'expiry' => $response->card->exp_date, 'cardtype' => $response->card->type, 'is_default' => $current_default || $make_default ? 'yes' : 'no');
                 update_post_meta($card_id, '_payeezy_card', $new_card_meta);
             }
             $cards = $this->get_saved_cards();
             echo wc_get_template('credit-cards-table.php', array('cards' => $cards), 'woocommerce-payeezy/', WC_PAYEEZY_TEMPLATE_PATH);
         } else {
             echo 'error';
         }
     }
     die;
 }
 /**
  * Process a pre-order payment when the pre-order is released
  *
  * @param WC_Order $order
  * @return wp_error|void
  */
 public function process_pre_order_release_payment($order)
 {
     $amount = $order->get_total();
     $card = array('token' => get_post_meta($order->id, '_payeezy_token', true), 'expiry' => get_post_meta($order->id, '_payeezy_expiry', true), 'cardtype' => get_post_meta($order->id, '_payeezy_cardtype', true));
     if (!$card) {
         return new WP_Error('payeezy_error', __('Customer not found', 'woocommerce-payeezy'));
     }
     $payeezy = new WC_Payeezy_API();
     if ('authorize' == $this->transaction_type) {
         $response = $payeezy->authorize($this, $order, $amount, $card);
     } else {
         $response = $payeezy->purchase($this, $order, $amount, $card);
     }
     if (isset($response->transaction_status) && 'approved' == $response->transaction_status) {
         $order->payment_complete();
         $amount_approved = number_format($response->amount / 100, '2', '.', '');
         $message = 'authorize' == $this->transaction_type ? 'authorized' : 'completed';
         $order->add_order_note(sprintf(__("Payeezy payment %s for %s. Transaction ID: %s.\n\n <strong>AVS Response:</strong> %s.\n\n <strong>CVV2 Response:</strong> %s.", 'woocommerce-payeezy'), $message, $amount_approved, $response->transaction_id, $this->get_avs_message($response->avs), $this->get_cvv_message($response->cvv2)));
         $tran_meta = array('transaction_id' => $response->transaction_id, 'transaction_tag' => $response->transaction_tag, 'transaction_type' => $this->transaction_type);
         add_post_meta($order_id, '_payeezy_transaction', $tran_meta);
     } else {
         $order->add_order_note(__('Payeezy payment declined', 'woocommerce-payeezy'));
         return new WP_Error('payeezy_payment_declined', __('Payment was declined - please try another card.', 'woocommerce-payeezy'));
     }
 }
 /**
  * process_capture function.
  *
  * @access public
  * @param int $order_id
  * @return bool
  */
 public function process_capture($order_id)
 {
     $order = wc_get_order($order_id);
     $tran_meta = get_post_meta($order_id, '_payeezy_transaction', true);
     $orig_tran_type = $tran_meta['transaction_type'];
     $amount = $order->get_total();
     if ('authorize' == $orig_tran_type && 'yes' == $this->auto_capture) {
         $payeezy = new WC_Payeezy_API();
         $response = $payeezy->capture($this, $order, $amount);
         if (isset($response->transaction_status) && 'approved' == $response->transaction_status) {
             $captured_amount = number_format($response->amount / 100, '2', '.', '');
             $order->add_order_note(sprintf(__('Payeezy auto capture completed for %s. Capture ID: %s', 'woocommerce-payeezy'), $captured_amount, $response->transaction_id));
             $tran_meta = array('transaction_id' => $response->transaction_id, 'transaction_tag' => $response->transaction_tag, 'transaction_type' => 'capture');
             update_post_meta($order_id, '_payeezy_transaction', $tran_meta);
             return true;
         } else {
             $order->add_order_note(__('Payeezy auto capture failed. Log into your gateway to manually process the capture.', 'woocommerce-payeezy'));
             return true;
         }
     }
 }