protected function _place($payment, $amount) { $order = $payment->getOrder(); $payer = Mage::helper('iugu')->getPayerInfoFromOrder($payment->getOrder()); $items = Mage::helper('iugu')->getItemsFromOrder($payment->getOrder()); // Verify if needs add interest $interestRate = $this->getInterestRate($payment->getInstallments()); $totalWithInterest = $this->calcTotalWithInterest($amount, $interestRate); if ($totalWithInterest - $amount > 0) { $item = new Varien_Object(); $item->setDescription(Mage::helper('iugu')->__('Interest')); $item->setQuantity(1); $item->setPriceCents(Mage::helper('iugu')->formatAmount($totalWithInterest - $amount)); $items[] = $item; } // Save Payment method if (!$payment->getIuguCustomerPaymentMethodId() && $payment->getIuguSave()) { $data = new Varien_Object(); $data->setToken($payment->getIuguToken()); $data->setCustomerId(Mage::helper('iugu')->getCustomerId()); $data->setDescription(Mage::getModel('core/date')->timestamp(time())); $result = Mage::getSingleton('iugu/api')->savePaymentMethod($data); if ($result->getId()) { $payment->setIuguCustomerPaymentMethodId($result->getId()); } } // Set Charge Data $data = new Varien_Object(); if ($payment->getIuguCustomerPaymentMethodId()) { $data->setCustomerPaymentMethodId($payment->getIuguCustomerPaymentMethodId()); } else { $data->setToken($payment->getIuguToken()); } $data->setMonths($payment->getInstallments())->setEmail($order->getCustomerEmail())->setItems($items)->setPayer($payer); // Discount if ($order->getBaseDiscountAmount()) { $data->setDiscountCents(Mage::helper('iugu')->formatAmount(abs($order->getBaseDiscountAmount()))); } // Tax if ($order->getBaseTaxAmount()) { $data->setTaxCents($this->formatAmount($order->getBaseTaxAmount())); } // Charge $result = Mage::getSingleton('iugu/api')->charge($data); if (!$result->getSuccess()) { Mage::throwException(Mage::helper('iugu')->__('Transaction failed, please try again or contact the card issuing bank.')); } // Set iugu info $payment->setIuguInvoiceId($result->getInvoiceId())->setIuguTotalWithInterest($totalWithInterest)->setIuguUrl($result->getUrl())->setIuguPdf($result->getPdf())->setTransactionId($result->getInvoiceId())->setIsTransactionClosed(0)->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('message' => $result->getMessage())); return $this; }
public function getItemsFromOrder($order) { $items = array(); foreach ($order->getAllVisibleItems() as $data) { $item = new Varien_Object(); $item->setDescription($data->getName()); $item->setQuantity($data->getQtyOrdered()); $item->setPriceCents($this->formatAmount($data->getBasePrice())); $items[] = $item; } // Shipping if ($order->getBaseShippingAmount() > 0) { $item = new Varien_Object(); $item->setDescription($this->__('Shipping & Handling') . ' (' . $order->getShippingDescription() . ')'); $item->setQuantity(1); $item->setPriceCents($this->formatAmount($order->getBaseShippingAmount())); $items[] = $item; } return $items; }