/** * Void the payment transaction * * @param Mage_Sale_Model_Order_Payment $payment * @return Mage_Cybersource_Model_Soap */ public function void(Varien_Object $payment) { $error = false; if ($payment->getVoidTransactionId() && $payment->getVoidCybersourceToken()) { $soapClient = $this->getSoapApi(); $this->iniRequest(); $voidService = new stdClass(); $voidService->run = "true"; $voidService->voidRequestToken = $payment->getVoidCybersourceToken(); $voidService->voidRequestID = $payment->getVoidTransactionId(); $this->_request->voidService = $voidService; try { $result = $soapClient->runTransaction($this->_request); if ($result->reasonCode == self::RESPONSE_CODE_SUCCESS) { $payment->setLastTransId($result->requestID)->setCcTransId($result->requestID)->setCybersourceToken($result->requestToken); } else { $error = Mage::helper('cybersource')->__('There is an error in processing payment. Please try again or contact us.'); } } catch (Exception $e) { Mage::throwException(Mage::helper('cybersource')->__('Gateway request error: %s', $e->getMessage())); } } else { $error = Mage::helper('cybersource')->__('Invalid transaction id or token'); } if ($error !== false) { Mage::throwException($error); } return $this; }