Advertisement
Guest User

Untitled

a guest
Mar 15th, 2017
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.36 KB | None | 0 0
  1. $this)); $order = $this->getOrder(); $this->setAmountOrdered($order->getTotalDue()); $this->setBaseAmountOrdered($order->getBaseTotalDue()); $this->setShippingAmount($order->getShippingAmount()); $this->setBaseShippingAmount($order->getBaseShippingAmount()); $methodInstance = $this->getMethodInstance(); $methodInstance->setStore($order->getStoreId()); $orderState = Mage_Sales_Model_Order::STATE_NEW; $stateObject = new Varien_Object(); /** * Do order payment validation on payment method level */ $methodInstance->validate(); $action = $methodInstance->getConfigPaymentAction(); if ($action) { if ($methodInstance->isInitializeNeeded()) { /** * For method initialization we have to use original config value for payment action */ $methodInstance->initialize($methodInstance->getConfigData('payment_action'), $stateObject); } else { $orderState = Mage_Sales_Model_Order::STATE_NEW; switch ($action) { case Mage_Payment_Model_Method_Abstract::ACTION_ORDER: $this->_order($order->getBaseTotalDue()); break; case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE: $this->_authorize(true, $order->getBaseTotalDue()); // base amount will be set inside $this->setAmountAuthorized($order->getTotalDue()); break; case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE: $this->setAmountAuthorized($order->getTotalDue()); $this->setBaseAmountAuthorized($order->getBaseTotalDue()); $this->capture(null); break; default: break; } } } $this->_createBillingAgreement(); $orderIsNotified = null; if ($stateObject->getState() && $stateObject->getStatus()) { $orderState = $stateObject->getState(); $orderStatus = $stateObject->getStatus(); $orderIsNotified = $stateObject->getIsNotified(); } else { $orderStatus = $methodInstance->getConfigData('order_status'); if (!$orderStatus) { $orderStatus = $order->getConfig()->getStateDefaultStatus($orderState); } else { // check if $orderStatus has assigned a state $states = $order->getConfig()->getStatusStates($orderStatus); if (count($states) == 0) { $orderStatus = $order->getConfig()->getStateDefaultStatus($orderState); } } } $isCustomerNotified = (null !== $orderIsNotified) ? $orderIsNotified : $order->getCustomerNoteNotify(); $message = $order->getCustomerNote(); // add message if order was put into review during authorization or capture if ($order->getState() == Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW) { if ($message) { $order->addStatusToHistory($order->getStatus(), $message, $isCustomerNotified); } } elseif ($order->getState() && ($orderStatus !== $order->getStatus() || $message)) { // add message to history if order state already declared $order->setState($orderState, $orderStatus, $message, $isCustomerNotified); } elseif (($order->getState() != $orderState) || ($order->getStatus() != $orderStatus) || $message) { // set order state $order->setState($orderState, $orderStatus, $message, $isCustomerNotified); } Mage::dispatchEvent('sales_order_payment_place_end', array('payment' => $this)); return $this; } /** * Capture the payment online * Does not create invoice automatically for order * Updates transactions hierarchy, if required * Updates payment totals, updates order status and adds proper comments * * TODO: eliminate logic duplication with registerCaptureNotification() * * @return Mage_Sales_Model_Order_Payment * @throws Mage_Core_Exception */ public function capture($invoice) { $invoice = null; $order = $this->getOrder(); $amountToCapture = $this->_formatAmount($order->getBaseGrandTotal()); $paidWorkaround = (float)$amountToCapture; $this->_isCaptureFinal($paidWorkaround); $this->_generateTransactionId( Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $this->getAuthorizationTransaction() ); Mage::dispatchEvent('sales_order_payment_capture', array('payment' => $this, 'invoice' => $invoice)); $status = true; if (!$this->getIsTransactionPending()) { // attempt to capture: this can trigger "is_transaction_pending" $this->getMethodInstance()->setStore($order->getStoreId())->capture($this, $amountToCapture); $transaction = $this->_addTransaction( Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $invoice, true ); if ($this->getIsTransactionPending()) { $message = Mage::helper('sales')->__('Capturing amount of %s is pending approval on gateway.', $this->_formatPrice($amountToCapture)); $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW; if ($this->getIsFraudDetected()) { $status = Mage_Sales_Model_Order::STATUS_FRAUD; } } else { // normal online capture: invoice is marked as "paid" $message = Mage::helper('sales')->__('Captured amount of %s online.', $this->_formatPrice($amountToCapture)); $state = Mage_Sales_Model_Order::STATE_NEW; $this->_updateTotals(array('base_amount_paid_online' => $amountToCapture)); } if ($order->isNominal()) { $message = $this->_prependMessage(Mage::helper('sales')->__('Nominal order registered.')); } else { $message = $this->_prependMessage($message); $message = $this->_appendTransactionToMessage($transaction, $message); } $order->setState($state, $status, $message); return $this; } Mage::throwException( Mage::helper('sales')->__('The transaction "%s" cannot be captured yet.', $amountToCapture) ); } /** * Process a capture notification from a payment gateway for specified amount * Does not create an invoice automatically if the amount if the amount covers the order base grand total completely * Updates transactions hierarchy, if required * Prevents transaction double processing * Updates payment totals, updates order status and adds proper comments * * TODO: eliminate logic duplication with capture() * * @param float $amount * @param bool $skipFraudDetection * @return Mage_Sales_Model_Order_Payment */ public function registerCaptureNotification($amount, $skipFraudDetection = false) { $this->_generateTransactionId(Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $this->getAuthorizationTransaction() ); $order = $this->getOrder(); $amount = (float)$amount; $invoice = null; // register new capture if (!$invoice) { $isSameCurrency = $this->_isSameCurrency(); if (!$isSameCurrency && !$this->_isCaptureFinal($amount)) { if (!$skipFraudDetection || !$isSameCurrency) { $this->setIsFraudDetected(true); } $this->_updateTotals(array('base_amount_paid_online' => $amount)); } } $status = true; if ($this->getIsTransactionPending()) { $message = Mage::helper('sales')->__('Capturing amount of %s is pending approval on gateway.', $this->_formatPrice($amount)); $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW; if ($this->getIsFraudDetected()) { $message = Mage::helper('sales')->__('Order is suspended as its capture amount %s is suspected to be fraudulent.', $this->_formatPrice($amount, $this->getCurrencyCode())); $status = Mage_Sales_Model_Order::STATUS_FRAUD; } } else { $message = Mage::helper('sales')->__('Registered notification about captured amount of %s.', $this->_formatPrice($amount)); $state = Mage_Sales_Model_Order::STATE_NEW; if ($this->getIsFraudDetected()) { $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW; $message = Mage::helper('sales')->__('Order is suspended as its capture amount %s is suspected to be fraudulent.', $this->_formatPrice($amount, $this->getCurrencyCode())); $status = Mage_Sales_Model_Order::STATUS_FRAUD; } } $transaction = $this->_addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $invoice, true); $message = $this->_prependMessage($message); $message = $this->_appendTransactionToMessage($transaction, $message); $order->setState($state, $status, $message); return $this; } } ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement