Esempio n. 1
0
 /**
  * After clicking 'Place Order' the method 'getOrderPlaceRedirectUrl()' gets called and redirects to here
  * Then this action creates an payment with a transaction_id that gets inserted in the database (mollie_payments, sales_payment_transaction)
  */
 public function paymentAction()
 {
     if ($this->getRequest()->getParam('order_id')) {
         // Load failed payment order
         /** @var $order Mage_Sales_Model_Order */
         $order = Mage::getModel('sales/order')->load($this->getRequest()->getParam('order_id'));
         $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, $this->__(Mollie_Mpm_Model_Api::PAYMENT_FLAG_RETRY), FALSE)->save();
     } else {
         // Load last order by IncrementId
         /** @var $order Mage_Sales_Model_Order */
         $orderIncrementId = $this->_getCheckout()->getLastRealOrderId();
         $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
     }
     $order_id = $order->getId();
     try {
         // Magento is so awesome, we need to manually remember the quote
         $session = $this->_getCheckout();
         if (is_object($session)) {
             $session->setMollieQuoteId($session->getQuoteId());
         }
         $store_code = Mage::app()->getStore()->getCode();
         $store_url = Mage::app()->getStore($store_code)->getBaseUrl();
         // Assign required value's
         $amount = $this->getAmount($order);
         $description = str_replace('%', $order->getIncrementId(), Mage::helper('mpm/data')->getConfig('mollie', 'description'));
         $redirect_url = str_replace('/admin/', $store_url, Mage::getUrl('mpm/api/return') . '?order_id=' . intval($order_id) . '&utm_nooverride=1');
         $method = $this->getRequest()->getParam('method_id', NULL);
         $issuer = $this->getRequest()->getParam('issuer', NULL);
         if ($this->_api->createPayment($amount, $description, $order, $redirect_url, $method, $issuer)) {
             if (!$order->getId()) {
                 Mage::log('Geen order voor verwerking gevonden');
                 Mage::throwException('Geen order voor verwerking gevonden');
             }
             $this->_model->setPayment($order_id, $this->_api->getTransactionId());
             // Creates transaction
             /** @var $payment Mage_Sales_Model_Order_Payment */
             $payment = Mage::getModel('sales/order_payment')->setMethod('Mollie')->setTransactionId($this->_api->getTransactionId())->setIsTransactionClosed(FALSE);
             $order->setPayment($payment);
             $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH);
             $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, $this->__(Mollie_Mpm_Model_Api::PAYMENT_FLAG_INPROGRESS), FALSE)->save();
             $this->_redirectUrl($this->_api->getPaymentURL());
         } else {
             Mage::throwException($this->_api->getErrorMessage());
         }
     } catch (Exception $e) {
         $this->_restoreCart();
         Mage::log($e);
         $this->_showException($e->getMessage(), $order_id);
     }
 }