/** * 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; }
/** * 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; }
/** * 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; }
/** * 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'; }
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; }
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; }
/** * 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; }
/** * 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()); }
/** * 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; } }
/** * 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; }
/** * 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; }
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; }
/** * 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; }
/** * 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; }
/** * 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); }
/** * 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; }