Example #1
0
 /**
  * Convert order payment to quote payment
  *
  * @param   Mage_Sales_Model_Order_Payment $payment
  * @return  Mage_Sales_Model_Quote_Payment
  */
 public function paymentToQuotePayment(Mage_Sales_Model_Order_Payment $payment, $quotePayment = null)
 {
     if (!$quotePayment instanceof Mage_Sales_Model_Quote_Payment) {
         $quotePayment = Mage::getModel('sales/quote_payment');
     }
     $quotePayment->setStoreId($payment->getStoreId())->setCustomerPaymentId($payment->getCustomerPaymentId())->setMethod($payment->getMethod())->setAdditionalData($payment->getAdditionalData())->setPoNumber($payment->getPoNumber())->setCcType($payment->getCcType())->setCcNumberEnc($payment->getCcNumberEnc())->setCcLast4($payment->getCcLast4())->setCcOwner($payment->getCcOwner())->setCcCidEnc($payment->getCcCidEnc())->setCcExpMonth($payment->getCcExpMonth())->setCcExpYear($payment->getCcExpYear());
     return $quotePayment;
 }
Example #2
0
 /**
  * Place an order with authorization or capture action
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return Mage_Paypal_Model_Direct
  */
 protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
 {
     $order = $payment->getOrder();
     $api = $this->_pro->getApi()->setPaymentAction($this->_pro->getConfig()->paymentAction)->setIpAddress(Mage::app()->getRequest()->getClientIp(false))->setAmount($amount)->setCurrencyCode($order->getBaseCurrencyCode())->setInvNum($order->getIncrementId())->setEmail($order->getCustomerEmail())->setNotifyUrl(Mage::getUrl('paypal/ipn/'))->setCreditCardType($payment->getCcType())->setCreditCardNumber($payment->getCcNumber())->setCreditCardExpirationDate($this->_getFormattedCcExpirationDate($payment->getCcExpMonth(), $payment->getCcExpYear()))->setCreditCardCvv2($payment->getCcCid())->setMaestroSoloIssueNumber($payment->getCcSsIssue());
     if ($payment->getCcSsStartMonth() && $payment->getCcSsStartYear()) {
         $year = sprintf('%02d', substr($payment->getCcSsStartYear(), -2, 2));
         $api->setMaestroSoloIssueDate($this->_getFormattedCcExpirationDate($payment->getCcSsStartMonth(), $year));
     }
     if ($this->getIsCentinelValidationEnabled()) {
         $this->getCentinelValidator()->exportCmpiData($api);
     }
     // add shipping and billing addresses
     if ($order->getIsVirtual()) {
         $api->setAddress($order->getBillingAddress())->setSuppressShipping(true);
     } else {
         $api->setAddress($order->getShippingAddress());
         $api->setBillingAddress($order->getBillingAddress());
     }
     // add line items
     $api->setPaypalCart(Mage::getModel('paypal/cart', array($order)))->setIsLineItemsEnabled($this->_pro->getConfig()->lineItemsEnabled);
     // call api and import transaction and other payment information
     $api->callDoDirectPayment();
     $this->_importResultToPayment($api, $payment);
     try {
         $api->callGetTransactionDetails();
     } catch (Mage_Core_Exception $e) {
         // if we recieve errors, but DoDirectPayment response is Success, then set Pending status for transaction
         $payment->setIsTransactionPending(true);
     }
     $this->_importResultToPayment($api, $payment);
     return $this;
 }
Example #3
0
 /**
  * Place an order with authorization or capture action
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return Mage_Paypal_Model_Direct
  */
 protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
 {
     $order = $payment->getOrder();
     $api = $this->_pro->getApi()->setPaymentAction($this->_pro->getConfig()->paymentAction)->setIpAddress(Mage::app()->getRequest()->getClientIp(false))->setAmount($amount)->setCurrencyCode($order->getBaseCurrencyCode())->setInvNum($order->getIncrementId())->setEmail($order->getCustomerEmail())->setNotifyUrl(Mage::getUrl('paypal/ipn/direct'))->setCreditCardType($payment->getCcType())->setCreditCardNumber($payment->getCcNumber())->setCreditCardExpirationDate(sprintf('%02d%02d', $payment->getCcExpMonth(), $payment->getCcExpYear()))->setCreditCardCvv2($payment->getCcCid());
     // add shipping address
     if ($order->getIsVirtual()) {
         $api->setAddress($order->getBillingAddress())->setSuppressShipping(true);
     } else {
         $api->setAddress($order->getShippingAddress());
     }
     // add line items
     if ($this->_pro->getConfig()->lineItemsEnabled) {
         list($items, $totals) = Mage::helper('paypal')->prepareLineItems($order);
         $api->setLineItems($items)->setLineItemTotals($totals);
     }
     // call api and import transaction and other payment information
     $api->callDoDirectPayment();
     $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0)->setIsPaid($api->isPaid($api->getPaymentStatus()));
     Mage::getModel('paypal/info')->importToPayment($api, $payment);
     return $this;
 }
 /**
  * Place an order with authorization or capture action
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return Mage_Paypal_Model_Direct
  */
 protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
 {
     $order = $payment->getOrder();
     $api = $this->_pro->getApi()->setPaymentAction($this->_pro->getConfig()->paymentAction)->setIpAddress(Mage::app()->getRequest()->getClientIp(false))->setAmount($amount)->setCurrencyCode($order->getBaseCurrencyCode())->setInvNum($order->getIncrementId())->setEmail($order->getCustomerEmail())->setNotifyUrl(Mage::getUrl($this->_notifyAction))->setCreditCardType($payment->getCcType())->setCreditCardNumber($payment->getCcNumber())->setCreditCardExpirationDate(sprintf('%02d%02d', $payment->getCcExpMonth(), $payment->getCcExpYear()))->setCreditCardCvv2($payment->getCcCid())->setMaestroSoloIssueNumber($payment->getCcSsIssue());
     if ($payment->getCcSsStartMonth() && $payment->getCcSsStartYear()) {
         $api->setMaestroSoloIssueDate(sprintf('%02d%02d', $payment->getCcSsStartMonth(), preg_replace('~\\d\\d(\\d\\d)~', '$1', $payment->getCcSsStartYear())));
     }
     if ($this->getIsCentinelValidationEnabled()) {
         $this->getCentinelValidator()->exportCmpiData($api);
     }
     // add shipping address
     if ($order->getIsVirtual()) {
         $api->setAddress($order->getBillingAddress())->setSuppressShipping(true);
     } else {
         $api->setAddress($order->getShippingAddress());
     }
     // add line items
     if ($this->_pro->getConfig()->lineItemsEnabled && Mage::helper('paypal')->doLineItemsMatchAmount($order, $amount)) {
         //For transfering line items order amount must be equal to cart total amount
         list($items, $totals) = Mage::helper('paypal')->prepareLineItems($order);
         $api->setLineItems($items)->setLineItemTotals($totals);
     }
     // call api and import transaction and other payment information
     $api->callDoDirectPayment();
     $this->_importResultToPayment($api, $payment);
     return $this;
 }
 /**
  * 
  * @param Allopass_Hipay_Model_Api_Response_Gateway $gatewayResponse
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  */
 public function processResponse($gatewayResponse, $payment, $amount)
 {
     $order = $payment->getOrder();
     $customer = Mage::getModel('customer/customer')->load($order->getCustomerId());
     //$defaultExceptionMessage = Mage::helper('hipay')->__('Error in process response!');
     switch ($this->getConfigPaymentAction()) {
         case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE:
             $requestType = self::OPERATION_AUTHORIZATION;
             $newTransactionType = Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH;
             $defaultExceptionMessage = Mage::helper('hipay')->__('Payment authorization error.');
             break;
         case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE:
             $requestType = self::OPERATION_SALE;
             $newTransactionType = Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE;
             $defaultExceptionMessage = Mage::helper('hipay')->__('Payment capturing error.');
             break;
     }
     //add data to payment object
     if ($payment->getCcType() == "") {
         $payment->setCcType($gatewayResponse->getPaymentProduct());
     }
     switch ($gatewayResponse->getState()) {
         case self::STATE_COMPLETED:
         case self::STATE_PENDING:
             switch ((int) $gatewayResponse->getStatus()) {
                 case 111:
                     //denied
                     $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), $newTransactionType, array('is_transaction_closed' => 0), array(), Mage::helper('hipay')->getTransactionMessage($payment, $requestType, null, $amount));
                     if ($order->getState() == Mage_Sales_Model_Order::STATE_HOLDED) {
                         $order->unhold();
                     }
                     if (!($status = $this->getConfigData('order_status_payment_refused'))) {
                         $status = $order->getStatus();
                     }
                     if ($status == Mage_Sales_Model_Order::STATE_HOLDED && $order->canHold()) {
                         $order->hold();
                     } elseif ($status == Mage_Sales_Model_Order::STATE_CANCELED && $order->canCancel()) {
                         $order->cancel();
                     }
                     $order->addStatusToHistory($status, Mage::helper('hipay')->getTransactionMessage($payment, self::OPERATION_AUTHORIZATION, null, $amount, true, $gatewayResponse->getMessage()));
                     $order->save();
                     break;
                 case 112:
                     //Authorized and pending
                     $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH, array('is_transaction_closed' => 0), array($this->_realTransactionIdKey => $gatewayResponse->getTransactionReference()), Mage::helper('hipay')->getTransactionMessage($payment, self::OPERATION_AUTHORIZATION, $gatewayResponse->getTransactionReference(), $amount, true));
                     $state = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
                     $status = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
                     if (defined('Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW')) {
                         $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW;
                         $status = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW;
                     }
                     $this->_setFraudDetected($gatewayResponse, $customer, $payment, $amount);
                     $order->setState($state, $status, $gatewayResponse->getMessage());
                     $payment->setAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     $payment->setBaseAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     $order->save();
                     break;
                 case 142:
                     //Authorized Requested
                     if ($order->getStatus() == self::STATUS_CAPTURE_REQUESTED || $order->getStatus() == Mage_Sales_Model_Order::STATE_PROCESSING || $order->getStatus() == Mage_Sales_Model_Order::STATE_COMPLETE || $order->getStatus() == Mage_Sales_Model_Order::STATE_CLOSED || $order->getStatus() == self::STATUS_PENDING_CAPTURE) {
                         // for logic process
                         break;
                     }
                     $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH, array('is_transaction_closed' => 0), array($this->_realTransactionIdKey => $gatewayResponse->getTransactionReference()), Mage::helper('hipay')->getTransactionMessage($payment, self::OPERATION_AUTHORIZATION, $gatewayResponse->getTransactionReference(), $amount, true));
                     $state = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
                     if (defined('Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW')) {
                         $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW;
                     }
                     $status = self::STATUS_AUTHORIZATION_REQUESTED;
                     $order->setState($state, $status, $gatewayResponse->getMessage());
                     $payment->setAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     $payment->setBaseAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     $order->save();
                     break;
                 case 114:
                     //Expired
                     if ($order->getStatus() != self::STATUS_PENDING_CAPTURE) {
                         // for logic process
                         break;
                     }
                     $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), Mage_Sales_Model_Order_Payment_Transaction::TYPE_VOID, array('is_transaction_closed' => 0), array($this->_realTransactionIdKey => $gatewayResponse->getTransactionReference()), Mage::helper('hipay')->getTransactionMessage($payment, self::OPERATION_AUTHORIZATION, $gatewayResponse->getTransactionReference(), $amount, true));
                     /**
                      * We change status to expired and state to holded
                      * So the administrator can try to capture transaction even if
                      * the auhorization was expired
                      * 
                      */
                     $state = Mage_Sales_Model_Order::STATE_HOLDED;
                     $status = self::STATUS_EXPIRED;
                     $order->setState($state, $status, $gatewayResponse->getMessage());
                     $order->save();
                     break;
                 case 115:
                     //Canceled
                     if ($order->cancel()) {
                         $order->cancel();
                         $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), Mage_Sales_Model_Order_Payment_Transaction::TYPE_VOID, array('is_transaction_closed' => 1), array($this->_realTransactionIdKey => $gatewayResponse->getTransactionReference()), Mage::helper('hipay')->getTransactionMessage($payment, self::OPERATION_AUTHORIZATION, $gatewayResponse->getTransactionReference(), $amount, true));
                     }
                     break;
                 case 116:
                     //Authorized
                     //check if this order was in state fraud detected
                     $fraud_type = $order->getPayment()->getAdditionalInformation('fraud_type');
                     $fraud_score = $order->getPayment()->getAdditionalInformation('scoring');
                     $has_fraud = !empty($fraud_type) && !empty($fraud_score);
                     if ($order->getStatus() == 'capture_requested' || $order->getStatus() == 'processing' && !$has_fraud || $order->getStatus() == 'complete' || $order->getStatus() == 'closed') {
                         // for logic process
                         break;
                     }
                     if (!$this->isPreauthorizeCapture($payment)) {
                         $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH, array('is_transaction_closed' => 0), array(), Mage::helper('hipay')->getTransactionMessage($payment, self::OPERATION_AUTHORIZATION, null, $amount));
                     }
                     $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, self::STATUS_PENDING_CAPTURE, Mage::helper('hipay')->__("Waiting for capture transaction ID '%s' of amount %s", $gatewayResponse->getTransactionReference(), $order->getBaseCurrency()->formatTxt($order->getBaseTotalDue())), $notified = true);
                     $order->save();
                     // Send order confirmation email - TPPMAG1-29
                     if (!$order->getEmailSent() && $order->getCanSendNewEmailFlag()) {
                         try {
                             if (method_exists($order, 'queueNewOrderEmail')) {
                                 $order->queueNewOrderEmail();
                             } else {
                                 $order->sendNewOrderEmail();
                             }
                         } catch (Exception $e) {
                             Mage::logException($e);
                         }
                     }
                     $payment->setAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     $payment->setBaseAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     break;
                 case 117:
                     //Capture Requested
                     if ($order->getStatus() == 'capture' || $order->getStatus() == 'processing') {
                         // for logic process
                         break;
                     }
                     $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, array('is_transaction_closed' => 0), array(), Mage::helper('hipay')->getTransactionMessage($payment, self::OPERATION_SALE, null, $amount));
                     $message = Mage::helper("hipay")->__('Capture Requested by Hipay.');
                     $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, 'capture_requested', $message, null, false);
                     $payment->setAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     $payment->setBaseAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     //If status Capture Requested is not configured to validate the order, we break.
                     if (((int) $this->getConfigData('hipay_status_validate_order') == 117) === false) {
                         break;
                     }
                 case 118:
                     //Capture. There are 2 ways to enter in this case: 1. direct capture notification. 2. After 117 case, when it is configured for valid order with 117 status.
                     if ($order->getStatus() == $this->getConfigData('order_status_payment_accepted')) {
                         break;
                     }
                     //If status Capture Requested is configured to validate the order and is a direct capture notification (118), we break because order is already validate.
                     if (((int) $this->getConfigData('hipay_status_validate_order') == 117) === true && (int) $gatewayResponse->getStatus() == 118) {
                         // if callback 118 and config validate order = 117 and no 117 in history - execute treatment alse break
                         $histories = Mage::getResourceModel('sales/order_status_history_collection')->setOrderFilter($order)->addFieldToFilter('comment', array('like' => '%code-117%'));
                         if ($histories->count() > 0) {
                             break;
                         }
                     }
                     //Check if it is split payment and insert it
                     $profile = 0;
                     if (($profile = (int) $payment->getAdditionalInformation('split_payment_id')) && $customer->getId()) {
                         $token = isset($gatewayResponse->paymentMethod['token']) ? $gatewayResponse->paymentMethod['token'] : $gatewayResponse->getData('cardtoken');
                         $this->getHelper()->insertSplitPayment($order, $profile, $customer->getId(), $token);
                     }
                     if ($amount != $order->getBaseGrandTotal() && !$profile && $order->getState() != Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW) {
                         $transactionId = $gatewayResponse->getTransactionReference();
                         $order->addStatusHistoryComment(Mage::helper('hipay')->__('Notification "Capture". Capture issued by merchant. Registered notification about captured amount of %s. Transaction ID: "%s". Invoice has not been created. Please create offline Invoice.', $order->getBaseCurrency()->formatTxt($amount), $transactionId), false);
                         break;
                     }
                     if ($order->getState() == Mage_Sales_Model_Order::STATE_HOLDED) {
                         $order->unhold();
                     }
                     // Create invoice
                     if ($this->getConfigData('invoice_create', $order->getStoreId()) && !$order->hasInvoices()) {
                         $invoice = $this->create_invoice($order, $gatewayResponse->getTransactionReference(), false);
                         Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder())->save();
                     } elseif ($order->hasInvoices()) {
                         foreach ($order->getInvoiceCollection() as $invoice) {
                             if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_OPEN && round($invoice->getBaseGrandTotal() + $order->getBaseTotalPaid(), 2) == $gatewayResponse->getCapturedAmount()) {
                                 $invoice->pay();
                                 Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder())->save();
                             }
                         }
                     }
                     if (($profile = (int) $payment->getAdditionalInformation('split_payment_id')) && $customer->getId()) {
                         $token = isset($gatewayResponse->paymentMethod['token']) ? $gatewayResponse->paymentMethod['token'] : $gatewayResponse->getData('cardtoken');
                         $this->getHelper()->insertSplitPayment($order, $profile, $customer->getId(), $token);
                     }
                     if (!($status = $this->getConfigData('order_status_payment_accepted'))) {
                         $status = $order->getStatus();
                     }
                     $message = Mage::helper("hipay")->__('Payment accepted by Hipay.');
                     if ($status == Mage_Sales_Model_Order::STATE_PROCESSING) {
                         $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, $status, $message);
                     } else {
                         if ($status == Mage_Sales_Model_Order::STATE_COMPLETE) {
                             $order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
                             $order->addStatusToHistory($status, $message, true);
                             /*$order->setState(
                             				Mage_Sales_Model_Order::STATE_COMPLETE, $status, $message, null, false
                             		);*/
                         } else {
                             $order->addStatusToHistory($status, $message, true);
                         }
                     }
                     $payment->setAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     $payment->setBaseAmountAuthorized($gatewayResponse->getAuthorizedAmount());
                     // Send order confirmation email - TPPMAG1-29
                     if (!$order->getEmailSent() && $order->getCanSendNewEmailFlag()) {
                         try {
                             if (method_exists($order, 'queueNewOrderEmail')) {
                                 $order->queueNewOrderEmail();
                             } else {
                                 $order->sendNewOrderEmail();
                             }
                         } catch (Exception $e) {
                             Mage::logException($e);
                         }
                     }
                     break;
                 case 124:
                     //Refund Requested
                     $message = Mage::helper("hipay")->__('Refund Requested by Hipay.');
                     $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, 'refund_requested', $message, null, false);
                     break;
                 case 125:
                     //Refund
                 //Refund
                 case 126:
                     //Partially Refund
                     if ($order->hasCreditmemos()) {
                         $total_already_refunded = 0;
                         /* @var $creditmemo Mage_Sales_Model_Order_Creditmemo */
                         //We get total already refunded for found the amount of this creditmemo
                         foreach ($order->getCreditmemosCollection() as $creditmemo) {
                             if ($creditmemo->getState() == Mage_Sales_Model_Order_Creditmemo::STATE_REFUNDED) {
                                 $total_already_refunded += $creditmemo->getGrandTotal();
                             }
                         }
                         $cm_amount_check = round($gatewayResponse->getRefundedAmount() - $total_already_refunded, 2);
                         $status = $order->getStatus();
                         if (round($gatewayResponse->getRefundedAmount(), 2) < round($order->getGrandTotal(), 2)) {
                             $status = self::STATUS_PARTIAL_REFUND;
                         }
                         /* @var $creditmemo Mage_Sales_Model_Order_Creditmemo */
                         foreach ($order->getCreditmemosCollection() as $creditmemo) {
                             if ($creditmemo->getState() == Mage_Sales_Model_Order_Creditmemo::STATE_OPEN && round($creditmemo->getGrandTotal(), 2) == $cm_amount_check) {
                                 $creditmemo->setState(Mage_Sales_Model_Order_Creditmemo::STATE_REFUNDED);
                                 $message = Mage::helper("hipay")->__('Refund accepted by Hipay.');
                                 $order->addStatusToHistory($status, $message);
                                 Mage::getModel('core/resource_transaction')->addObject($creditmemo)->addObject($creditmemo->getOrder())->save();
                                 break;
                             }
                         }
                     } elseif ($order->canCreditmemo()) {
                         if ($amount != $order->getBaseGrandTotal()) {
                             $transactionId = $gatewayResponse->getTransactionReference();
                             $order->addStatusHistoryComment(Mage::helper('hipay')->__('Notification "Refunded". Refund issued by merchant. Registered notification about refunded amount of %s. Transaction ID: "%s". Credit Memo has not been created. Please create offline Credit Memo.', $order->getBaseCurrency()->formatTxt($amount), $transactionId), false);
                             return $this;
                         }
                         $amountTxt = $order->getBaseCurrency()->formatTxt($amount);
                         $transactionId = $gatewayResponse->getTransactionReference();
                         $comment = Mage::helper('hipay')->__('Refunded amount of %s. Transaction ID: "%s"', $amountTxt, $transactionId);
                         $isRefundFinal = $gatewayResponse->getRefundedAmount() == $order->getGrandTotal();
                         $payment->setIsTransactionClosed($isRefundFinal)->registerRefundNotification($amount);
                         $order->addStatusHistoryComment($comment, false);
                         // TODO: there is no way to close a capture right now
                         $creditmemo = $payment->getCreatedCreditmemo();
                         if ($creditmemo) {
                             $creditmemo->sendEmail();
                             $order->addStatusHistoryComment(Mage::helper('hipay')->__('Notified customer about creditmemo #%s.', $creditmemo->getIncrementId()))->setIsCustomerNotified(true)->save();
                         }
                     }
                     break;
                 default:
                     $message = Mage::helper("hipay")->__('Message Hipay: %s. Status: %s', $gatewayResponse->getMessage(), $gatewayResponse->getStatus());
                     $order->addStatusToHistory($order->getStatus(), $message);
                     break;
             }
             if ($gatewayResponse->getState() == self::STATE_COMPLETED) {
                 if (in_array($gatewayResponse->getPaymentProduct(), array('visa', 'american-express', 'mastercard', 'cb')) && ((int) $gatewayResponse->getEci() == 9 || $payment->getAdditionalInformation('create_oneclick')) && !$order->isNominal()) {
                     if ($customer->getId()) {
                         $this->responseToCustomer($customer, $gatewayResponse);
                     }
                 }
             }
             $order->save();
             break;
         case self::STATE_FORWARDING:
             $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), $newTransactionType, array('is_transaction_closed' => 0), array(), Mage::helper('hipay')->getTransactionMessage($payment, $requestType, $gatewayResponse->getTransactionReference(), $amount));
             $payment->setIsTransactionPending(1);
             $order->save();
             break;
         case self::STATE_DECLINED:
             if ($order->getStatus() == Mage_Sales_Model_Order::STATE_PROCESSING || $order->getStatus() == Mage_Sales_Model_Order::STATE_COMPLETE || $order->getStatus() == Mage_Sales_Model_Order::STATE_CLOSED) {
                 // for logic process
                 break;
             }
             $statusCode = (int) $gatewayResponse->getStatus();
             $reason = $gatewayResponse->getReason();
             $this->addTransaction($payment, $gatewayResponse->getTransactionReference(), $newTransactionType, array('is_transaction_closed' => 0), array($this->_realTransactionIdKey => $gatewayResponse->getTransactionReference(), $this->_isTransactionFraud => true), Mage::helper('hipay')->getTransactionMessage($payment, $requestType, null, $amount, true, "Code: " . $reason['code'] . " " . Mage::helper('hipay')->__("Reason") . " : " . $reason['message']));
             if ($order->getState() == Mage_Sales_Model_Order::STATE_HOLDED) {
                 $order->unhold();
             }
             if (!($status = $this->getConfigData('order_status_payment_refused'))) {
                 $status = $order->getStatus();
             }
             if (in_array($statusCode, array(110))) {
                 $this->_setFraudDetected($gatewayResponse, $customer, $payment, $amount, true);
             }
             if ($status == Mage_Sales_Model_Order::STATE_HOLDED && $order->canHold()) {
                 $order->hold();
             } elseif ($status == Mage_Sales_Model_Order::STATE_CANCELED && $order->canCancel()) {
                 $order->cancel();
             }
             $order->addStatusToHistory($status, Mage::helper('hipay')->getTransactionMessage($payment, $this->getOperation(), null, $amount, true, $gatewayResponse->getMessage()));
             $order->save();
             break;
         case self::STATE_ERROR:
         default:
             Mage::throwException($defaultExceptionMessage);
             break;
     }
 }