/** * Refund the payment transaction * * @param Mage_Sale_Model_Order_Payment $payment * @param flaot $amount * @return Mage_Cybersource_Model_Soap */ public function refund(Varien_Object $payment, $amount) { $error = false; if ($payment->getRefundTransactionId() && $payment->getRefundCybersourceToken() && $amount > 0) { $soapClient = $this->getSoapApi(); $this->iniRequest(); $ccCreditService = new stdClass(); $ccCreditService->run = "true"; $ccCreditService->captureRequestToken = $payment->getCybersourceToken(); $ccCreditService->captureRequestID = $payment->getCcTransId(); $this->_request->ccCreditService = $ccCreditService; $purchaseTotals = new stdClass(); $purchaseTotals->grandTotalAmount = $amount; $this->_request->purchaseTotals = $purchaseTotals; try { $result = $soapClient->runTransaction($this->_request); if ($result->reasonCode == self::RESPONSE_CODE_SUCCESS) { $payment->setLastTransId($result->requestID)->setLastCybersourceToken($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')->__('Error in refunding the payment'); } if ($error !== false) { Mage::throwException($error); } return $this; }