/** * Void the card transaction through gateway * * @param Mage_Payment_Model_Info $payment * @param Varien_Object $card * @return bool|Mage_Sales_Model_Order_Payment_Transaction */ protected function _voidCardTransaction($payment, $card) { $authTransactionId = $card->getLastTransId(); $authTransaction = $payment->getTransaction($authTransactionId); //$captureTransactionId = $card->getLastCaptureTransId(); $balance = $card->getProcessedAmount() - $card->getCapturedAmount(); $realAuthTransactionId = $authTransaction->getAdditionalInformation($this->_realTransactionIdKey); $payment->setChasePaymentechTransType(Gorilla_ChasePaymentech_Model_Profile::TRANS_TYPE_VOID); $payment->setTransId($realAuthTransactionId); $payment->setAmount($this->_formatAmount($balance)); //$payment->setTransId($captureTransactionId); //$payment->setTransRefIdx($card->getTransRefIdx()); $result = $this->_postRequest($payment); switch ($result->getResponseCode()) { case self::RESPONSE_CODE_NEW_ORDER_SUCCESS: if ($result->getApprovalCode() == self::RESPONSE_APPROVAL_STATUS) { $voidTransactionId = $result->getTransactionId() . '-void'; $card->setLastTransId($voidTransactionId); return $this->_addTransaction($payment, $voidTransactionId, Mage_Sales_Model_Order_Payment_Transaction::TYPE_VOID, array('is_transaction_closed' => 1, 'should_close_parent_transaction' => 1, 'parent_transaction_id' => $authTransactionId), array($this->_realTransactionIdKey => $result->getTransactionId()), Mage::helper('paygate')->getTransactionMessage($payment, Mage_Paygate_Model_Authorizenet::REQUEST_TYPE_VOID, $result->getTransactionId(), $card)); } $exceptionMessage = $this->_wrapGatewayError($result->getResponseReasonText()); break; default: $exceptionMessage = $this->_getHelper()->__('Payment voiding error.'); //Mage::log($result->getResponseReasonText()); if ($result->getResponseReasonText()) { $exceptionMessage = $this->_wrapGatewayError($result->getResponseReasonText()); } //Mage::log($exceptionMessage); break; } $exceptionMessage = Mage::helper('paygate')->getTransactionMessage($payment, Mage_Paygate_Model_Authorizenet::REQUEST_TYPE_VOID, $realAuthTransactionId, $card, false, $exceptionMessage); Mage::throwException($exceptionMessage); return false; }