/** * Order payment method * * @param Varien_Object $payment * @param float $amount * * @return Amazon_Payments_Model_PaymentMethod */ public function order(Varien_Object $payment, $amount) { if (!$amount) { return $this; } $orderReferenceId = $payment->getAdditionalInformation('order_reference'); if (!$orderReferenceId) { $orderReferenceId = Mage::getSingleton('checkout/session')->getAmazonOrderReferenceId(); if (!$orderReferenceId) { Mage::throwException('Please log in to your Amazon account by clicking the Amazon pay button.'); } $payment->setAdditionalInformation('order_reference', $orderReferenceId); } $payment->setTransactionId($orderReferenceId); $order = $payment->getOrder(); // If previous order submission failed (e.g. bad credit card), must validate order status to prevent multiple setOrderReferenceDetails() if ($this->_getErrorCheck()) { $orderReferenceDetails = $this->_getApi()->getOrderReferenceDetails($orderReferenceId); } if (!$this->_getErrorCheck() || $orderReferenceDetails->getOrderReferenceStatus()->getState() == 'Draft') { $apiResult = $this->_getApi()->setOrderReferenceDetails($orderReferenceId, $order->getBaseGrandTotal(), $order->getBaseCurrencyCode(), $order->getIncrementId(), $this->_getApi()->getConfig()->getStoreName()); } try { $apiResult = $this->_getApi()->confirmOrderReference($orderReferenceId); } catch (Exception $e) { Mage::throwException("Please try another Amazon payment method." . "\n\n" . substr($e->getMessage(), 0, strpos($e->getMessage(), 'Stack trace'))); $this->_setErrorCheck(); return; } $payment->setIsTransactionClosed(false); $payment->setSkipOrderProcessing(true); $message = Mage::helper('payment')->__(($this->getConfigData('is_async') ? 'Asynchronous ' : '') . 'Order of %s sent to Amazon Payments.', $order->getStore()->convertPrice($amount, true, false)); $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER, null, false, $message); switch ($this->getConfigData('payment_action')) { case self::ACTION_AUTHORIZE: $this->_authorize($payment, $amount, false); break; case self::ACTION_AUTHORIZE_CAPTURE: $this->_authorize($payment, $amount, true); break; default: break; } return $this; }
/** * Add transaction with correct transaction Id * * @param Varien_Object $payment * @param string $txnId * @return void */ protected function _addTransaction($payment, $txnId) { $previousTxnId = $payment->getTransactionId(); $payment->setTransactionId($txnId); $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH); $payment->setTransactionId($previousTxnId); }