Example #1
0
 /**
  * Request an online refund
  * 
  * @param Varien_Object $payment
  * @param string $amount
  * 
  * @since 1.0.2
  * @return \Icepay_IceAdvanced_Model_Checkout_Standard
  */
 public function refund(Varien_Object $payment, $amount)
 {
     // Get Magento Order
     $order = $payment->getOrder();
     // Get StoreId
     $storeId = $order->getStoreId();
     // Check if Auto Refund is enabled
     if (!Mage::getStoreConfig(Icepay_IceCore_Model_Config::AUTOREFUND, $storeId)) {
         return $this;
     }
     // Fetch ICEPAY merchant settings
     $merchantID = Mage::getStoreConfig(Icepay_IceCore_Model_Config::MERCHANTID, $storeId);
     $secretCode = Mage::getStoreConfig(Icepay_IceCore_Model_Config::SECRETCODE, $storeId);
     // Get CurrencyCode
     $currency = $order->getOrderCurrencyCode();
     // Amount must be in cents
     $amount = (int) (string) ($amount * 100);
     // Fetch ICEPAY Payment ID
     $paymentID = $payment->getLastTransId();
     // Setup webservice
     $webservice = Mage::getModel('Icepay_IceAdvanced_Model_Webservice_Refund');
     $webservice->init($merchantID, $secretCode);
     // Request refund
     try {
         $webservice->requestRefund($paymentID, $amount, $currency);
     } catch (Exception $e) {
         Mage::getSingleton('adminhtml/session')->addError("ICEPAY: Refund Failed! {$e->getMessage()}");
         Mage::helper('icecore')->log("ICEPAY: Refund Failed! {$e->getMessage()}");
     }
     return $this;
 }
 public function wasLastTxnLessThan24HrsAgo(Varien_Object $payment)
 {
     $lastTxnId = $payment->getLastTransId();
     $lastTxn = $payment->getTransaction($lastTxnId);
     $timeOfLastTxn = $lastTxn->getData('created_at');
     //check if last txn was less than 24 hrs ago (86400 seconds == 24 hrs)
     return time() - strtotime($timeOfLastTxn) < 86400;
 }
Example #3
0
    /**
     * Send request to datatrans
     *
     * @param Varien_Object $payment
     * @param float $amount
     * @param string $reqType
     * @return SimpleXMLElement
     */
    protected function _request(Varien_Object $payment, $amount, $reqType = 'COA', $transType = '05')
    {
        $amount = intval($this->_getHelper()->round($amount, 2) * 100);
        $requestBody = <<<XML
<?xml version="1.0" encoding="UTF-8" ?>
 <paymentService version="1">
   <body merchantId="{$this->getConfig()->getMerchantId()}">
     <transaction refno="{$payment->getOrder()->getIncrementId()}">
       <request>
         <amount>{$amount}</amount>
         <currency>{$payment->getOrder()->getOrderCurrencyCode()}</currency>
         <uppTransactionId>{$payment->getLastTransId()}</uppTransactionId>
         <reqtype>{$reqType}</reqtype>
         <transtype>{$transType}</transtype>
       </request>
     </transaction>
   </body>
 </paymentService>
XML;
        $this->debugData($this->_getHelper()->__('Datatrans %s request. Data:%s', $reqType, $requestBody));
        $config = array('adapter' => 'Zend_Http_Client_Adapter_Socket', 'ssltransport' => 'tls');
        $client = new Zend_Http_Client($this->getConfig()->getPaycompleteBaseURL(), $config);
        $client->setRawData($requestBody);
        $response = $client->request();
        $this->debugData($this->_getHelper()->__('Datatrans %s request. Data:%s', $reqType, $response->getBody()));
        $responseXml = new SimpleXMLElement($response->getBody());
        $status = (string) current($responseXml->xpath('/paymentService/body/transaction/@status'));
        if ($status == 'error' || $responseXml->xpath('//error')) {
            $errorCode = (string) current($responseXml->xpath('//error/errorCode'));
            $errorMessage = (string) current($responseXml->xpath('//error/errorMessage'));
            $errorDetail = (string) current($responseXml->xpath('//error/errorDetail'));
            $message = array($this->_getHelper()->__('Datatrans %s error.', $reqType), $this->_getHelper()->__('Error Code: %s', $errorCode), $this->_getHelper()->__('Error Message: %s', $errorMessage), $this->_getHelper()->__('Error Detail: %s', $errorDetail));
            $message = implode('<br />', $message);
            $payment->setStatus(self::STATUS_ERROR);
            $this->getOrder()->addStatusHistoryComment($message)->save();
            $this->_throwException($message);
        }
        return $responseXml;
    }
 /**
  * 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;
 }
Example #5
0
 /**
  * rewrited for Mage_Payment_Model_Method_Abstract
  */
 public function cancel(Varien_Object $payment)
 {
     if (!is_null($payment->getCcTransId()) && is_null($payment->getLastTransId())) {
         $transactionId = $payment->getCcTransId();
         $response = $this->getApi()->setStoreId($payment->getOrder()->getStoreId())->cancel($transactionId);
         if ($response->getStatus() == Mage_AmazonPayments_Model_Api_Asp_Fps_Response_Abstract::STATUS_ERROR) {
             Mage::throwException(Mage::helper('amazonpayments')->__('Order was not cancelled. Amazon Simple Pay service error: [%s] %s', $response->getCode(), $response->getMessage()));
         }
         if ($response->getStatus() == Mage_AmazonPayments_Model_Api_Asp_Fps_Response_Abstract::STATUS_CANCELLED) {
             $payment->getOrder()->setState(Mage_Sales_Model_Order::STATE_CANCELED, true, Mage::helper('amazonpayments')->__('Payment authorization cancelled with Amazon Simple Pay service.'), $notified = false);
         }
     }
     return $this;
 }
Example #6
0
 /**
  * Capture preatutharized amount
  * @param Varien_Object $payment
  * @param <type> $amount
  */
 public function capture(Varien_Object $payment, $amount)
 {
     if (!$this->canCapture()) {
         return $this;
     }
     if (Mage::app()->getRequest()->getParam('transId')) {
         // Capture is called from response action
         $payment->setStatus(self::STATUS_APPROVED);
         return $this;
     }
     $transactionId = $payment->getLastTransId();
     $params = $this->_prepareAdminRequestParams();
     $params['transId'] = $transactionId;
     $params['authMode'] = '0';
     $params['op'] = 'postAuth-full';
 }
Example #7
0
 public function Refund(Varien_Object $payment, $amount)
 {
     try {
         $oPayment = new AllInOne();
         $oPayment->ServiceURL = $this->_getConfigData('test_mode') ? 'http://payment-stage.allpay.com.tw/CreditDetail/DoAction' : 'https://payment.allpay.com.tw/CreditDetail/DoAction';
         $oPayment->HashKey = $this->_getConfigData('hash_key');
         $oPayment->HashIV = $this->_getConfigData('hash_iv');
         $oPayment->MerchantID = $this->_getConfigData('merchant_id');
         $oPayment->Action['MerchantTradeNo'] = ($this->_getConfigData('test_mode') ? $this->_getConfigData('test_order_prefix') : '') . $this->_getOrder()->getRealOrderId();
         $oPayment->Action['TradeNo'] = $payment->getLastTransId();
         $oPayment->Action['Action'] = ActionType::R;
         $oPayment->Action['TotalAmount'] = (int) $amount;
         $arFeedback = $oPayment->DoAction();
     } catch (Exception $e) {
         Mage::throwException($e->getMessage());
     }
     return $this;
 }
Example #8
0
 public function refund(Varien_Object $payment, $amount)
 {
     if ($payment->getRefundTransactionId() && $amount > 0) {
         $transId = $payment->getCcTransId();
         //if transaction type was purchase (authorize & capture)
         if (is_null($transId)) {
             $transId = $payment->getLastTransId();
         }
         $txnDetails = array('txn_type' => self::TRANSACTION_TYPE_REFUND, 'refund_transaction_id' => $transId, 'paynz_account_id' => $payment->getFlo2cashAccountId(), 'amount' => sprintf('%.2f', $amount));
     } else {
         AO::throwException(AO::helper('flo2cash')->__('Error in refunding the payment.'));
     }
     $response = $this->_sendRequest($txnDetails);
     if ($response['txn_status'] == self::TRANSACTION_STATUS_DECLINED) {
         AO::throwException(AO::helper('flo2cash')->__('Payment transaction has been declined.'));
     }
     $payment->setLastTransId($response['transaction_id']);
     return $this;
 }
Example #9
0
 /**
  * Cancel payment
  * @param   Varien_Object $payment
  * @return  $this
  */
 public function cancel(Varien_Object $payment)
 {
     Mage::helper('payex/tools')->addToDebug('Action: Cancel');
     if (!$payment->getLastTransId()) {
         Mage::throwException(Mage::helper('paygate')->__('Invalid transaction ID.'));
     }
     // Load transaction Data
     $transactionId = $payment->getLastTransId();
     $transaction = $payment->getTransaction($transactionId);
     if (!$transaction) {
         Mage::throwException(Mage::helper('payex')->__('Can\'t load last transaction.'));
     }
     // Get Transaction Details
     $details = $this->fetchTransactionInfo($payment, $transactionId);
     // Not to execute for Sale transactions
     if ((int) $details['transactionStatus'] !== 3) {
         Mage::throwException(Mage::helper('payex')->__('Unable to execute cancel.'));
     }
     $transactionNumber = $details['transactionNumber'];
     $order_id = $details['orderId'];
     if (!$order_id) {
         $order_id = $payment->getOrder()->getId();
     }
     // Call PXOrder.Cancel2
     $params = array('accountNumber' => '', 'transactionNumber' => $transactionNumber);
     $result = Mage::helper('payex/api')->getPx()->Cancel2($params);
     Mage::helper('payex/tools')->addToDebug('PxOrder.Cancel2:' . $result['description'], $order_id);
     // Check Results
     if ($result['code'] === 'OK' && $result['errorCode'] === 'OK' && $result['description'] === 'OK') {
         // Add Cancel Transaction
         $payment->setStatus(self::STATUS_DECLINED)->setTransactionId($result['transactionNumber'])->setIsTransactionClosed(1);
         // Closed
         // Add Transaction fields
         $payment->setAdditionalInformation(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, $result);
         return $this;
     }
     // Show Error
     Mage::helper('payex/tools')->throwPayExException($result, 'PxOrder.Cancel2');
     return $this;
 }
Example #10
0
 /**
  * Parent transaction id getter
  *
  * @param Varien_Object $payment
  * @return string
  */
 protected function _getParentTransactionId(Varien_Object $payment)
 {
     return $payment->getParentTransactionId() ? $payment->getParentTransactionId() : $payment->getLastTransId();
 }
 /**
  * Capture payment abstract method
  *
  * @param Varien_Object $payment
  * @param float $amount
  *
  * @return CheckoutApi_ChargePayment_Model_Method_Creditcard
  */
 public function capture(Varien_Object $payment, $amount)
 {
     if (!$this->canCapture()) {
         Mage::throwException(Mage::helper('payment')->__('Capture action is not available.'));
     } else {
         if (!$payment->getLastTransId()) {
             $this->_capture($payment, $amount);
         }
     }
     return $this;
 }
 /**
  * Parent transaction id getter
  *
  * @param Varien_Object $payment
  * @return string
  */
 protected function _getParentTransactionId(Varien_Object $payment)
 {
     return $this->_getLastParentTransactionId($payment->getLastTransId());
 }
Example #13
0
 /**
  * Called before the request is processed
  *
  * @param string $request
  * @param mixed $options
  * @param Varien_Object $payment
  */
 protected function _beforeProcessRequest($request, &$options, Varien_Object $payment)
 {
     switch ($request) {
         case 'capture':
             $options['origTrxNumber'] = $payment->getCcTransId() ? $payment->getCcTransId() : $payment->getLastTransId();
             break;
         case 'refund':
             $options['origTrxNumber'] = $payment->getRefundTransactionId();
             break;
     }
 }
Example #14
0
 /**
  * Cancel payment
  * @param   Varien_Object $payment
  * @return  $this
  */
 public function cancel(Varien_Object $payment)
 {
     Mage::helper('bankdebit/tools')->addToDebug('Action: Cancel');
     $transactionId = $payment->getLastTransId();
     // Add Cancel Transaction
     $payment->setStatus(self::STATUS_DECLINED)->setTransactionId($transactionId)->setIsTransactionClosed(1);
     // Closed
     // Do nothing
     return $this;
 }
Example #15
0
 /**
  * Internal CrossReference function for all VOID, REFUND, COLLECTION transaction types
  *
  * @param Varien_Object $payment
  * @param unknown_type $szTransactionType
  * @param unknown_type $amount
  * @return unknown
  */
 private function _runCrossReferenceTransaction(Varien_Object $payment, $szTransactionType, $amount = false)
 {
     $takePaymentInStoreBaseCurrency = $this->getConfigData('takePaymentInStoreBaseCurrency');
     $error = false;
     $boTransactionProcessed = false;
     $PaymentProcessorFullDomain;
     $rgeplRequestGatewayEntryPointList;
     $crtCrossReferenceTransaction;
     $crtrCrossReferenceTransactionResult;
     $todTransactionOutputData;
     $szMerchantID = $this->getConfigData('merchantid');
     $szPassword = $this->getConfigData('password');
     //
     $iclISOCurrencyList = CSV_ISOCurrencies::getISOCurrencyList();
     $szAmount;
     $nAmount;
     $szCurrencyShort;
     $iclISOCurrencyList;
     $power;
     $nDecimalAmount;
     $szNewCrossReference;
     $order = $payment->getOrder();
     $szOrderID = $order->getRealOrderId();
     //$szCrossReference = $payment->getLastTransId();
     $additionalInformation = $payment->getAdditionalInformation();
     $szCrossReference = $additionalInformation["CrossReference"];
     $szCrossReference = $payment->getLastTransId();
     // check the CrossRference and TransactionType parameters
     if (!$szCrossReference) {
         $error = 'Error occurred for ' . $szTransactionType . ': Missing Cross Reference';
     }
     if (!$szTransactionType) {
         $error = 'Error occurred for ' . $szTransactionType . ': Missing Transaction Type';
     }
     if ($error === false) {
         $PaymentProcessorFullDomain = $this->_getPaymentProcessorFullDomain();
         $rgeplRequestGatewayEntryPointList = new CSV_RequestGatewayEntryPointList();
         $rgeplRequestGatewayEntryPointList->add("https://gw1." . $PaymentProcessorFullDomain, 100, 2);
         $rgeplRequestGatewayEntryPointList->add("https://gw2." . $PaymentProcessorFullDomain, 200, 2);
         $rgeplRequestGatewayEntryPointList->add("https://gw3." . $PaymentProcessorFullDomain, 300, 2);
         $crtCrossReferenceTransaction = new CSV_CrossReferenceTransaction($rgeplRequestGatewayEntryPointList);
         $crtCrossReferenceTransaction->getMerchantAuthentication()->setMerchantID($szMerchantID);
         $crtCrossReferenceTransaction->getMerchantAuthentication()->setPassword($szPassword);
         if (!$takePaymentInStoreBaseCurrency) {
             $power = pow(10, $icISOCurrency->getExponent());
             $nAmount = round($order->getGrandTotal() * $power, 0);
         } else {
             $nAmount = $this->_getRoundedAmount($amount, $icISOCurrency->getExponent());
         }
         $szCurrencyShort = $order->getOrderCurrency()->getCurrencyCode();
         if ($szCurrencyShort != '' && $iclISOCurrencyList->getISOCurrency($szCurrencyShort, $icISOCurrency)) {
             $nCurrencyCode = new CSV_NullableInt($icISOCurrency->getISOCode());
             $crtCrossReferenceTransaction->getTransactionDetails()->getCurrencyCode()->setValue($icISOCurrency->getISOCode());
         }
         // round the amount before use
         //$nDecimalAmount = $this->_getRoundedAmount($nAmount, $icISOCurrency->getExponent());
         $crtCrossReferenceTransaction->getTransactionDetails()->setOrderID($szOrderID);
         $crtCrossReferenceTransaction->getTransactionDetails()->getAmount()->setValue($nAmount);
         $crtCrossReferenceTransaction->getTransactionDetails()->getMessageDetails()->setCrossReference($szCrossReference);
         $crtCrossReferenceTransaction->getTransactionDetails()->getMessageDetails()->setTransactionType($szTransactionType);
         try {
             $boTransactionProcessed = $crtCrossReferenceTransaction->processTransaction($crtrCrossReferenceTransactionResult, $todTransactionOutputData);
         } catch (Exception $exc) {
             Mage::log("exception: " . $exc->getMessage());
         }
         if ($boTransactionProcessed == false) {
             // could not communicate with the payment gateway
             $error = "Couldn't complete " . $szTransactionType . " transaction. Details: " . $crtCrossReferenceTransaction->getLastException();
             $szLogMessage = $error;
         } else {
             switch ($crtrCrossReferenceTransactionResult->getStatusCode()) {
                 case 0:
                     $error = false;
                     $szNewCrossReference = $todTransactionOutputData->getCrossReference();
                     $szLogMessage = $szTransactionType . " CrossReference transaction successfully completed. Response object: ";
                     $payment->setTransactionId($szNewCrossReference)->setParentTransactionId($szCrossReference)->setIsTransactionClosed(1);
                     $payment->save();
                     break;
                 default:
                     $szLogMessage = $crtrCrossReferenceTransactionResult->getMessage();
                     if ($crtrCrossReferenceTransactionResult->getErrorMessages()->getCount() > 0) {
                         $szLogMessage = $szLogMessage . ".";
                         for ($LoopIndex = 0; $LoopIndex < $crtrCrossReferenceTransactionResult->getErrorMessages()->getCount(); $LoopIndex++) {
                             $szLogMessage = $szLogMessage . $crtrCrossReferenceTransactionResult->getErrorMessages()->getAt($LoopIndex) . ";";
                         }
                         $szLogMessage = $szLogMessage . " ";
                     }
                     $error = "Couldn't complete " . $szTransactionType . " transaction for CrossReference: " . $szCrossReference . ". Payment Response: " . $szLogMessage;
                     $szLogMessage = $szTransactionType . " CrossReference transaction failed. Response object: ";
                     break;
             }
             $szLogMessage = $szLogMessage . print_r($crtrCrossReferenceTransactionResult, 1);
         }
         Mage::log($szLogMessage);
     }
     return $error;
 }
Example #16
0
 public function refund(Varien_Object $payment, $amount)
 {
     $transaction_number = $payment->getLastTransId();
     $return_number = $payment->getOrder()->getIncrementId();
     // Convert amount to cents
     $amount = $this->getHelper()->convertToCents($amount);
     $apiReturn = new Tritac_CapayableApiClient_Models_InvoiceCreditRequest($transaction_number, $return_number, $amount);
     // Fetch Store ID and key pair for selected store (admin store is always 0)
     // Create new admin client, with correct key pair to process refund
     $store_id = $payment->getOrder()->getStore()->getId();
     $public_key = Mage::getStoreConfig('capayable/capayable/public_key', $store_id);
     $secret_key = Mage::getStoreConfig('capayable/capayable/secret_key', $store_id);
     $adminClient = new Tritac_CapayableApiClient_Client($public_key, $secret_key, $this->_helper->getMode());
     $isAccepted = $adminClient->creditInvoice($apiReturn);
     return $this;
 }
Example #17
0
 /**
  * Capture preatutharized amount
  *
  * @param Varien_Object $payment
  * @param float $amount
  * @return $this
  */
 public function capture(Varien_Object $payment, $amount)
 {
     if (!$this->canCapture()) {
         return $this;
     }
     if (Mage::app()->getRequest()->getParam('transId')) {
         // Capture is called from response action
         $payment->setStatus(self::STATUS_APPROVED);
         return $this;
     }
     $transactionId = $payment->getLastTransId();
     $params = $this->_prepareAdminRequestParams();
     $params['transId'] = $transactionId;
     $params['authMode'] = '0';
     $params['op'] = 'postAuth-full';
     $responseBody = $this->processAdminRequest($params);
     $response = explode(',', $responseBody);
     if (count($response) <= 0 || $response[0] != 'A' || $response[1] != $transactionId) {
         $message = $this->_getHelper()->__('Error during capture online. Server response: %s', $responseBody);
         $this->_debug($message);
         Mage::throwException($message);
     } else {
         $payment->getOrder()->addStatusToHistory($payment->getOrder()->getStatus(), $this->_getHelper()->__('Worldpay transaction has been captured.'));
     }
 }
 /**
  * Void payment abstract method
  *
  * @param Varien_Object $payment
  *
  * @return Mage_Payment_Model_Abstract
  */
 public function void(Varien_Object $payment)
 {
     try {
         // Init the environment
         $this->_getWrapper()->init($payment->getOrder()->getStoreId());
         // Retrieve the transaction ID
         $transactionId = $this->_getWrapper()->getCleanTransactionId($payment->getLastTransId());
         // Load the transaction from Braintree
         $transaction = Braintree_Transaction::find($transactionId);
         // If the transaction hasn't yet settled we can't do partial refunds
         if ($transaction->status !== Braintree_Transaction::AUTHORIZED || $transaction->status !== Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
             Mage::throwException($this->_getHelper()->__('You can only void authorized/submitted for settlement payments, please setup a credit memo if you wish to refund this order.'));
         }
         // Swap between refund and void
         $result = Braintree_Transaction::void($transactionId);
         // If it's a success close the transaction
         if ($result->success) {
             $payment->setIsTransactionClosed(1);
         } else {
             if ($result->errors->deepSize() > 0) {
                 Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
             } else {
                 Mage::throwException('Unknown');
             }
         }
     } catch (Exception $e) {
         Mage::throwException($this->_getHelper()->__('An error occurred whilst trying to void the transaction: ') . $e->getMessage());
     }
     return $this;
 }
Example #19
0
 /**
  * Refund money
  *
  * @param   Varien_Object $invoicePayment
  * @return  Mage_GoogleCheckout_Model_Payment
  */
 public function refund(Varien_Object $payment, $amount)
 {
     $transactionId = $payment->getLastTransId();
     $params = $this->_prepareAdminRequestParams();
     $params['cartId'] = 'Refund';
     $params['op'] = 'refund-partial';
     $params['transId'] = $transactionId;
     $params['amount'] = $amount;
     $params['currency'] = $payment->getOrder()->getBaseCurrencyCode();
     $responseBody = $this->processAdminRequest($params);
     $response = explode(',', $responseBody);
     if (count($response) <= 0 || $response[0] != 'A' || $response[1] != $transactionId) {
         Mage::throwException($this->_getHelper()->__('Error during refunding online. Server response: %s', $responseBody));
     }
     return $this;
 }
Example #20
0
 /**
  * Cancel payment
  *
  * @param   Varien_Object $invoicePayment
  * @return  Mage_Payment_Model_Abstract
  */
 public function cancel(Varien_Object $payment, $amount = null)
 {
     $amount = is_null($amount) ? $payment->getOrder()->getBaseTotalDue() : $amount;
     $options = array('origTrxNumber' => $payment->getLastTransId(), 'transactionData' => array('trxAmount' => round($amount * 100), 'trxCurrency' => $payment->getOrder()->getBaseCurrencyCode()));
     // try to reverse the payment (for preauthorized payments)
     $res = $this->_processRequest('reverse', $options, $payment);
     // if the reverse call failed try to refund the payment (for authorized payments)
     if ($res === false) {
         try {
             $this->_processRequest('refund', $options, $payment);
             $payment->getOrder()->addStatusToHistory(Mage_Sales_Model_Order::STATE_CANCELED, Mage::helper('phoenix_ipayment')->__('Payment has been refunded.'));
         } catch (Mage_Core_Exception $e) {
             // if the payment can't be refunded add an error message and continue
             Mage::getSingleton('adminhtml/session')->addError(Mage::helper('phoenix_ipayment')->__('Ipayment error: %s', $e->getMessage()));
             $payment->getOrder()->addStatusToHistory(Mage_Sales_Model_Order::STATE_CANCELED, Mage::helper('phoenix_ipayment')->__('Failed to refund payment.'));
         }
     } else {
         $payment->getOrder()->addStatusToHistory(Mage_Sales_Model_Order::STATE_CANCELED, Mage::helper('phoenix_ipayment')->__('Payment has been reversed.'));
     }
     return $this;
 }
 /**
  * Refund the card transaction through gateway
  *
  * @param Mage_Payment_Model_Info $payment
  * @param Varien_Object $card
  * @return Mage_Sales_Model_Order_Payment_Transaction
  */
 protected function _refundCardTransaction($payment, $amount, $card)
 {
     /**
      * Card has last transaction with type "refund" when all captured amount is refunded.
      * Until this moment card has last transaction with type "capture".
      */
     $captureTransactionId = $card->getLastTransId();
     $captureTransaction = $payment->getTransaction($captureTransactionId);
     $realCaptureTransactionId = $captureTransaction->getAdditionalInformation($this->_realTransactionIdKey);
     $payment->setAnetTransType(self::REQUEST_TYPE_CREDIT);
     $payment->setXTransId($realCaptureTransactionId);
     $payment->setAmount($amount);
     $request = $this->_buildRequest($payment);
     $request->setXCardNum($card->getCcLast4());
     $result = $this->_postRequest($request);
     switch ($result->getResponseCode()) {
         case self::RESPONSE_CODE_APPROVED:
             if ($result->getResponseReasonCode() == self::RESPONSE_REASON_CODE_APPROVED) {
                 $refundTransactionId = $result->getTransactionId() . '-refund';
                 $shouldCloseCaptureTransaction = 0;
                 /**
                  * If it is last amount for refund, transaction with type "capture" will be closed
                  * and card will has last transaction with type "refund"
                  */
                 if ($this->_formatAmount($card->getCapturedAmount() - $card->getRefundedAmount()) == $amount) {
                     $card->setLastTransId($refundTransactionId);
                     $shouldCloseCaptureTransaction = 1;
                 }
                 return $this->_addTransaction($payment, $refundTransactionId, Mage_Sales_Model_Order_Payment_Transaction::TYPE_REFUND, array('is_transaction_closed' => 1, 'should_close_parent_transaction' => $shouldCloseCaptureTransaction, 'parent_transaction_id' => $captureTransactionId), array($this->_realTransactionIdKey => $result->getTransactionId()), Mage::helper('paygate')->getTransactionMessage($payment, self::REQUEST_TYPE_CREDIT, $result->getTransactionId(), $card, $amount));
             }
             $exceptionMessage = $this->_wrapGatewayError($result->getResponseReasonText());
             break;
         case self::RESPONSE_CODE_DECLINED:
         case self::RESPONSE_CODE_ERROR:
             $exceptionMessage = $this->_wrapGatewayError($result->getResponseReasonText());
             break;
         default:
             $exceptionMessage = Mage::helper('paygate')->__('Payment refunding error.');
             break;
     }
     $exceptionMessage = Mage::helper('paygate')->getTransactionMessage($payment, self::REQUEST_TYPE_CREDIT, $realCaptureTransactionId, $card, $amount, $exceptionMessage);
     Mage::throwException($exceptionMessage);
 }
Example #22
0
 /**
  * Authorize
  *
  * @param Varien_Object $payment
  * @param float $amount
  * @return Creativestyle_CheckoutByAmazon_Model_Payment_CheckoutByAmazon_Abstract
  */
 public function authorize(Varien_Object $payment, $amount)
 {
     if (!$this->canAuthorize()) {
         Mage::helper('checkoutbyamazon')->throwException('Authorize action is not available');
     }
     if ($payment->getOrder()->canInvoice()) {
         $invoice = $payment->getOrder()->prepareInvoice()->register();
         $invoice->setTransactionId($payment->getLastTransId());
         $this->_getOrder()->addRelatedObject($invoice);
     }
     return $this;
 }