/**
  * Post the request to the Soap Client in the Profile Model
  *
  * @param Mage_Payment_Model_Info $payment
  * @return Gorilla_ChasePaymentech_Model_Gateway_Result
  */
 public function _postRequest($payment)
 {
     $payment->setAmount($this->_formatAmount($payment->getAmount()));
     /** @var $model Gorilla_ChasePaymentech_Model_Profile */
     $model = Mage::getModel('chasepaymentech/profile');
     switch ($payment->getChasePaymentechTransType()) {
         case Gorilla_ChasePaymentech_Model_Profile::TRANS_TYPE_AUTH_ONLY:
         case Gorilla_ChasePaymentech_Model_Profile::TRANS_TYPE_AUTH_CAPTURE:
             $response = $model->createOrderTransaction($payment, $this->isSavingCc());
             break;
         case Gorilla_ChasePaymentech_Model_Profile::TRANS_TYPE_REFUND:
             $response = $model->createOrderTransaction($payment);
             // should be merged with other requests since all are same.
             break;
         case Gorilla_ChasePaymentech_Model_Profile::TRANS_TYPE_VOID:
             $response = $model->createReversalTransaction($payment);
             break;
         case Gorilla_ChasePaymentech_Model_Profile::TRANS_TYPE_CAPTURE:
             $response = $model->createMarkForCaptureTransaction($payment);
             break;
         default:
             $response = false;
             break;
     }
     /** @var $result Gorilla_ChasePaymentech_Model_Gateway_Result */
     $result = Mage::getModel('chasepaymentech/gateway_result');
     // Parse the direct response
     if ($response) {
         $r = (array) $response;
     } else {
         $r = false;
     }
     if ($r) {
         $result->setResponseCode((int) str_replace('"', '', isset($r['respCode']) ? $r['respCode'] : null))->setProcStatusCode((int) str_replace('"', '', $r['procStatus']))->setResponseReasonCode((int) str_replace('"', '', $r['procStatus']))->setResponseReasonText($r['procStatusMessage'])->setApprovalCode($r['approvalStatus'])->setAvsResultCode(isset($r['avsRespCode']) ? $r['avsRespCode'] : null)->setTransactionId($r['txRefNum'])->setTransactionRefIdx(isset($r['txRefIdx']) ? $r['txRefIdx'] : null)->setSplitTransactionId(isset($r['splitTxRefIdx']) ? $r['splitTxRefIdx'] : null)->setInvoiceNumber($r['orderID'])->setAmount($payment->getAmount())->setTransactionType(isset($r['transType']) ? $r['transType'] : null)->setCardCodeResponseCode($r['respCode'])->setCAVVResponseCode(isset($r['cvvRespCode']) ? $r['cvvRespCode'] : null)->setCardType(isset($r['cardBrand']) ? $r['cardBrand'] : null)->setRequestedAmount($payment->getAmount())->setAuthorizationCode(isset($r['authorizationCode']) ? $r['authorizationCode'] : null)->setCcLast4(substr($payment->getCcNumber(), -4))->setCustomerId($this->getCustomer()->getId())->setCustomerRefNum(isset($r['customerRefNum']) ? $r['customerRefNum'] : null);
         // if we used a stored credit card we need to set the customer ref number and the last 4 of the cc
         if ($payment->getChasePaymentechCustomerRefNum()) {
             $cardObj = $model->getCustomerPaymentProfile($payment->getChasePaymentechCustomerRefNum());
             $result->setCustomerRefNum($cardObj->customerRefNum)->setCcLast4(substr($cardObj->ccAccountNum, -4));
         }
     } else {
         if ($model->getErrorMessages()) {
             //Mage::log($model->getErrorMessages());
             Mage::throwException(Mage::helper('paygate')->convertMessagesToMessage($model->getErrorMessages()));
         } else {
             Mage::throwException($this->_getHelper()->__('Error in payment gateway.'));
         }
     }
     return $result;
 }
 /**
  * Perform transaction for void/Reversal
  *
  * @param Mage_Payment_Model_Info $payment
  * @return string $directResponse|bool
  */
 public function createReversalTransaction($payment)
 {
     /**
      * Set the order in its own object
      */
     $order = $payment->getOrder();
     $amount = $payment->getAmount() * 100;
     // Must set 100.00 to 10000 per api
     /**
      * Create the transaction
      */
     $data = array('txRefNum' => $payment->getTransId(), 'txRefIdx' => null, 'orderID' => $this->_getUniqueOrderId($payment, $order), 'adjustedAmount' => $amount > 0 ? $amount : null, 'reversalRetryNumber' => null, 'onlineReversalInd' => "N");
     $soap_env = array(self::TRANS_REFUND_TRANS_REQUEST => array_merge($this->_getAuthentication(), $data));
     if (!($response = $this->doCall(self::TRANS_REFUND, $soap_env))) {
         return false;
     }
     $response = $response->return;
     //Mage::log("full response");
     //Mage::log($response);
     /*
     if ($response->error != null) {
         foreach ($response->error as $error) {
             if (strpos($error, self::SOAPFAULT_LOCKED_DOWN)) {
                 $this->debugData($error);
                 $this->c($paymentInfo, $amount);
             } else {
                 //$this->addError($this->_response->procStatusMessage);
                 $this->addError($error);
             }
         }
     }
     */
     $hasErrors = $this->_checkErrors();
     if ($response) {
         if (!$hasErrors) {
             $response->return->respCode = '0';
             // set for successful request (this is not set on a reversal...)
             return $response;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }