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